Files
spark-store/electron/main/handle-url-scheme.ts
2026-01-31 16:07:15 +08:00

77 lines
1.8 KiB
TypeScript

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<void>((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);
}
});