diff --git a/packages/desktop/src/instanceUrl.ts b/packages/desktop/src/instanceUrl.ts new file mode 100644 index 00000000..803e3dba --- /dev/null +++ b/packages/desktop/src/instanceUrl.ts @@ -0,0 +1,32 @@ +import { app } from 'electron'; +import path from 'path'; +import fs from 'fs'; + +export function getInstanceUrlPath(): string { + return path.join(app.getPath('userData'), 'instance-url.json'); +} + +export function loadInstanceUrl(): string | null { + try { + const data = JSON.parse(fs.readFileSync(getInstanceUrlPath(), 'utf-8')); + return typeof data.url === 'string' ? data.url : null; + } catch { + return null; + } +} + +export function saveInstanceUrl(url: string): void { + fs.writeFileSync(getInstanceUrlPath(), JSON.stringify({ url })); +} + +export function clearInstanceUrl(): void { + try { + fs.unlinkSync(getInstanceUrlPath()); + } catch { + // File may not exist — ignore + } +} + +export function getPickerPath(): string { + return path.join(__dirname, '..', 'resources', 'instance-picker.html'); +} diff --git a/packages/desktop/src/main.ts b/packages/desktop/src/main.ts index a15de47c..c1d9ff6d 100644 --- a/packages/desktop/src/main.ts +++ b/packages/desktop/src/main.ts @@ -17,6 +17,12 @@ import os from 'os'; import { startActivityDetection, stopActivityDetection, getCurrentActivity } from './activityDetector'; import { KeybindManager } from './keybindManager'; import { deriveStartMinimizedFromArgs, parseExecPathFromDesktopFile, shouldReapplyAppImage } from './autoLaunch'; +import { + loadInstanceUrl, + saveInstanceUrl, + clearInstanceUrl, + getPickerPath, +} from './instanceUrl'; let mainWindow: BrowserWindow | null = null; const keybindManager = new KeybindManager(); @@ -26,37 +32,6 @@ let pendingDeepLink: string | null = null; const knownInstanceOrigins = new Set(); -// ─── Instance URL Persistence ──────────────────────────────────────────────── - -function getInstanceUrlPath(): string { - return path.join(app.getPath('userData'), 'instance-url.json'); -} - -function loadInstanceUrl(): string | null { - try { - const data = JSON.parse(fs.readFileSync(getInstanceUrlPath(), 'utf-8')); - return typeof data.url === 'string' ? data.url : null; - } catch { - return null; - } -} - -function saveInstanceUrl(url: string): void { - fs.writeFileSync(getInstanceUrlPath(), JSON.stringify({ url })); -} - -function clearInstanceUrl(): void { - try { - fs.unlinkSync(getInstanceUrlPath()); - } catch { - // File may not exist — ignore - } -} - -function getPickerPath(): string { - return path.join(__dirname, '..', 'resources', 'instance-picker.html'); -} - // ─── Window State Persistence ─────────────────────────────────────────────── interface WindowState {