diff --git a/electron/main/handle-url-scheme.ts b/electron/main/handle-url-scheme.ts index 0f7216c8..f3e40b41 100644 --- a/electron/main/handle-url-scheme.ts +++ b/electron/main/handle-url-scheme.ts @@ -1,5 +1,34 @@ +import { BrowserWindow } from 'electron'; import { deepLink } from './deeplink'; deepLink.on("event", (query) => { console.log(`Deep link: event "event" fired with query: ${JSON.stringify(query)}`); -}); \ No newline at end of file +}); + +deepLink.on("action", (query) => { + console.log(`Deep link: event "action" fired with query: ${JSON.stringify(query)}`); + const win = BrowserWindow.getAllWindows()[0]; + if (!win) return; + + if (query.cmd === 'update') { + win.webContents.send('deep-link-update'); + if (win.isMinimized()) win.restore(); + win.focus(); + } else if (query.cmd === 'list') { + win.webContents.send('deep-link-installed'); + if (win.isMinimized()) win.restore(); + win.focus(); + } +}); + +deepLink.on("install", (query) => { + console.log(`Deep link: event "install" fired with query: ${JSON.stringify(query)}`); + const win = BrowserWindow.getAllWindows()[0]; + if (!win) return; + + if (query.pkg) { + win.webContents.send('deep-link-install', query.pkg); + if (win.isMinimized()) win.restore(); + win.focus(); + } +}); diff --git a/src/App.vue b/src/App.vue index c8776684..de8cb5cd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -515,6 +515,37 @@ onMounted(async () => { closeDetail(); } }); + + // Deep link Handlers + window.ipcRenderer.on('deep-link-update', () => { + openUpdateModal(); + }); + + window.ipcRenderer.on('deep-link-installed', () => { + openInstalledModal(); + }); + + window.ipcRenderer.on('deep-link-install', (_event, pkgname) => { + const tryOpen = () => { + const target = apps.value.find(a => a.Pkgname === pkgname); + if (target) { + openDetail(target); + } else { + logger.warn(`Deep link: app ${pkgname} not found`); + } + }; + + if (loading.value) { + const stop = watch(loading, (val) => { + if (!val) { + tryOpen(); + stop(); + } + }); + } else { + tryOpen(); + } + }); }); // 观察器