mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
refactor: extract shortcut config resolution utility
This commit is contained in:
82
src/core/utils/shortcut-config.ts
Normal file
82
src/core/utils/shortcut-config.ts
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import { Config } from "../../types";
|
||||||
|
|
||||||
|
export interface ConfiguredShortcuts {
|
||||||
|
toggleVisibleOverlayGlobal: string | null | undefined;
|
||||||
|
toggleInvisibleOverlayGlobal: string | null | undefined;
|
||||||
|
copySubtitle: string | null | undefined;
|
||||||
|
copySubtitleMultiple: string | null | undefined;
|
||||||
|
updateLastCardFromClipboard: string | null | undefined;
|
||||||
|
triggerFieldGrouping: string | null | undefined;
|
||||||
|
triggerSubsync: string | null | undefined;
|
||||||
|
mineSentence: string | null | undefined;
|
||||||
|
mineSentenceMultiple: string | null | undefined;
|
||||||
|
multiCopyTimeoutMs: number;
|
||||||
|
toggleSecondarySub: string | null | undefined;
|
||||||
|
markAudioCard: string | null | undefined;
|
||||||
|
openRuntimeOptions: string | null | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveConfiguredShortcuts(
|
||||||
|
config: Config,
|
||||||
|
defaultConfig: Config,
|
||||||
|
): ConfiguredShortcuts {
|
||||||
|
const normalizeShortcut = (
|
||||||
|
value: string | null | undefined,
|
||||||
|
): string | null | undefined => {
|
||||||
|
if (typeof value !== "string") return value;
|
||||||
|
return value
|
||||||
|
.replace(/\bKey([A-Z])\b/g, "$1")
|
||||||
|
.replace(/\bDigit([0-9])\b/g, "$1");
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
toggleVisibleOverlayGlobal: normalizeShortcut(
|
||||||
|
config.shortcuts?.toggleVisibleOverlayGlobal ??
|
||||||
|
defaultConfig.shortcuts?.toggleVisibleOverlayGlobal,
|
||||||
|
),
|
||||||
|
toggleInvisibleOverlayGlobal: normalizeShortcut(
|
||||||
|
config.shortcuts?.toggleInvisibleOverlayGlobal ??
|
||||||
|
defaultConfig.shortcuts?.toggleInvisibleOverlayGlobal,
|
||||||
|
),
|
||||||
|
copySubtitle: normalizeShortcut(
|
||||||
|
config.shortcuts?.copySubtitle ?? defaultConfig.shortcuts?.copySubtitle,
|
||||||
|
),
|
||||||
|
copySubtitleMultiple: normalizeShortcut(
|
||||||
|
config.shortcuts?.copySubtitleMultiple ??
|
||||||
|
defaultConfig.shortcuts?.copySubtitleMultiple,
|
||||||
|
),
|
||||||
|
updateLastCardFromClipboard: normalizeShortcut(
|
||||||
|
config.shortcuts?.updateLastCardFromClipboard ??
|
||||||
|
defaultConfig.shortcuts?.updateLastCardFromClipboard,
|
||||||
|
),
|
||||||
|
triggerFieldGrouping: normalizeShortcut(
|
||||||
|
config.shortcuts?.triggerFieldGrouping ??
|
||||||
|
defaultConfig.shortcuts?.triggerFieldGrouping,
|
||||||
|
),
|
||||||
|
triggerSubsync: normalizeShortcut(
|
||||||
|
config.shortcuts?.triggerSubsync ?? defaultConfig.shortcuts?.triggerSubsync,
|
||||||
|
),
|
||||||
|
mineSentence: normalizeShortcut(
|
||||||
|
config.shortcuts?.mineSentence ?? defaultConfig.shortcuts?.mineSentence,
|
||||||
|
),
|
||||||
|
mineSentenceMultiple: normalizeShortcut(
|
||||||
|
config.shortcuts?.mineSentenceMultiple ??
|
||||||
|
defaultConfig.shortcuts?.mineSentenceMultiple,
|
||||||
|
),
|
||||||
|
multiCopyTimeoutMs:
|
||||||
|
config.shortcuts?.multiCopyTimeoutMs ??
|
||||||
|
defaultConfig.shortcuts?.multiCopyTimeoutMs ??
|
||||||
|
5000,
|
||||||
|
toggleSecondarySub: normalizeShortcut(
|
||||||
|
config.shortcuts?.toggleSecondarySub ??
|
||||||
|
defaultConfig.shortcuts?.toggleSecondarySub,
|
||||||
|
),
|
||||||
|
markAudioCard: normalizeShortcut(
|
||||||
|
config.shortcuts?.markAudioCard ?? defaultConfig.shortcuts?.markAudioCard,
|
||||||
|
),
|
||||||
|
openRuntimeOptions: normalizeShortcut(
|
||||||
|
config.shortcuts?.openRuntimeOptions ??
|
||||||
|
defaultConfig.shortcuts?.openRuntimeOptions,
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
62
src/main.ts
62
src/main.ts
@@ -124,6 +124,7 @@ import {
|
|||||||
} from "./core/utils/electron-backend";
|
} from "./core/utils/electron-backend";
|
||||||
import { asBoolean, asFiniteNumber, asString } from "./core/utils/coerce";
|
import { asBoolean, asFiniteNumber, asString } from "./core/utils/coerce";
|
||||||
import { resolveKeybindings } from "./core/utils/keybindings";
|
import { resolveKeybindings } from "./core/utils/keybindings";
|
||||||
|
import { resolveConfiguredShortcuts } from "./core/utils/shortcut-config";
|
||||||
import { TexthookerService } from "./core/services/texthooker-service";
|
import { TexthookerService } from "./core/services/texthooker-service";
|
||||||
import {
|
import {
|
||||||
hasMpvWebsocketPlugin,
|
hasMpvWebsocketPlugin,
|
||||||
@@ -2347,66 +2348,7 @@ function registerGlobalShortcuts(): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getConfiguredShortcuts() {
|
function getConfiguredShortcuts() {
|
||||||
const config = getResolvedConfig();
|
return resolveConfiguredShortcuts(getResolvedConfig(), DEFAULT_CONFIG);
|
||||||
const normalizeShortcut = (
|
|
||||||
value: string | null | undefined,
|
|
||||||
): string | null | undefined => {
|
|
||||||
if (typeof value !== "string") return value;
|
|
||||||
return value
|
|
||||||
.replace(/\bKey([A-Z])\b/g, "$1")
|
|
||||||
.replace(/\bDigit([0-9])\b/g, "$1");
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
toggleVisibleOverlayGlobal: normalizeShortcut(
|
|
||||||
config.shortcuts?.toggleVisibleOverlayGlobal ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.toggleVisibleOverlayGlobal,
|
|
||||||
),
|
|
||||||
toggleInvisibleOverlayGlobal: normalizeShortcut(
|
|
||||||
config.shortcuts?.toggleInvisibleOverlayGlobal ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.toggleInvisibleOverlayGlobal,
|
|
||||||
),
|
|
||||||
copySubtitle: normalizeShortcut(
|
|
||||||
config.shortcuts?.copySubtitle ?? DEFAULT_CONFIG.shortcuts.copySubtitle,
|
|
||||||
),
|
|
||||||
copySubtitleMultiple: normalizeShortcut(
|
|
||||||
config.shortcuts?.copySubtitleMultiple ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.copySubtitleMultiple,
|
|
||||||
),
|
|
||||||
updateLastCardFromClipboard: normalizeShortcut(
|
|
||||||
config.shortcuts?.updateLastCardFromClipboard ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.updateLastCardFromClipboard,
|
|
||||||
),
|
|
||||||
triggerFieldGrouping: normalizeShortcut(
|
|
||||||
config.shortcuts?.triggerFieldGrouping ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.triggerFieldGrouping,
|
|
||||||
),
|
|
||||||
triggerSubsync: normalizeShortcut(
|
|
||||||
config.shortcuts?.triggerSubsync ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.triggerSubsync,
|
|
||||||
),
|
|
||||||
mineSentence: normalizeShortcut(
|
|
||||||
config.shortcuts?.mineSentence ?? DEFAULT_CONFIG.shortcuts.mineSentence,
|
|
||||||
),
|
|
||||||
mineSentenceMultiple: normalizeShortcut(
|
|
||||||
config.shortcuts?.mineSentenceMultiple ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.mineSentenceMultiple,
|
|
||||||
),
|
|
||||||
multiCopyTimeoutMs:
|
|
||||||
config.shortcuts?.multiCopyTimeoutMs ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.multiCopyTimeoutMs,
|
|
||||||
toggleSecondarySub: normalizeShortcut(
|
|
||||||
config.shortcuts?.toggleSecondarySub ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.toggleSecondarySub,
|
|
||||||
),
|
|
||||||
markAudioCard: normalizeShortcut(
|
|
||||||
config.shortcuts?.markAudioCard ?? DEFAULT_CONFIG.shortcuts.markAudioCard,
|
|
||||||
),
|
|
||||||
openRuntimeOptions: normalizeShortcut(
|
|
||||||
config.shortcuts?.openRuntimeOptions ??
|
|
||||||
DEFAULT_CONFIG.shortcuts.openRuntimeOptions,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function tryHandleOverlayShortcutLocalFallback(input: Electron.Input): boolean {
|
function tryHandleOverlayShortcutLocalFallback(input: Electron.Input): boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user