mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 10:31:47 +00:00
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import path from 'node:path';
|
|
|
|
import { register } from 'electron-localshortcut';
|
|
|
|
import { BrowserWindow, Menu, MenuItem, ipcMain } from 'electron';
|
|
|
|
import titlebarStyle from './titlebar.css';
|
|
|
|
import { injectCSS } from '../utils';
|
|
|
|
// Tracks menu visibility
|
|
export default (win: BrowserWindow) => {
|
|
injectCSS(win.webContents, titlebarStyle);
|
|
|
|
win.once('ready-to-show', () => {
|
|
register(win, '`', () => {
|
|
win.webContents.send('toggleMenu');
|
|
});
|
|
});
|
|
|
|
ipcMain.handle(
|
|
'get-menu',
|
|
() => JSON.parse(JSON.stringify(
|
|
Menu.getApplicationMenu(),
|
|
(key: string, value: unknown) => (key !== 'commandsMap' && key !== 'menu') ? value : undefined),
|
|
),
|
|
);
|
|
|
|
const getMenuItemById = (commandId: number): MenuItem | null => {
|
|
const menu = Menu.getApplicationMenu();
|
|
|
|
let target: MenuItem | null = null;
|
|
const stack = [...menu?.items ?? []];
|
|
while (stack.length > 0) {
|
|
const now = stack.shift();
|
|
now?.submenu?.items.forEach((item) => stack.push(item));
|
|
|
|
if (now?.commandId === commandId) {
|
|
target = now;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
ipcMain.handle('menu-event', (event, commandId: number) => {
|
|
const target = getMenuItemById(commandId);
|
|
if (target) target.click(undefined, BrowserWindow.fromWebContents(event.sender), event.sender);
|
|
});
|
|
|
|
ipcMain.handle('get-menu-by-id', (_, commandId: number) => {
|
|
const result = getMenuItemById(commandId);
|
|
|
|
return JSON.parse(JSON.stringify(
|
|
result,
|
|
(key: string, value: unknown) => (key !== 'commandsMap' && key !== 'menu') ? value : undefined),
|
|
);
|
|
});
|
|
};
|