mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-06-09 15:13:32 -07:00
9d77907877
- Show mpv OSD spinner from start-file until subminer-overlay-loading-ready; force-shown for visible-overlay startup regardless of osd_messages setting - Gate non-macOS overlay visibility on content-ready so first subtitle line is immediately hoverable and clickable - Queue startup notifications in main process until overlay window finishes loading; upsert progress cards by id to avoid cold-start floods - Defer background warmups until after overlay runtime init so queued notifications can deliver promptly - Preserve character dictionary checking/building/importing/ready phases as distinct history entries; route building and importing to system notifications when notificationType is both
80 lines
3.3 KiB
TypeScript
80 lines
3.3 KiB
TypeScript
import type { Session } from 'electron';
|
|
|
|
export function createBuildCreateOverlayWindowMainDepsHandler<TWindow>(deps: {
|
|
createOverlayWindowCore: (
|
|
kind: 'visible' | 'modal',
|
|
options: {
|
|
isDev: boolean;
|
|
ensureOverlayWindowLevel: (window: TWindow) => void;
|
|
onRuntimeOptionsChanged: () => void;
|
|
setOverlayDebugVisualizationEnabled: (enabled: boolean) => void;
|
|
isOverlayVisible: (windowKind: 'visible' | 'modal') => boolean;
|
|
tryHandleOverlayShortcutLocalFallback: (input: Electron.Input) => boolean;
|
|
forwardTabToMpv: () => void;
|
|
linuxX11FullscreenOverlay?: boolean;
|
|
onVisibleWindowBlurred?: () => void;
|
|
onVisibleWindowFocused?: () => void;
|
|
onWindowDidFinishLoad?: () => void;
|
|
onWindowContentReady?: () => void;
|
|
onWindowClosed: (windowKind: 'visible' | 'modal', window: TWindow) => void;
|
|
yomitanSession?: Session | null;
|
|
},
|
|
) => TWindow;
|
|
isDev: boolean;
|
|
ensureOverlayWindowLevel: (window: TWindow) => void;
|
|
onRuntimeOptionsChanged: () => void;
|
|
setOverlayDebugVisualizationEnabled: (enabled: boolean) => void;
|
|
isOverlayVisible: (windowKind: 'visible' | 'modal') => boolean;
|
|
tryHandleOverlayShortcutLocalFallback: (input: Electron.Input) => boolean;
|
|
forwardTabToMpv: () => void;
|
|
getLinuxX11FullscreenOverlay?: () => boolean;
|
|
onVisibleWindowBlurred?: () => void;
|
|
onVisibleWindowFocused?: () => void;
|
|
onWindowDidFinishLoad?: () => void;
|
|
onWindowContentReady?: () => void;
|
|
onWindowClosed: (windowKind: 'visible' | 'modal', window: TWindow) => void;
|
|
getYomitanSession?: () => Session | null;
|
|
}) {
|
|
return () => ({
|
|
createOverlayWindowCore: deps.createOverlayWindowCore,
|
|
isDev: deps.isDev,
|
|
ensureOverlayWindowLevel: deps.ensureOverlayWindowLevel,
|
|
onRuntimeOptionsChanged: deps.onRuntimeOptionsChanged,
|
|
setOverlayDebugVisualizationEnabled: deps.setOverlayDebugVisualizationEnabled,
|
|
isOverlayVisible: deps.isOverlayVisible,
|
|
tryHandleOverlayShortcutLocalFallback: deps.tryHandleOverlayShortcutLocalFallback,
|
|
forwardTabToMpv: deps.forwardTabToMpv,
|
|
getLinuxX11FullscreenOverlay: deps.getLinuxX11FullscreenOverlay,
|
|
onVisibleWindowBlurred: deps.onVisibleWindowBlurred,
|
|
onVisibleWindowFocused: deps.onVisibleWindowFocused,
|
|
onWindowDidFinishLoad: deps.onWindowDidFinishLoad,
|
|
onWindowContentReady: deps.onWindowContentReady,
|
|
onWindowClosed: deps.onWindowClosed,
|
|
getYomitanSession: () => deps.getYomitanSession?.() ?? null,
|
|
});
|
|
}
|
|
|
|
export function createBuildCreateMainWindowMainDepsHandler<TWindow>(deps: {
|
|
getMainWindow: () => TWindow | null;
|
|
isWindowDestroyed: (window: TWindow) => boolean;
|
|
createOverlayWindow: (kind: 'visible' | 'modal') => TWindow;
|
|
setMainWindow: (window: TWindow | null) => void;
|
|
}) {
|
|
return () => ({
|
|
getMainWindow: () => deps.getMainWindow(),
|
|
isWindowDestroyed: (window: TWindow) => deps.isWindowDestroyed(window),
|
|
createOverlayWindow: deps.createOverlayWindow,
|
|
setMainWindow: deps.setMainWindow,
|
|
});
|
|
}
|
|
|
|
export function createBuildCreateModalWindowMainDepsHandler<TWindow>(deps: {
|
|
createOverlayWindow: (kind: 'visible' | 'modal') => TWindow;
|
|
setModalWindow: (window: TWindow | null) => void;
|
|
}) {
|
|
return () => ({
|
|
createOverlayWindow: deps.createOverlayWindow,
|
|
setModalWindow: deps.setModalWindow,
|
|
});
|
|
}
|