feat(v027): settings:autostart-set 정식 + 채널 이름 통일
This commit is contained in:
@@ -39,8 +39,8 @@ export interface SettingsIpcDeps {
|
||||
/**
|
||||
* v0.2.7 설정 페이지 IPC 핸들러.
|
||||
*
|
||||
* - 자동 실행: 임시 채널명 (`settings:get-autostart` / `settings:set-autostart`).
|
||||
* Task 22 에서 정식 이름 (`settings:autostart-state` / `settings:autostart-set`) 으로 rename 예정.
|
||||
* - 자동 실행 (Task 22 통일): `settings:autostart-state` (조회) / `settings:autostart-set` (변경).
|
||||
* 둘 다 `{ openAtLogin, diagnostic }` 반환 — diagnostic 은 withArgs/noArgs/execPath/registry 진단.
|
||||
* args=['--hidden'] 명시 — 자동 실행 시 백그라운드 모드로 시작 (Quick Capture only).
|
||||
*
|
||||
* - 백업/내보내기/복원/동기화/사용 로그 (Task 10): 기존 `src/main/index.ts` 트레이 callback
|
||||
@@ -48,24 +48,19 @@ export interface SettingsIpcDeps {
|
||||
* 복사. 트레이 callback 자체 제거는 Task 16 (Phase 3) — 본 task 에선 잔류 (의도적 중복).
|
||||
*/
|
||||
export function registerSettingsApi(deps?: SettingsIpcDeps): void {
|
||||
ipcMain.handle('settings:get-autostart', () => {
|
||||
const r = app.getLoginItemSettings({ args: ['--hidden'] });
|
||||
return { openAtLogin: r.openAtLogin };
|
||||
});
|
||||
|
||||
ipcMain.handle('settings:set-autostart', (_e, open: boolean) => {
|
||||
app.setLoginItemSettings({ openAtLogin: open, args: ['--hidden'] });
|
||||
const r = app.getLoginItemSettings({ args: ['--hidden'] });
|
||||
return { openAtLogin: r.openAtLogin };
|
||||
});
|
||||
|
||||
// v0.2.7 F12 deeper fix (Task 21) — 진단 정보 포함된 정식 autostart 상태 조회.
|
||||
// Task 22 에서 옛 'settings:get-autostart' 를 제거하고 본 채널로 통일 예정.
|
||||
// v0.2.7 F12 deeper fix (Task 21~22) — 진단 정보 포함된 autostart 상태 조회/변경.
|
||||
// 옛 'settings:get-autostart' / 'settings:set-autostart' 채널은 본 통일에서 제거됨.
|
||||
ipcMain.handle('settings:autostart-state', async () => {
|
||||
const diag = await collectAutostartState();
|
||||
return { openAtLogin: diag.withArgs.openAtLogin, diagnostic: diag };
|
||||
});
|
||||
|
||||
ipcMain.handle('settings:autostart-set', async (_e, open: boolean) => {
|
||||
app.setLoginItemSettings({ openAtLogin: open, args: ['--hidden'] });
|
||||
const diag = await collectAutostartState();
|
||||
return { openAtLogin: diag.withArgs.openAtLogin, diagnostic: diag };
|
||||
});
|
||||
|
||||
// v0.2.7 정보 섹션 (Task 11) — 트레이 showAboutDialog 의 detail 형식 그대로 (clipboard 일관성).
|
||||
// 트레이 showAboutDialog 자체 제거는 Task 25 (Phase 6 cleanup) — 본 task 는 추가만.
|
||||
ipcMain.handle('settings:get-app-info', () => ({
|
||||
|
||||
@@ -58,9 +58,9 @@ const api: InklingApi = {
|
||||
ipcRenderer.on('inbox:navigate', listener);
|
||||
return () => ipcRenderer.off('inbox:navigate', listener);
|
||||
},
|
||||
// v0.2.7 자동 실행 (임시 채널 — Task 22 에서 settings:autostart-state / settings:autostart-set 으로 rename)
|
||||
getAutostart: () => ipcRenderer.invoke('settings:get-autostart'),
|
||||
setAutostart: (open: boolean) => ipcRenderer.invoke('settings:set-autostart', open),
|
||||
// v0.2.7 자동 실행 (Task 22 통일) — 진단 정보 포함 응답
|
||||
getAutostart: () => ipcRenderer.invoke('settings:autostart-state'),
|
||||
setAutostart: (open: boolean) => ipcRenderer.invoke('settings:autostart-set', open),
|
||||
// v0.2.7 백업/복원/동기화/텔레메트리 (Task 10) — 트레이 callback 의 IPC 대응
|
||||
runBackup: () => ipcRenderer.invoke('settings:run-backup'),
|
||||
runExport: () => ipcRenderer.invoke('settings:run-export'),
|
||||
|
||||
@@ -1,29 +1,30 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import type { AutostartResponse } from '@shared/types';
|
||||
import { inboxApi } from '../../api.js';
|
||||
|
||||
export function AutostartSection(): React.ReactElement {
|
||||
const [openAtLogin, setOpenAtLogin] = useState<boolean | null>(null);
|
||||
const [data, setData] = useState<AutostartResponse | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
void (async () => {
|
||||
const r = await inboxApi.getAutostart();
|
||||
setOpenAtLogin(r.openAtLogin);
|
||||
setData(r);
|
||||
})();
|
||||
}, []);
|
||||
|
||||
async function onToggle(e: React.ChangeEvent<HTMLInputElement>): Promise<void> {
|
||||
const r = await inboxApi.setAutostart(e.target.checked);
|
||||
setOpenAtLogin(r.openAtLogin);
|
||||
setData(r);
|
||||
}
|
||||
|
||||
if (openAtLogin === null) {
|
||||
if (data === null) {
|
||||
return <div style={{ fontSize: 12, color: '#666' }}>로딩 중...</div>;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<label style={{ display: 'flex', gap: 8, alignItems: 'center', fontSize: 13 }}>
|
||||
<input type="checkbox" checked={openAtLogin} onChange={onToggle} />
|
||||
<input type="checkbox" checked={data.openAtLogin} onChange={onToggle} />
|
||||
앱 시작 시 자동으로 실행
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@@ -57,6 +57,20 @@ export interface CaptureApi {
|
||||
hide(): void;
|
||||
}
|
||||
|
||||
// v0.2.7 F12 deeper fix — 자동 실행 진단 정보 (AutostartDiagnostic.collectAutostartState 결과).
|
||||
export interface AutostartDiagnostic {
|
||||
withArgs: { openAtLogin: boolean; executableWillLaunchAtLogin: boolean };
|
||||
noArgs: { openAtLogin: boolean; executableWillLaunchAtLogin: boolean };
|
||||
execPath: string;
|
||||
registryPath?: string;
|
||||
registryValue?: string | null;
|
||||
}
|
||||
|
||||
export interface AutostartResponse {
|
||||
openAtLogin: boolean;
|
||||
diagnostic: AutostartDiagnostic;
|
||||
}
|
||||
|
||||
export interface InboxApi {
|
||||
listNotes(opts: { limit: number; cursor?: string }): Promise<Note[]>;
|
||||
updateAiFields(
|
||||
@@ -94,9 +108,9 @@ export interface InboxApi {
|
||||
onOpenOllamaSettings(cb: () => void): () => void;
|
||||
// v0.2.7 Task 13 — 외부 (트레이 등) 에서 view 전환 요청 구독.
|
||||
onNavigate(cb: (view: 'inbox' | 'trash' | 'settings') => void): () => void;
|
||||
// v0.2.7 자동 실행 (임시 채널 — Task 22 에서 정식 이름으로 rename)
|
||||
getAutostart(): Promise<{ openAtLogin: boolean }>;
|
||||
setAutostart(open: boolean): Promise<{ openAtLogin: boolean }>;
|
||||
// v0.2.7 자동 실행 (Task 22 통일) — 진단 정보 포함 응답
|
||||
getAutostart(): Promise<AutostartResponse>;
|
||||
setAutostart(open: boolean): Promise<AutostartResponse>;
|
||||
// v0.2.7 백업 / 복원 / 동기화 / 텔레메트리 — 트레이 callback 의 IPC 대응 (Task 10)
|
||||
runBackup(): Promise<{ ok: true }>;
|
||||
runExport(): Promise<{ ok: true }>;
|
||||
|
||||
Reference in New Issue
Block a user