mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
refactor: extract overlay visibility runtime wiring
This commit is contained in:
116
src/main.ts
116
src/main.ts
@@ -354,30 +354,15 @@ import {
|
||||
createBuildHandleMineSentenceDigitMainDepsHandler,
|
||||
createBuildHandleMultiCopyDigitMainDepsHandler,
|
||||
} from './main/runtime/mining-actions-main-deps';
|
||||
import {
|
||||
createSetInvisibleOverlayVisibleHandler,
|
||||
createSetVisibleOverlayVisibleHandler,
|
||||
createToggleInvisibleOverlayHandler,
|
||||
createToggleVisibleOverlayHandler,
|
||||
} from './main/runtime/overlay-visibility-actions';
|
||||
import {
|
||||
createBuildSetInvisibleOverlayVisibleMainDepsHandler,
|
||||
createBuildSetVisibleOverlayVisibleMainDepsHandler,
|
||||
createBuildToggleInvisibleOverlayMainDepsHandler,
|
||||
createBuildToggleVisibleOverlayMainDepsHandler,
|
||||
} from './main/runtime/overlay-visibility-actions-main-deps';
|
||||
import { createBuildOverlayVisibilityRuntimeMainDepsHandler } from './main/runtime/overlay-visibility-runtime-main-deps';
|
||||
import { createOverlayVisibilityRuntime } from './main/runtime/overlay-visibility-runtime';
|
||||
import {
|
||||
createAppendClipboardVideoToQueueHandler,
|
||||
createHandleOverlayModalClosedHandler,
|
||||
createSetOverlayVisibleHandler,
|
||||
createToggleOverlayHandler,
|
||||
} from './main/runtime/overlay-main-actions';
|
||||
import {
|
||||
createBuildAppendClipboardVideoToQueueMainDepsHandler,
|
||||
createBuildHandleOverlayModalClosedMainDepsHandler,
|
||||
createBuildSetOverlayVisibleMainDepsHandler,
|
||||
createBuildToggleOverlayMainDepsHandler,
|
||||
} from './main/runtime/overlay-main-actions-main-deps';
|
||||
import {
|
||||
createBroadcastRuntimeOptionsChangedHandler,
|
||||
@@ -2885,77 +2870,44 @@ const handleMineSentenceDigitMainDeps = buildHandleMineSentenceDigitMainDepsHand
|
||||
const handleMineSentenceDigitHandler = createHandleMineSentenceDigitHandler(
|
||||
handleMineSentenceDigitMainDeps,
|
||||
);
|
||||
const buildSetVisibleOverlayVisibleMainDepsHandler =
|
||||
createBuildSetVisibleOverlayVisibleMainDepsHandler({
|
||||
setVisibleOverlayVisibleCore,
|
||||
setVisibleOverlayVisibleState: (nextVisible) => {
|
||||
overlayManager.setVisibleOverlayVisible(nextVisible);
|
||||
const {
|
||||
setVisibleOverlayVisible: setVisibleOverlayVisibleHandler,
|
||||
setInvisibleOverlayVisible: setInvisibleOverlayVisibleHandler,
|
||||
toggleVisibleOverlay: toggleVisibleOverlayHandler,
|
||||
toggleInvisibleOverlay: toggleInvisibleOverlayHandler,
|
||||
setOverlayVisible: setOverlayVisibleHandler,
|
||||
toggleOverlay: toggleOverlayHandler,
|
||||
} = createOverlayVisibilityRuntime({
|
||||
setVisibleOverlayVisibleDeps: {
|
||||
setVisibleOverlayVisibleCore,
|
||||
setVisibleOverlayVisibleState: (nextVisible) => {
|
||||
overlayManager.setVisibleOverlayVisible(nextVisible);
|
||||
},
|
||||
updateVisibleOverlayVisibility: () => overlayVisibilityRuntime.updateVisibleOverlayVisibility(),
|
||||
updateInvisibleOverlayVisibility: () =>
|
||||
overlayVisibilityRuntime.updateInvisibleOverlayVisibility(),
|
||||
syncInvisibleOverlayMousePassthrough: () =>
|
||||
overlayVisibilityRuntime.syncInvisibleOverlayMousePassthrough(),
|
||||
shouldBindVisibleOverlayToMpvSubVisibility: () =>
|
||||
configDerivedRuntime.shouldBindVisibleOverlayToMpvSubVisibility(),
|
||||
isMpvConnected: () => Boolean(appState.mpvClient && appState.mpvClient.connected),
|
||||
setMpvSubVisibility: (mpvSubVisible) => {
|
||||
setMpvSubVisibilityRuntime(appState.mpvClient, mpvSubVisible);
|
||||
},
|
||||
},
|
||||
updateVisibleOverlayVisibility: () => overlayVisibilityRuntime.updateVisibleOverlayVisibility(),
|
||||
updateInvisibleOverlayVisibility: () => overlayVisibilityRuntime.updateInvisibleOverlayVisibility(),
|
||||
syncInvisibleOverlayMousePassthrough: () =>
|
||||
overlayVisibilityRuntime.syncInvisibleOverlayMousePassthrough(),
|
||||
shouldBindVisibleOverlayToMpvSubVisibility: () =>
|
||||
configDerivedRuntime.shouldBindVisibleOverlayToMpvSubVisibility(),
|
||||
isMpvConnected: () => Boolean(appState.mpvClient && appState.mpvClient.connected),
|
||||
setMpvSubVisibility: (mpvSubVisible) => {
|
||||
setMpvSubVisibilityRuntime(appState.mpvClient, mpvSubVisible);
|
||||
setInvisibleOverlayVisibleDeps: {
|
||||
setInvisibleOverlayVisibleCore,
|
||||
setInvisibleOverlayVisibleState: (nextVisible) => {
|
||||
overlayManager.setInvisibleOverlayVisible(nextVisible);
|
||||
},
|
||||
updateInvisibleOverlayVisibility: () =>
|
||||
overlayVisibilityRuntime.updateInvisibleOverlayVisibility(),
|
||||
syncInvisibleOverlayMousePassthrough: () =>
|
||||
overlayVisibilityRuntime.syncInvisibleOverlayMousePassthrough(),
|
||||
},
|
||||
});
|
||||
const setVisibleOverlayVisibleMainDeps =
|
||||
buildSetVisibleOverlayVisibleMainDepsHandler();
|
||||
const setVisibleOverlayVisibleHandler = createSetVisibleOverlayVisibleHandler(
|
||||
setVisibleOverlayVisibleMainDeps,
|
||||
);
|
||||
|
||||
const buildSetInvisibleOverlayVisibleMainDepsHandler =
|
||||
createBuildSetInvisibleOverlayVisibleMainDepsHandler({
|
||||
setInvisibleOverlayVisibleCore,
|
||||
setInvisibleOverlayVisibleState: (nextVisible) => {
|
||||
overlayManager.setInvisibleOverlayVisible(nextVisible);
|
||||
},
|
||||
updateInvisibleOverlayVisibility: () => overlayVisibilityRuntime.updateInvisibleOverlayVisibility(),
|
||||
syncInvisibleOverlayMousePassthrough: () =>
|
||||
overlayVisibilityRuntime.syncInvisibleOverlayMousePassthrough(),
|
||||
});
|
||||
const setInvisibleOverlayVisibleMainDeps =
|
||||
buildSetInvisibleOverlayVisibleMainDepsHandler();
|
||||
const setInvisibleOverlayVisibleHandler = createSetInvisibleOverlayVisibleHandler(
|
||||
setInvisibleOverlayVisibleMainDeps,
|
||||
);
|
||||
|
||||
const buildToggleVisibleOverlayMainDepsHandler = createBuildToggleVisibleOverlayMainDepsHandler({
|
||||
getVisibleOverlayVisible: () => overlayManager.getVisibleOverlayVisible(),
|
||||
setVisibleOverlayVisible: (visible) => setVisibleOverlayVisible(visible),
|
||||
});
|
||||
const toggleVisibleOverlayMainDeps = buildToggleVisibleOverlayMainDepsHandler();
|
||||
const toggleVisibleOverlayHandler = createToggleVisibleOverlayHandler(
|
||||
toggleVisibleOverlayMainDeps,
|
||||
);
|
||||
|
||||
const buildToggleInvisibleOverlayMainDepsHandler =
|
||||
createBuildToggleInvisibleOverlayMainDepsHandler({
|
||||
getInvisibleOverlayVisible: () => overlayManager.getInvisibleOverlayVisible(),
|
||||
setInvisibleOverlayVisible: (visible) => setInvisibleOverlayVisible(visible),
|
||||
});
|
||||
const toggleInvisibleOverlayMainDeps =
|
||||
buildToggleInvisibleOverlayMainDepsHandler();
|
||||
const toggleInvisibleOverlayHandler = createToggleInvisibleOverlayHandler(
|
||||
toggleInvisibleOverlayMainDeps,
|
||||
);
|
||||
|
||||
const buildSetOverlayVisibleMainDepsHandler = createBuildSetOverlayVisibleMainDepsHandler({
|
||||
setVisibleOverlayVisible: (visible) => setVisibleOverlayVisible(visible),
|
||||
});
|
||||
const setOverlayVisibleMainDeps = buildSetOverlayVisibleMainDepsHandler();
|
||||
const setOverlayVisibleHandler = createSetOverlayVisibleHandler(
|
||||
setOverlayVisibleMainDeps,
|
||||
);
|
||||
|
||||
const buildToggleOverlayMainDepsHandler = createBuildToggleOverlayMainDepsHandler({
|
||||
toggleVisibleOverlay: () => toggleVisibleOverlay(),
|
||||
});
|
||||
const toggleOverlayHandler = createToggleOverlayHandler(buildToggleOverlayMainDepsHandler());
|
||||
|
||||
const buildHandleOverlayModalClosedMainDepsHandler =
|
||||
createBuildHandleOverlayModalClosedMainDepsHandler({
|
||||
|
||||
74
src/main/runtime/overlay-visibility-runtime.test.ts
Normal file
74
src/main/runtime/overlay-visibility-runtime.test.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { createOverlayVisibilityRuntime } from './overlay-visibility-runtime';
|
||||
|
||||
test('overlay visibility runtime wires set/toggle handlers through composed deps', () => {
|
||||
let visible = false;
|
||||
let invisible = true;
|
||||
let setVisibleCoreCalls = 0;
|
||||
let setInvisibleCoreCalls = 0;
|
||||
let lastBoundSubVisibility: boolean | null = null;
|
||||
|
||||
const runtime = createOverlayVisibilityRuntime({
|
||||
setVisibleOverlayVisibleDeps: {
|
||||
setVisibleOverlayVisibleCore: (options) => {
|
||||
setVisibleCoreCalls += 1;
|
||||
options.setVisibleOverlayVisibleState(options.visible);
|
||||
options.updateVisibleOverlayVisibility();
|
||||
options.updateInvisibleOverlayVisibility();
|
||||
options.syncInvisibleOverlayMousePassthrough();
|
||||
if (options.shouldBindVisibleOverlayToMpvSubVisibility() && options.isMpvConnected()) {
|
||||
options.setMpvSubVisibility(options.visible);
|
||||
}
|
||||
},
|
||||
setVisibleOverlayVisibleState: (nextVisible) => {
|
||||
visible = nextVisible;
|
||||
},
|
||||
updateVisibleOverlayVisibility: () => {},
|
||||
updateInvisibleOverlayVisibility: () => {},
|
||||
syncInvisibleOverlayMousePassthrough: () => {},
|
||||
shouldBindVisibleOverlayToMpvSubVisibility: () => true,
|
||||
isMpvConnected: () => true,
|
||||
setMpvSubVisibility: (nextVisible) => {
|
||||
lastBoundSubVisibility = nextVisible;
|
||||
},
|
||||
},
|
||||
setInvisibleOverlayVisibleDeps: {
|
||||
setInvisibleOverlayVisibleCore: (options) => {
|
||||
setInvisibleCoreCalls += 1;
|
||||
options.setInvisibleOverlayVisibleState(options.visible);
|
||||
options.updateInvisibleOverlayVisibility();
|
||||
options.syncInvisibleOverlayMousePassthrough();
|
||||
},
|
||||
setInvisibleOverlayVisibleState: (nextVisible) => {
|
||||
invisible = nextVisible;
|
||||
},
|
||||
updateInvisibleOverlayVisibility: () => {},
|
||||
syncInvisibleOverlayMousePassthrough: () => {},
|
||||
},
|
||||
getVisibleOverlayVisible: () => visible,
|
||||
getInvisibleOverlayVisible: () => invisible,
|
||||
});
|
||||
|
||||
runtime.setVisibleOverlayVisible(true);
|
||||
assert.equal(visible, true);
|
||||
assert.equal(lastBoundSubVisibility, true);
|
||||
|
||||
runtime.toggleVisibleOverlay();
|
||||
assert.equal(visible, false);
|
||||
|
||||
runtime.setOverlayVisible(true);
|
||||
assert.equal(visible, true);
|
||||
|
||||
runtime.toggleOverlay();
|
||||
assert.equal(visible, false);
|
||||
|
||||
runtime.setInvisibleOverlayVisible(false);
|
||||
assert.equal(invisible, false);
|
||||
|
||||
runtime.toggleInvisibleOverlay();
|
||||
assert.equal(invisible, true);
|
||||
|
||||
assert.equal(setVisibleCoreCalls, 4);
|
||||
assert.equal(setInvisibleCoreCalls, 2);
|
||||
});
|
||||
78
src/main/runtime/overlay-visibility-runtime.ts
Normal file
78
src/main/runtime/overlay-visibility-runtime.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import {
|
||||
createSetInvisibleOverlayVisibleHandler,
|
||||
createSetVisibleOverlayVisibleHandler,
|
||||
createToggleInvisibleOverlayHandler,
|
||||
createToggleVisibleOverlayHandler,
|
||||
} from './overlay-visibility-actions';
|
||||
import {
|
||||
createBuildSetInvisibleOverlayVisibleMainDepsHandler,
|
||||
createBuildSetVisibleOverlayVisibleMainDepsHandler,
|
||||
createBuildToggleInvisibleOverlayMainDepsHandler,
|
||||
createBuildToggleVisibleOverlayMainDepsHandler,
|
||||
} from './overlay-visibility-actions-main-deps';
|
||||
import { createSetOverlayVisibleHandler, createToggleOverlayHandler } from './overlay-main-actions';
|
||||
import {
|
||||
createBuildSetOverlayVisibleMainDepsHandler,
|
||||
createBuildToggleOverlayMainDepsHandler,
|
||||
} from './overlay-main-actions-main-deps';
|
||||
|
||||
type SetVisibleOverlayVisibleMainDeps = Parameters<
|
||||
typeof createBuildSetVisibleOverlayVisibleMainDepsHandler
|
||||
>[0];
|
||||
type SetInvisibleOverlayVisibleMainDeps = Parameters<
|
||||
typeof createBuildSetInvisibleOverlayVisibleMainDepsHandler
|
||||
>[0];
|
||||
|
||||
export type OverlayVisibilityRuntimeDeps = {
|
||||
setVisibleOverlayVisibleDeps: SetVisibleOverlayVisibleMainDeps;
|
||||
setInvisibleOverlayVisibleDeps: SetInvisibleOverlayVisibleMainDeps;
|
||||
getVisibleOverlayVisible: () => boolean;
|
||||
getInvisibleOverlayVisible: () => boolean;
|
||||
};
|
||||
|
||||
export function createOverlayVisibilityRuntime(deps: OverlayVisibilityRuntimeDeps) {
|
||||
const setVisibleOverlayVisibleMainDeps = createBuildSetVisibleOverlayVisibleMainDepsHandler(
|
||||
deps.setVisibleOverlayVisibleDeps,
|
||||
)();
|
||||
const setVisibleOverlayVisible = createSetVisibleOverlayVisibleHandler(
|
||||
setVisibleOverlayVisibleMainDeps,
|
||||
);
|
||||
|
||||
const setInvisibleOverlayVisibleMainDeps = createBuildSetInvisibleOverlayVisibleMainDepsHandler(
|
||||
deps.setInvisibleOverlayVisibleDeps,
|
||||
)();
|
||||
const setInvisibleOverlayVisible = createSetInvisibleOverlayVisibleHandler(
|
||||
setInvisibleOverlayVisibleMainDeps,
|
||||
);
|
||||
|
||||
const toggleVisibleOverlayMainDeps = createBuildToggleVisibleOverlayMainDepsHandler({
|
||||
getVisibleOverlayVisible: deps.getVisibleOverlayVisible,
|
||||
setVisibleOverlayVisible: (visible) => setVisibleOverlayVisible(visible),
|
||||
})();
|
||||
const toggleVisibleOverlay = createToggleVisibleOverlayHandler(toggleVisibleOverlayMainDeps);
|
||||
|
||||
const toggleInvisibleOverlayMainDeps = createBuildToggleInvisibleOverlayMainDepsHandler({
|
||||
getInvisibleOverlayVisible: deps.getInvisibleOverlayVisible,
|
||||
setInvisibleOverlayVisible: (visible) => setInvisibleOverlayVisible(visible),
|
||||
})();
|
||||
const toggleInvisibleOverlay = createToggleInvisibleOverlayHandler(toggleInvisibleOverlayMainDeps);
|
||||
|
||||
const setOverlayVisibleMainDeps = createBuildSetOverlayVisibleMainDepsHandler({
|
||||
setVisibleOverlayVisible: (visible) => setVisibleOverlayVisible(visible),
|
||||
})();
|
||||
const setOverlayVisible = createSetOverlayVisibleHandler(setOverlayVisibleMainDeps);
|
||||
|
||||
const toggleOverlayMainDeps = createBuildToggleOverlayMainDepsHandler({
|
||||
toggleVisibleOverlay: () => toggleVisibleOverlay(),
|
||||
})();
|
||||
const toggleOverlay = createToggleOverlayHandler(toggleOverlayMainDeps);
|
||||
|
||||
return {
|
||||
setVisibleOverlayVisible,
|
||||
setInvisibleOverlayVisible,
|
||||
toggleVisibleOverlay,
|
||||
toggleInvisibleOverlay,
|
||||
setOverlayVisible,
|
||||
toggleOverlay,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user