From 2e2ee3f02888449a49c7ca61c28ebd0b8dd9f648 Mon Sep 17 00:00:00 2001 From: sudacode Date: Mon, 13 Jul 2026 22:03:35 -0700 Subject: [PATCH] refactor(tsukihime): swap Animetosho backend for TsukiHime API (#165) --- .gitignore | 3 + README.md | 1 + changes/animetosho-english-subtitles.md | 4 - changes/tsukihime-english-subtitles.md | 4 + config.example.jsonc | 16 +- docs-site/.vitepress/config.ts | 2 +- docs-site/animetosho-integration.md | 73 --- docs-site/public/config.example.jsonc | 16 +- docs-site/shortcuts.md | 4 +- docs-site/tsukihime-integration.md | 81 +++ docs-site/usage.md | 3 + plugin/subminer/session_bindings.lua | 4 +- scripts/test-plugin-session-bindings.lua | 9 + src/animetosho/lang.test.ts | 45 -- src/animetosho/utils.test.ts | 233 ------- src/cli/args.test.ts | 12 +- src/cli/args.ts | 19 +- src/config/definitions.ts | 4 +- src/config/definitions/defaults-core.ts | 2 +- .../definitions/defaults-integrations.ts | 6 +- src/config/definitions/options-core.ts | 6 +- .../definitions/options-integrations.ts | 13 +- src/config/definitions/shared.ts | 2 + src/config/definitions/template-sections.ts | 8 +- src/config/resolve/core-domains.ts | 16 +- src/config/resolve/subtitle-domains.ts | 27 +- src/config/resolve/top-level.ts | 2 +- src/config/resolve/tsukihime-compat.test.ts | 63 ++ src/config/settings/registry.test.ts | 2 + src/config/settings/registry.ts | 5 +- src/core/services/anki-jimaku-ipc.test.ts | 66 +- src/core/services/anki-jimaku-ipc.ts | 88 +-- src/core/services/anki-jimaku.test.ts | 60 +- src/core/services/anki-jimaku.ts | 86 +-- src/core/services/app-lifecycle.test.ts | 2 +- src/core/services/cli-command.test.ts | 2 +- src/core/services/cli-command.ts | 8 +- src/core/services/ipc-command.test.ts | 14 +- src/core/services/ipc-command.ts | 10 +- .../services/overlay-shortcut-handler.test.ts | 22 +- src/core/services/overlay-shortcut-handler.ts | 14 +- src/core/services/overlay-shortcut.test.ts | 8 +- src/core/services/overlay-shortcut.ts | 4 +- src/core/services/session-actions.test.ts | 2 +- src/core/services/session-actions.ts | 6 +- src/core/services/session-bindings.test.ts | 17 +- src/core/services/session-bindings.ts | 6 +- src/core/services/startup-bootstrap.test.ts | 2 +- src/core/utils/shortcut-config.ts | 4 +- src/main.ts | 18 +- src/main/dependencies.ts | 4 +- src/main/ipc-mpv-command.ts | 4 +- src/main/overlay-runtime.ts | 10 +- src/main/overlay-shortcuts-runtime.ts | 6 +- .../composers/ipc-runtime-composer.test.ts | 2 +- .../runtime/first-run-setup-service.test.ts | 2 +- src/main/runtime/first-run-setup-service.ts | 2 +- .../global-shortcuts-runtime-handlers.test.ts | 2 +- src/main/runtime/global-shortcuts.test.ts | 2 +- .../ipc-bridge-actions-main-deps.test.ts | 2 +- src/main/runtime/ipc-bridge-actions.test.ts | 2 +- .../runtime/ipc-mpv-command-main-deps.test.ts | 6 +- src/main/runtime/ipc-mpv-command-main-deps.ts | 2 +- ...verlay-shortcuts-runtime-main-deps.test.ts | 2 +- .../overlay-shortcuts-runtime-main-deps.ts | 2 +- .../{animetosho-open.ts => tsukihime-open.ts} | 16 +- src/preload.ts | 42 +- src/renderer/handlers/keyboard.test.ts | 4 +- src/renderer/handlers/keyboard.ts | 6 +- src/renderer/index.html | 40 +- src/renderer/modals/animetosho.test.ts | 388 ----------- src/renderer/modals/animetosho.ts | 487 -------------- src/renderer/modals/session-help-sections.ts | 10 +- src/renderer/modals/tsukihime.test.ts | 615 ++++++++++++++++++ src/renderer/modals/tsukihime.ts | 506 ++++++++++++++ src/renderer/renderer.ts | 22 +- src/renderer/state.ts | 32 +- src/renderer/style.css | 14 +- src/renderer/utils/dom.ts | 48 +- src/shared/ipc/contracts.ts | 12 +- src/shared/ipc/validators.ts | 14 +- .../fetch-limits.test.ts | 34 +- src/tsukihime/lang.test.ts | 45 ++ src/{animetosho => tsukihime}/lang.ts | 18 +- src/tsukihime/utils.test.ts | 349 ++++++++++ src/{animetosho => tsukihime}/utils.ts | Bin 10527 -> 13199 bytes src/types/config.ts | 17 +- src/types/integrations.ts | 17 +- src/types/runtime.ts | 36 +- src/types/session-bindings.ts | 2 +- 90 files changed, 2253 insertions(+), 1695 deletions(-) delete mode 100644 changes/animetosho-english-subtitles.md create mode 100644 changes/tsukihime-english-subtitles.md delete mode 100644 docs-site/animetosho-integration.md create mode 100644 docs-site/tsukihime-integration.md delete mode 100644 src/animetosho/lang.test.ts delete mode 100644 src/animetosho/utils.test.ts create mode 100644 src/config/resolve/tsukihime-compat.test.ts rename src/main/runtime/{animetosho-open.ts => tsukihime-open.ts} (74%) delete mode 100644 src/renderer/modals/animetosho.test.ts delete mode 100644 src/renderer/modals/animetosho.ts create mode 100644 src/renderer/modals/tsukihime.test.ts create mode 100644 src/renderer/modals/tsukihime.ts rename src/{animetosho => tsukihime}/fetch-limits.test.ts (70%) create mode 100644 src/tsukihime/lang.test.ts rename src/{animetosho => tsukihime}/lang.ts (67%) create mode 100644 src/tsukihime/utils.test.ts rename src/{animetosho => tsukihime}/utils.ts (58%) diff --git a/.gitignore b/.gitignore index 96c00b02..2f4cd81a 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,6 @@ tests/* favicon.png .claude/* !stats/public/favicon.png + +# Browser-automation session artifacts (page snapshots, console logs, downloads) +.playwright-mcp/ diff --git a/README.md b/README.md index 505784f8..2d86385d 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,7 @@ SubMiner builds on the work of these open-source projects: | [jellyfin-mpv-shim](https://github.com/jellyfin/jellyfin-mpv-shim) | Jellyfin integration | | [Jimaku.cc](https://jimaku.cc) | Japanese subtitle search and downloads | | [Renji's Texthooker Page](https://github.com/Renji-XD/texthooker-ui) | Base for the WebSocket texthooker integration | +| [TsukiHime](https://tsukihime.org) | Release-track subtitle search and downloads (Animetosho successor) | | [Yomitan](https://github.com/yomidevs/yomitan) | Dictionary engine powering all lookups and the morphological parser | | [yomitan-jlpt-vocab](https://github.com/stephenmk/yomitan-jlpt-vocab) | JLPT level tags for vocabulary | diff --git a/changes/animetosho-english-subtitles.md b/changes/animetosho-english-subtitles.md deleted file mode 100644 index 60907887..00000000 --- a/changes/animetosho-english-subtitles.md +++ /dev/null @@ -1,4 +0,0 @@ -type: added -area: overlay - -- Added an Animetosho integration for downloading English (and Japanese) subtitles, mirroring the Jimaku flow: `Ctrl+Shift+T` (configurable via `shortcuts.openAnimetosho`) opens an in-overlay modal with two language tabs (the first follows `secondarySub.secondarySubLanguages`, defaulting to English; the second is Japanese) that parses the current video filename, searches Animetosho releases, lists extracted text subtitle tracks filtered by the active tab, then downloads the chosen track, decompresses it (requires the `xz` binary), saves it next to the video with a language suffix (`