mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-26 04:19:27 -07:00
104 lines
3.1 KiB
TypeScript
104 lines
3.1 KiB
TypeScript
import { ConfiguredShortcuts } from '../utils/shortcut-config';
|
|
|
|
export interface OverlayShortcutHandlers {
|
|
copySubtitle: () => void;
|
|
copySubtitleMultiple: (timeoutMs: number) => void;
|
|
updateLastCardFromClipboard: () => void;
|
|
triggerFieldGrouping: () => void;
|
|
triggerSubsync: () => void;
|
|
mineSentence: () => void;
|
|
mineSentenceMultiple: (timeoutMs: number) => void;
|
|
toggleSecondarySub: () => void;
|
|
markAudioCard: () => void;
|
|
openCharacterDictionary: () => void;
|
|
openRuntimeOptions: () => void;
|
|
openJimaku: () => void;
|
|
}
|
|
|
|
export interface OverlayShortcutLifecycleDeps {
|
|
getConfiguredShortcuts: () => ConfiguredShortcuts;
|
|
getOverlayHandlers: () => OverlayShortcutHandlers;
|
|
cancelPendingMultiCopy: () => void;
|
|
cancelPendingMineSentenceMultiple: () => void;
|
|
}
|
|
|
|
const OVERLAY_SHORTCUT_KEYS: Array<keyof Omit<ConfiguredShortcuts, 'multiCopyTimeoutMs'>> = [
|
|
'copySubtitle',
|
|
'copySubtitleMultiple',
|
|
'updateLastCardFromClipboard',
|
|
'triggerFieldGrouping',
|
|
'triggerSubsync',
|
|
'mineSentence',
|
|
'mineSentenceMultiple',
|
|
'toggleSecondarySub',
|
|
'markAudioCard',
|
|
'openCharacterDictionary',
|
|
'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;
|
|
trackedMpvWindowFocused: boolean;
|
|
}): boolean {
|
|
if (!args.overlayRuntimeInitialized) {
|
|
return false;
|
|
}
|
|
if (!args.isMacOSPlatform) {
|
|
return true;
|
|
}
|
|
return args.trackedMpvWindowFocused;
|
|
}
|
|
|
|
export function registerOverlayShortcuts(
|
|
shortcuts: ConfiguredShortcuts,
|
|
_handlers: OverlayShortcutHandlers,
|
|
): boolean {
|
|
return hasConfiguredOverlayShortcuts(shortcuts);
|
|
}
|
|
|
|
export function unregisterOverlayShortcuts(_shortcuts: ConfiguredShortcuts): void {}
|
|
|
|
export function registerOverlayShortcutsRuntime(deps: OverlayShortcutLifecycleDeps): boolean {
|
|
return registerOverlayShortcuts(deps.getConfiguredShortcuts(), deps.getOverlayHandlers());
|
|
}
|
|
|
|
export function unregisterOverlayShortcutsRuntime(
|
|
shortcutsRegistered: boolean,
|
|
deps: OverlayShortcutLifecycleDeps,
|
|
): boolean {
|
|
if (!shortcutsRegistered) return shortcutsRegistered;
|
|
deps.cancelPendingMultiCopy();
|
|
deps.cancelPendingMineSentenceMultiple();
|
|
unregisterOverlayShortcuts(deps.getConfiguredShortcuts());
|
|
return false;
|
|
}
|
|
|
|
export function syncOverlayShortcutsRuntime(
|
|
shouldBeActive: boolean,
|
|
shortcutsRegistered: boolean,
|
|
deps: OverlayShortcutLifecycleDeps,
|
|
): boolean {
|
|
if (shouldBeActive) {
|
|
return registerOverlayShortcutsRuntime(deps);
|
|
}
|
|
return unregisterOverlayShortcutsRuntime(shortcutsRegistered, deps);
|
|
}
|
|
|
|
export function refreshOverlayShortcutsRuntime(
|
|
shouldBeActive: boolean,
|
|
shortcutsRegistered: boolean,
|
|
deps: OverlayShortcutLifecycleDeps,
|
|
): boolean {
|
|
const cleared = unregisterOverlayShortcutsRuntime(shortcutsRegistered, deps);
|
|
return syncOverlayShortcutsRuntime(shouldBeActive, cleared, deps);
|
|
}
|