mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-21 00:11:27 -07:00
78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
import electron from 'electron';
|
|
import type { BrowserWindow } from 'electron';
|
|
import { createLogger } from '../../logger';
|
|
|
|
const { globalShortcut } = electron;
|
|
const logger = createLogger('main:shortcut');
|
|
|
|
export interface GlobalShortcutConfig {
|
|
toggleVisibleOverlayGlobal: string | null | undefined;
|
|
openJimaku?: string | null | undefined;
|
|
}
|
|
|
|
export interface RegisterGlobalShortcutsServiceOptions {
|
|
shortcuts: GlobalShortcutConfig;
|
|
onToggleVisibleOverlay: () => void;
|
|
onOpenYomitanSettings: () => void;
|
|
onOpenJimaku?: () => void;
|
|
isDev: boolean;
|
|
getMainWindow: () => BrowserWindow | null;
|
|
}
|
|
|
|
export function registerGlobalShortcuts(options: RegisterGlobalShortcutsServiceOptions): void {
|
|
const visibleShortcut = options.shortcuts.toggleVisibleOverlayGlobal;
|
|
const normalizedVisible = visibleShortcut?.replace(/\s+/g, '').toLowerCase();
|
|
const normalizedJimaku = options.shortcuts.openJimaku?.replace(/\s+/g, '').toLowerCase();
|
|
const normalizedSettings = 'alt+shift+y';
|
|
|
|
if (visibleShortcut) {
|
|
const toggleVisibleRegistered = globalShortcut.register(visibleShortcut, () => {
|
|
options.onToggleVisibleOverlay();
|
|
});
|
|
if (!toggleVisibleRegistered) {
|
|
logger.warn(
|
|
`Failed to register global shortcut toggleVisibleOverlayGlobal: ${visibleShortcut}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (options.shortcuts.openJimaku && options.onOpenJimaku) {
|
|
if (
|
|
normalizedJimaku &&
|
|
(normalizedJimaku === normalizedVisible || normalizedJimaku === normalizedSettings)
|
|
) {
|
|
logger.warn(
|
|
'Skipped registering openJimaku because it collides with another global shortcut',
|
|
);
|
|
} else {
|
|
const openJimakuRegistered = globalShortcut.register(options.shortcuts.openJimaku, () => {
|
|
options.onOpenJimaku?.();
|
|
});
|
|
if (!openJimakuRegistered) {
|
|
logger.warn(
|
|
`Failed to register global shortcut openJimaku: ${options.shortcuts.openJimaku}`,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
const settingsRegistered = globalShortcut.register('Alt+Shift+Y', () => {
|
|
options.onOpenYomitanSettings();
|
|
});
|
|
if (!settingsRegistered) {
|
|
logger.warn('Failed to register global shortcut: Alt+Shift+Y');
|
|
}
|
|
|
|
if (options.isDev) {
|
|
const devtoolsRegistered = globalShortcut.register('F12', () => {
|
|
const mainWindow = options.getMainWindow();
|
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
mainWindow.webContents.toggleDevTools();
|
|
}
|
|
});
|
|
if (!devtoolsRegistered) {
|
|
logger.warn('Failed to register global shortcut: F12');
|
|
}
|
|
}
|
|
}
|