// src/main/services/AutoLaunchService.ts // 시스템 시작 시 자동 실행 관리. 설계서 01 IAutoLaunchService 구현. import { app } from 'electron' import { getLogger } from './LoggerService' import { configGet, configSet } from './ConfigService' const logger = getLogger('AutoLaunchService') class AutoLaunchService { /** * 현재 자동 실행 설정 상태를 조회한다. */ isEnabled(): boolean { // Electron API로 실제 OS 설정 확인 const settings = app.getLoginItemSettings() return settings.openAtLogin } /** * 자동 실행을 활성화/비활성화한다. */ setEnabled(enabled: boolean): void { try { app.setLoginItemSettings({ openAtLogin: enabled, // Windows: 시작 프로그램에 등록 // 개발 모드에서는 electron.exe 경로가 등록되므로 주의 args: app.isPackaged ? [] : [app.getAppPath()] }) configSet('autoLaunch', enabled) logger.info(`Auto launch ${enabled ? 'enabled' : 'disabled'}`) } catch (err) { logger.error(`Failed to set auto launch: ${err instanceof Error ? err.message : String(err)}`) } } /** * ConfigService의 설정과 OS 설정을 동기화한다. * bootstrap에서 호출. */ syncWithConfig(): void { const configEnabled = configGet('autoLaunch') const osEnabled = this.isEnabled() if (configEnabled !== osEnabled) { logger.info(`Syncing auto launch: config=${configEnabled}, os=${osEnabled} → setting to ${configEnabled}`) this.setEnabled(configEnabled) } } dispose(): void { logger.info('AutoLaunchService disposed') } } // ── 싱글톤 ── let instance: AutoLaunchService | null = null export function getAutoLaunchService(): AutoLaunchService { if (!instance) { instance = new AutoLaunchService() } return instance }