mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-26 04:19:27 -07:00
Windows update (#49)
This commit is contained in:
@@ -1,10 +1,4 @@
|
||||
import electron from 'electron';
|
||||
import { ConfiguredShortcuts } from '../utils/shortcut-config';
|
||||
import { isGlobalShortcutRegisteredSafe } from './shortcut-fallback';
|
||||
import { createLogger } from '../../logger';
|
||||
|
||||
const { globalShortcut } = electron;
|
||||
const logger = createLogger('main:overlay-shortcut-service');
|
||||
|
||||
export interface OverlayShortcutHandlers {
|
||||
copySubtitle: () => void;
|
||||
@@ -27,6 +21,27 @@ export interface OverlayShortcutLifecycleDeps {
|
||||
cancelPendingMineSentenceMultiple: () => void;
|
||||
}
|
||||
|
||||
const OVERLAY_SHORTCUT_KEYS: Array<keyof Omit<ConfiguredShortcuts, 'multiCopyTimeoutMs'>> = [
|
||||
'copySubtitle',
|
||||
'copySubtitleMultiple',
|
||||
'updateLastCardFromClipboard',
|
||||
'triggerFieldGrouping',
|
||||
'triggerSubsync',
|
||||
'mineSentence',
|
||||
'mineSentenceMultiple',
|
||||
'toggleSecondarySub',
|
||||
'markAudioCard',
|
||||
'openRuntimeOptions',
|
||||
'openJimaku',
|
||||
];
|
||||
|
||||
function hasConfiguredOverlayShortcuts(shortcuts: ConfiguredShortcuts): boolean {
|
||||
return OVERLAY_SHORTCUT_KEYS.some((key) => {
|
||||
const shortcut = shortcuts[key];
|
||||
return typeof shortcut === 'string' && shortcut.trim().length > 0;
|
||||
});
|
||||
}
|
||||
|
||||
export function shouldActivateOverlayShortcuts(args: {
|
||||
overlayRuntimeInitialized: boolean;
|
||||
isMacOSPlatform: boolean;
|
||||
@@ -43,139 +58,12 @@ export function shouldActivateOverlayShortcuts(args: {
|
||||
|
||||
export function registerOverlayShortcuts(
|
||||
shortcuts: ConfiguredShortcuts,
|
||||
handlers: OverlayShortcutHandlers,
|
||||
_handlers: OverlayShortcutHandlers,
|
||||
): boolean {
|
||||
let registeredAny = false;
|
||||
const registerOverlayShortcut = (
|
||||
accelerator: string,
|
||||
handler: () => void,
|
||||
label: string,
|
||||
): void => {
|
||||
if (isGlobalShortcutRegisteredSafe(accelerator)) {
|
||||
registeredAny = true;
|
||||
return;
|
||||
}
|
||||
const ok = globalShortcut.register(accelerator, handler);
|
||||
if (!ok) {
|
||||
logger.warn(`Failed to register overlay shortcut ${label}: ${accelerator}`);
|
||||
return;
|
||||
}
|
||||
registeredAny = true;
|
||||
};
|
||||
|
||||
if (shortcuts.copySubtitleMultiple) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.copySubtitleMultiple,
|
||||
() => handlers.copySubtitleMultiple(shortcuts.multiCopyTimeoutMs),
|
||||
'copySubtitleMultiple',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.copySubtitle) {
|
||||
registerOverlayShortcut(shortcuts.copySubtitle, () => handlers.copySubtitle(), 'copySubtitle');
|
||||
}
|
||||
|
||||
if (shortcuts.triggerFieldGrouping) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.triggerFieldGrouping,
|
||||
() => handlers.triggerFieldGrouping(),
|
||||
'triggerFieldGrouping',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.triggerSubsync) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.triggerSubsync,
|
||||
() => handlers.triggerSubsync(),
|
||||
'triggerSubsync',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.mineSentence) {
|
||||
registerOverlayShortcut(shortcuts.mineSentence, () => handlers.mineSentence(), 'mineSentence');
|
||||
}
|
||||
|
||||
if (shortcuts.mineSentenceMultiple) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.mineSentenceMultiple,
|
||||
() => handlers.mineSentenceMultiple(shortcuts.multiCopyTimeoutMs),
|
||||
'mineSentenceMultiple',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.toggleSecondarySub) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.toggleSecondarySub,
|
||||
() => handlers.toggleSecondarySub(),
|
||||
'toggleSecondarySub',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.updateLastCardFromClipboard) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.updateLastCardFromClipboard,
|
||||
() => handlers.updateLastCardFromClipboard(),
|
||||
'updateLastCardFromClipboard',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.markAudioCard) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.markAudioCard,
|
||||
() => handlers.markAudioCard(),
|
||||
'markAudioCard',
|
||||
);
|
||||
}
|
||||
|
||||
if (shortcuts.openRuntimeOptions) {
|
||||
registerOverlayShortcut(
|
||||
shortcuts.openRuntimeOptions,
|
||||
() => handlers.openRuntimeOptions(),
|
||||
'openRuntimeOptions',
|
||||
);
|
||||
}
|
||||
if (shortcuts.openJimaku) {
|
||||
registerOverlayShortcut(shortcuts.openJimaku, () => handlers.openJimaku(), 'openJimaku');
|
||||
}
|
||||
|
||||
return registeredAny;
|
||||
return hasConfiguredOverlayShortcuts(shortcuts);
|
||||
}
|
||||
|
||||
export function unregisterOverlayShortcuts(shortcuts: ConfiguredShortcuts): void {
|
||||
if (shortcuts.copySubtitle) {
|
||||
globalShortcut.unregister(shortcuts.copySubtitle);
|
||||
}
|
||||
if (shortcuts.copySubtitleMultiple) {
|
||||
globalShortcut.unregister(shortcuts.copySubtitleMultiple);
|
||||
}
|
||||
if (shortcuts.updateLastCardFromClipboard) {
|
||||
globalShortcut.unregister(shortcuts.updateLastCardFromClipboard);
|
||||
}
|
||||
if (shortcuts.triggerFieldGrouping) {
|
||||
globalShortcut.unregister(shortcuts.triggerFieldGrouping);
|
||||
}
|
||||
if (shortcuts.triggerSubsync) {
|
||||
globalShortcut.unregister(shortcuts.triggerSubsync);
|
||||
}
|
||||
if (shortcuts.mineSentence) {
|
||||
globalShortcut.unregister(shortcuts.mineSentence);
|
||||
}
|
||||
if (shortcuts.mineSentenceMultiple) {
|
||||
globalShortcut.unregister(shortcuts.mineSentenceMultiple);
|
||||
}
|
||||
if (shortcuts.toggleSecondarySub) {
|
||||
globalShortcut.unregister(shortcuts.toggleSecondarySub);
|
||||
}
|
||||
if (shortcuts.markAudioCard) {
|
||||
globalShortcut.unregister(shortcuts.markAudioCard);
|
||||
}
|
||||
if (shortcuts.openRuntimeOptions) {
|
||||
globalShortcut.unregister(shortcuts.openRuntimeOptions);
|
||||
}
|
||||
if (shortcuts.openJimaku) {
|
||||
globalShortcut.unregister(shortcuts.openJimaku);
|
||||
}
|
||||
}
|
||||
export function unregisterOverlayShortcuts(_shortcuts: ConfiguredShortcuts): void {}
|
||||
|
||||
export function registerOverlayShortcutsRuntime(deps: OverlayShortcutLifecycleDeps): boolean {
|
||||
return registerOverlayShortcuts(deps.getConfiguredShortcuts(), deps.getOverlayHandlers());
|
||||
|
||||
Reference in New Issue
Block a user