Files
youtube-music/src/providers/protocol-handler.ts
2025-10-12 14:28:29 +09:00

39 lines
1.1 KiB
TypeScript

import path from 'node:path';
import { app, type BrowserWindow } from 'electron';
import { getSongControls } from './song-controls';
export const APP_PROTOCOL = 'peardesktop';
let protocolHandler: ((cmd: string, ...args: string[]) => void) | undefined;
export function setupProtocolHandler(win: BrowserWindow) {
if (process.defaultApp && process.argv.length >= 2) {
app.setAsDefaultProtocolClient(APP_PROTOCOL, process.execPath, [
path.resolve(process.argv[1]),
]);
} else {
app.setAsDefaultProtocolClient(APP_PROTOCOL);
}
const songControls = getSongControls(win);
protocolHandler = ((cmd: keyof typeof songControls, ...args) => {
if (Object.keys(songControls).includes(cmd)) {
// @ts-expect-error: cmd is a key of songControls
songControls[cmd](...args);
}
}) as (cmd: string, ...args: string[]) => void;
}
export function handleProtocol(cmd: string, ...args: string[]) {
protocolHandler?.(cmd, ...args);
}
export function changeProtocolHandler(
f: (cmd: string, ...args: string[]) => void,
) {
protocolHandler = f;
}