From 17e715b2bfca070a07c61bbf02b8adb6191cd4eb Mon Sep 17 00:00:00 2001 From: sudacode Date: Sat, 28 Mar 2026 10:30:35 -0700 Subject: [PATCH] refactor: consolidate 3 near-identical setup window factories Extract shared createSetupWindowHandler with a config parameter. Public API unchanged. --- src/main/runtime/setup-window-factory.ts | 75 +++++++++++++----------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/src/main/runtime/setup-window-factory.ts b/src/main/runtime/setup-window-factory.ts index 1057c61..bdccd49 100644 --- a/src/main/runtime/setup-window-factory.ts +++ b/src/main/runtime/setup-window-factory.ts @@ -1,16 +1,26 @@ -export function createCreateFirstRunSetupWindowHandler(deps: { - createBrowserWindow: (options: Electron.BrowserWindowConstructorOptions) => TWindow; -}) { +interface SetupWindowConfig { + width: number; + height: number; + title: string; + resizable?: boolean; + minimizable?: boolean; + maximizable?: boolean; +} + +function createSetupWindowHandler( + deps: { createBrowserWindow: (options: Electron.BrowserWindowConstructorOptions) => TWindow }, + config: SetupWindowConfig, +) { return (): TWindow => deps.createBrowserWindow({ - width: 480, - height: 460, - title: 'SubMiner Setup', + width: config.width, + height: config.height, + title: config.title, show: true, autoHideMenuBar: true, - resizable: false, - minimizable: false, - maximizable: false, + resizable: config.resizable, + minimizable: config.minimizable, + maximizable: config.maximizable, webPreferences: { nodeIntegration: false, contextIsolation: true, @@ -18,36 +28,35 @@ export function createCreateFirstRunSetupWindowHandler(deps: { }); } +export function createCreateFirstRunSetupWindowHandler(deps: { + createBrowserWindow: (options: Electron.BrowserWindowConstructorOptions) => TWindow; +}) { + return createSetupWindowHandler(deps, { + width: 480, + height: 460, + title: 'SubMiner Setup', + resizable: false, + minimizable: false, + maximizable: false, + }); +} + export function createCreateJellyfinSetupWindowHandler(deps: { createBrowserWindow: (options: Electron.BrowserWindowConstructorOptions) => TWindow; }) { - return (): TWindow => - deps.createBrowserWindow({ - width: 520, - height: 560, - title: 'Jellyfin Setup', - show: true, - autoHideMenuBar: true, - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - }, - }); + return createSetupWindowHandler(deps, { + width: 520, + height: 560, + title: 'Jellyfin Setup', + }); } export function createCreateAnilistSetupWindowHandler(deps: { createBrowserWindow: (options: Electron.BrowserWindowConstructorOptions) => TWindow; }) { - return (): TWindow => - deps.createBrowserWindow({ - width: 1000, - height: 760, - title: 'Anilist Setup', - show: true, - autoHideMenuBar: true, - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - }, - }); + return createSetupWindowHandler(deps, { + width: 1000, + height: 760, + title: 'Anilist Setup', + }); }