import { BrowserWindow } from 'electron'; import { deepLink } from './deeplink'; import { isLoaded } from '../global'; import pino from 'pino'; const logger = pino({ 'name': 'handle-url-scheme.ts' }); const pendingActions: Array<() => void> = []; new Promise((resolve) => { const checkLoaded = () => { if (isLoaded.value) { resolve(); } else { setTimeout(checkLoaded, 100); } }; checkLoaded(); }).then(() => { while (pendingActions.length > 0) { const action = pendingActions.shift(); if (action) action(); } }); deepLink.on("event", (query) => { logger.info(`Deep link: event "event" fired with query: ${JSON.stringify(query)}`); }); deepLink.on("action", (query) => { logger.info(`Deep link: event "action" fired with query: ${JSON.stringify(query)}`); const action = () => { 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(); } }; logger.info(`isLoaded: ${isLoaded.value}`); if (isLoaded.value) { action(); } else { pendingActions.push(action); } }); deepLink.on("install", (query) => { logger.info(`Deep link: event "install" fired with query: ${JSON.stringify(query)}`); const action = () => { 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(); } }; if (isLoaded.value) { action(); } else { pendingActions.push(action); } });