mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-04-06 03:19:39 +02:00
# Description of Changes Changes the desktop app to allow connections to self-hosted servers on first startup. This was quite involved and hit loads of CORS issues all through the stack, but I think it's working now. This also changes the bundled backend to spawn on an OS-decided port rather than always spawning on `8080`, which means that the user can have other things running on port `8080` now and the app will still work fine. There were quite a few places that needed to be updated to decouple the app from explicitly using `8080` and I was originally going to split those changes out into another PR (#4939), but I couldn't get it working independently in the time I had, so the diff here is just going to be complex and contian two distinct changes - sorry 🙁
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { useEffect, useRef, useState } from 'react';
|
|
import { connectionModeService } from '@app/services/connectionModeService';
|
|
import { authService } from '@app/services/authService';
|
|
|
|
/**
|
|
* First launch check hook
|
|
* Checks if this is the first time the app is being launched
|
|
* Does not require FileContext - can be used early in the provider hierarchy
|
|
*/
|
|
export function useFirstLaunchCheck(): { isFirstLaunch: boolean; setupComplete: boolean } {
|
|
const [isFirstLaunch, setIsFirstLaunch] = useState(false);
|
|
const [setupComplete, setSetupComplete] = useState(false);
|
|
const setupCheckCompleteRef = useRef(false);
|
|
|
|
// Check if this is first launch
|
|
useEffect(() => {
|
|
const checkFirstLaunch = async () => {
|
|
try {
|
|
const firstLaunch = await connectionModeService.isFirstLaunch();
|
|
setIsFirstLaunch(firstLaunch);
|
|
|
|
if (!firstLaunch) {
|
|
// Not first launch - initialize auth state
|
|
await authService.initializeAuthState();
|
|
setSetupComplete(true);
|
|
}
|
|
|
|
setupCheckCompleteRef.current = true;
|
|
} catch (error) {
|
|
console.error('Failed to check first launch:', error);
|
|
// On error, assume not first launch and proceed
|
|
setIsFirstLaunch(false);
|
|
setSetupComplete(true);
|
|
setupCheckCompleteRef.current = true;
|
|
}
|
|
};
|
|
|
|
if (!setupCheckCompleteRef.current) {
|
|
checkFirstLaunch();
|
|
}
|
|
}, []);
|
|
|
|
return { isFirstLaunch, setupComplete };
|
|
}
|