mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
refactor: extract yomitan settings runtime wiring
This commit is contained in:
@@ -6,7 +6,7 @@ Read first. Keep concise.
|
|||||||
| ------------ | -------------- | ---------------------------------------------------- | --------- | ------------------------------------- | ---------------------- |
|
| ------------ | -------------- | ---------------------------------------------------- | --------- | ------------------------------------- | ---------------------- |
|
||||||
| `codex-generate-minecard-image-20260220T112900Z-vsxr` | `codex-generate-minecard-image` | `Generate media fallbacks (GIF) from assets/minecard.webm and wire README/docs fallback markup` | `done` | `docs/subagents/agents/codex-generate-minecard-image-20260220T112900Z-vsxr.md` | `2026-02-20T11:35:30Z` |
|
| `codex-generate-minecard-image-20260220T112900Z-vsxr` | `codex-generate-minecard-image` | `Generate media fallbacks (GIF) from assets/minecard.webm and wire README/docs fallback markup` | `done` | `docs/subagents/agents/codex-generate-minecard-image-20260220T112900Z-vsxr.md` | `2026-02-20T11:35:30Z` |
|
||||||
| `codex-main` | `planner-exec` | `Fix frequency/N+1 regression in plugin --start flow` | `in_progress` | `docs/subagents/agents/codex-main.md` | `2026-02-19T19:36:46Z` |
|
| `codex-main` | `planner-exec` | `Fix frequency/N+1 regression in plugin --start flow` | `in_progress` | `docs/subagents/agents/codex-main.md` | `2026-02-19T19:36:46Z` |
|
||||||
| `codex-task85-20260219T233711Z-46hc` | `codex-task85` | `Resume TASK-85 maintainability refactor from latest handoff point` | `in_progress` | `docs/subagents/agents/codex-task85-20260219T233711Z-46hc.md` | `2026-02-20T10:15:51Z` |
|
| `codex-task85-20260219T233711Z-46hc` | `codex-task85` | `Resume TASK-85 maintainability refactor from latest handoff point` | `in_progress` | `docs/subagents/agents/codex-task85-20260219T233711Z-46hc.md` | `2026-02-20T10:17:29Z` |
|
||||||
| `codex-config-validation-20260219T172015Z-iiyf` | `codex-config-validation` | `Find root cause of config validation error for ~/.config/SubMiner/config.jsonc` | `completed` | `docs/subagents/agents/codex-config-validation-20260219T172015Z-iiyf.md` | `2026-02-19T17:26:17Z` |
|
| `codex-config-validation-20260219T172015Z-iiyf` | `codex-config-validation` | `Find root cause of config validation error for ~/.config/SubMiner/config.jsonc` | `completed` | `docs/subagents/agents/codex-config-validation-20260219T172015Z-iiyf.md` | `2026-02-19T17:26:17Z` |
|
||||||
| `codex-task85-20260219T233711Z-46hc` | `codex-task85` | `Resume TASK-85 maintainability refactor from latest handoff point` | `in_progress` | `docs/subagents/agents/codex-task85-20260219T233711Z-46hc.md` | `2026-02-20T02:56:34Z` |
|
| `codex-task85-20260219T233711Z-46hc` | `codex-task85` | `Resume TASK-85 maintainability refactor from latest handoff point` | `in_progress` | `docs/subagents/agents/codex-task85-20260219T233711Z-46hc.md` | `2026-02-20T02:56:34Z` |
|
||||||
| `codex-anilist-deeplink-20260219T233926Z` | `anilist-deeplink` | `Fix external subminer:// AniList callback handling from browser` | `done` | `docs/subagents/agents/codex-anilist-deeplink-20260219T233926Z.md` | `2026-02-19T23:59:21Z` |
|
| `codex-anilist-deeplink-20260219T233926Z` | `anilist-deeplink` | `Fix external subminer:// AniList callback handling from browser` | `done` | `docs/subagents/agents/codex-anilist-deeplink-20260219T233926Z.md` | `2026-02-19T23:59:21Z` |
|
||||||
|
|||||||
@@ -9,6 +9,10 @@
|
|||||||
|
|
||||||
## Current Work (newest first)
|
## Current Work (newest first)
|
||||||
|
|
||||||
|
- [2026-02-20T10:17:29Z] progress: extracted Yomitan settings opener composition from `src/main.ts` into `src/main/runtime/yomitan-settings-runtime.ts`; `main.ts` now uses `createYomitanSettingsRuntime(...)` and consumes `openYomitanSettings` from that runtime.
|
||||||
|
- [2026-02-20T10:17:29Z] progress: added `src/main/runtime/yomitan-settings-runtime.test.ts` for composed runtime behavior.
|
||||||
|
- [2026-02-20T10:17:29Z] test: `bun run build` pass (expected macOS helper Swift cache fallback) + focused suites pass for `yomitan-settings-runtime*`, `yomitan-settings-opener*`, `yomitan-extension-runtime*`, `cli-command-context-factory*`, and `tray-runtime-handlers*` (7/7).
|
||||||
|
- [2026-02-20T10:17:29Z] scope: staging `src/main.ts`, new yomitan settings runtime module/tests, and subagent bookkeeping only.
|
||||||
- [2026-02-20T10:15:51Z] progress: extracted overlay window factory composition from `src/main.ts` into `src/main/runtime/overlay-window-runtime-handlers.ts`; `main.ts` now composes overlay/main/invisible window handlers via one runtime factory.
|
- [2026-02-20T10:15:51Z] progress: extracted overlay window factory composition from `src/main.ts` into `src/main/runtime/overlay-window-runtime-handlers.ts`; `main.ts` now composes overlay/main/invisible window handlers via one runtime factory.
|
||||||
- [2026-02-20T10:15:51Z] progress: added `src/main/runtime/overlay-window-runtime-handlers.test.ts` for composed window handler wiring.
|
- [2026-02-20T10:15:51Z] progress: added `src/main/runtime/overlay-window-runtime-handlers.test.ts` for composed window handler wiring.
|
||||||
- [2026-02-20T10:15:51Z] test: `bun run build` pass (expected macOS helper Swift cache fallback) + focused suites pass for `overlay-window-runtime-handlers*`, `overlay-window-factory*`, `overlay-runtime-bootstrap*`, `tray-runtime-handlers*`, and `cli-command-context-factory*` (9/9).
|
- [2026-02-20T10:15:51Z] test: `bun run build` pass (expected macOS helper Swift cache fallback) + focused suites pass for `overlay-window-runtime-handlers*`, `overlay-window-factory*`, `overlay-runtime-bootstrap*`, `tray-runtime-handlers*`, and `cli-command-context-factory*` (9/9).
|
||||||
|
|||||||
37
src/main.ts
37
src/main.ts
@@ -290,7 +290,6 @@ import {
|
|||||||
} from './main/runtime/overlay-window-layout-main-deps';
|
} from './main/runtime/overlay-window-layout-main-deps';
|
||||||
import { buildTrayMenuTemplateRuntime, resolveTrayIconPathRuntime } from './main/runtime/tray-runtime';
|
import { buildTrayMenuTemplateRuntime, resolveTrayIconPathRuntime } from './main/runtime/tray-runtime';
|
||||||
import { createInitializeOverlayRuntimeHandler } from './main/runtime/overlay-runtime-bootstrap';
|
import { createInitializeOverlayRuntimeHandler } from './main/runtime/overlay-runtime-bootstrap';
|
||||||
import { createOpenYomitanSettingsHandler } from './main/runtime/yomitan-settings-opener';
|
|
||||||
import {
|
import {
|
||||||
createGetConfiguredShortcutsHandler,
|
createGetConfiguredShortcutsHandler,
|
||||||
createRefreshGlobalAndOverlayShortcutsHandler,
|
createRefreshGlobalAndOverlayShortcutsHandler,
|
||||||
@@ -384,10 +383,10 @@ import { createBuildMpvCommandFromIpcRuntimeMainDepsHandler } from './main/runti
|
|||||||
import { createOverlayWindowRuntimeHandlers } from './main/runtime/overlay-window-runtime-handlers';
|
import { createOverlayWindowRuntimeHandlers } from './main/runtime/overlay-window-runtime-handlers';
|
||||||
import {
|
import {
|
||||||
createBuildInitializeOverlayRuntimeBootstrapMainDepsHandler,
|
createBuildInitializeOverlayRuntimeBootstrapMainDepsHandler,
|
||||||
createBuildOpenYomitanSettingsMainDepsHandler,
|
|
||||||
} from './main/runtime/app-runtime-main-deps';
|
} from './main/runtime/app-runtime-main-deps';
|
||||||
import { createTrayRuntimeHandlers } from './main/runtime/tray-runtime-handlers';
|
import { createTrayRuntimeHandlers } from './main/runtime/tray-runtime-handlers';
|
||||||
import { createYomitanExtensionRuntime } from './main/runtime/yomitan-extension-runtime';
|
import { createYomitanExtensionRuntime } from './main/runtime/yomitan-extension-runtime';
|
||||||
|
import { createYomitanSettingsRuntime } from './main/runtime/yomitan-settings-runtime';
|
||||||
import { createBuildInitializeOverlayRuntimeOptionsHandler } from './main/runtime/overlay-runtime-options';
|
import { createBuildInitializeOverlayRuntimeOptionsHandler } from './main/runtime/overlay-runtime-options';
|
||||||
import { createBuildInitializeOverlayRuntimeMainDepsHandler } from './main/runtime/overlay-runtime-options-main-deps';
|
import { createBuildInitializeOverlayRuntimeMainDepsHandler } from './main/runtime/overlay-runtime-options-main-deps';
|
||||||
import {
|
import {
|
||||||
@@ -3126,24 +3125,22 @@ const initializeOverlayRuntimeHandler = createInitializeOverlayRuntimeHandler(
|
|||||||
startBackgroundWarmups: () => startBackgroundWarmups(),
|
startBackgroundWarmups: () => startBackgroundWarmups(),
|
||||||
})(),
|
})(),
|
||||||
);
|
);
|
||||||
const openYomitanSettingsHandler = createOpenYomitanSettingsHandler(
|
const { openYomitanSettings: openYomitanSettingsHandler } = createYomitanSettingsRuntime({
|
||||||
createBuildOpenYomitanSettingsMainDepsHandler({
|
ensureYomitanExtensionLoaded: () => ensureYomitanExtensionLoaded(),
|
||||||
ensureYomitanExtensionLoaded: () => ensureYomitanExtensionLoaded(),
|
openYomitanSettingsWindow: ({ yomitanExt, getExistingWindow, setWindow }) => {
|
||||||
openYomitanSettingsWindow: ({ yomitanExt, getExistingWindow, setWindow }) => {
|
openYomitanSettingsWindow({
|
||||||
openYomitanSettingsWindow({
|
yomitanExt: yomitanExt as Extension,
|
||||||
yomitanExt: yomitanExt as Extension,
|
getExistingWindow: () => getExistingWindow() as BrowserWindow | null,
|
||||||
getExistingWindow: () => getExistingWindow() as BrowserWindow | null,
|
setWindow: (window) => setWindow(window as BrowserWindow | null),
|
||||||
setWindow: (window) => setWindow(window as BrowserWindow | null),
|
});
|
||||||
});
|
},
|
||||||
},
|
getExistingWindow: () => appState.yomitanSettingsWindow,
|
||||||
getExistingWindow: () => appState.yomitanSettingsWindow,
|
setWindow: (window) => {
|
||||||
setWindow: (window) => {
|
appState.yomitanSettingsWindow = window as BrowserWindow | null;
|
||||||
appState.yomitanSettingsWindow = window as BrowserWindow | null;
|
},
|
||||||
},
|
logWarn: (message) => logger.warn(message),
|
||||||
logWarn: (message) => logger.warn(message),
|
logError: (message, error) => logger.error(message, error),
|
||||||
logError: (message, error) => logger.error(message, error),
|
});
|
||||||
})(),
|
|
||||||
);
|
|
||||||
|
|
||||||
async function updateLastCardFromClipboard(): Promise<void> {
|
async function updateLastCardFromClipboard(): Promise<void> {
|
||||||
await updateLastCardFromClipboardHandler();
|
await updateLastCardFromClipboardHandler();
|
||||||
|
|||||||
31
src/main/runtime/yomitan-settings-runtime.test.ts
Normal file
31
src/main/runtime/yomitan-settings-runtime.test.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import test from 'node:test';
|
||||||
|
import { createYomitanSettingsRuntime } from './yomitan-settings-runtime';
|
||||||
|
|
||||||
|
test('yomitan settings runtime composes opener with built deps', async () => {
|
||||||
|
let existingWindow: { id: string } | null = null;
|
||||||
|
const calls: string[] = [];
|
||||||
|
|
||||||
|
const runtime = createYomitanSettingsRuntime({
|
||||||
|
ensureYomitanExtensionLoaded: async () => ({ id: 'ext' }),
|
||||||
|
openYomitanSettingsWindow: ({ getExistingWindow, setWindow }) => {
|
||||||
|
calls.push('open-window');
|
||||||
|
const current = getExistingWindow();
|
||||||
|
if (!current) {
|
||||||
|
setWindow({ id: 'settings' });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getExistingWindow: () => existingWindow as never,
|
||||||
|
setWindow: (window) => {
|
||||||
|
existingWindow = window as { id: string } | null;
|
||||||
|
},
|
||||||
|
logWarn: (message) => calls.push(`warn:${message}`),
|
||||||
|
logError: (message) => calls.push(`error:${message}`),
|
||||||
|
});
|
||||||
|
|
||||||
|
runtime.openYomitanSettings();
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||||
|
|
||||||
|
assert.deepEqual(existingWindow, { id: 'settings' });
|
||||||
|
assert.deepEqual(calls, ['open-window']);
|
||||||
|
});
|
||||||
13
src/main/runtime/yomitan-settings-runtime.ts
Normal file
13
src/main/runtime/yomitan-settings-runtime.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { createBuildOpenYomitanSettingsMainDepsHandler } from './app-runtime-main-deps';
|
||||||
|
import { createOpenYomitanSettingsHandler } from './yomitan-settings-opener';
|
||||||
|
|
||||||
|
type OpenYomitanSettingsMainDeps = Parameters<typeof createBuildOpenYomitanSettingsMainDepsHandler>[0];
|
||||||
|
|
||||||
|
export function createYomitanSettingsRuntime(deps: OpenYomitanSettingsMainDeps) {
|
||||||
|
const openYomitanSettingsMainDeps = createBuildOpenYomitanSettingsMainDepsHandler(deps)();
|
||||||
|
const openYomitanSettings = createOpenYomitanSettingsHandler(openYomitanSettingsMainDeps);
|
||||||
|
|
||||||
|
return {
|
||||||
|
openYomitanSettings,
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user