feat(anime): add anime browser powered by Aniyomi extensions

- Add `subminer anime` / `--anime` and a tray entry to open a browser that searches installed Aniyomi extension sources, shows cover art and episodes, and plays into mpv with overlay/mining attached
- Add an Extensions tab to add repos and install/update/remove sources, and per-source settings for sources needing config
- Support searching all sources at once with streaming, per-source results and status
- Prefer Japanese audio/subtitle tracks from the source and keep the primary subtitle slot reserved for Japanese
- Fix window/tray/Dock handling so the browser and mpv can be switched between without quitting the app or losing the Dock icon
- Add anime.repos, anime.extensionsDir, anime.preferredQuality config keys (no bundled repos or discovery)
This commit is contained in:
2026-07-31 17:16:49 -07:00
parent 5b8848518a
commit c5140b0f7b
117 changed files with 7563 additions and 527 deletions
+18
View File
@@ -123,6 +123,22 @@ export const IPC_CHANNELS = {
syncUiDeleteSnapshot: 'sync-ui:delete-snapshot',
syncUiRevealSnapshot: 'sync-ui:reveal-snapshot',
syncUiPickSnapshotFile: 'sync-ui:pick-snapshot-file',
animeBrowserGetSnapshot: 'anime-browser:get-snapshot',
animeBrowserEnsureBridge: 'anime-browser:ensure-bridge',
animeBrowserSelectSource: 'anime-browser:select-source',
animeBrowserSearch: 'anime-browser:search',
animeBrowserGetPopular: 'anime-browser:get-popular',
animeBrowserGetDetails: 'anime-browser:get-details',
animeBrowserGetEpisodes: 'anime-browser:get-episodes',
animeBrowserPlayEpisode: 'anime-browser:play-episode',
animeBrowserGetPreferences: 'anime-browser:get-preferences',
animeBrowserSetPreference: 'anime-browser:set-preference',
animeBrowserListAvailableExtensions: 'anime-browser:list-available-extensions',
animeBrowserInstallExtension: 'anime-browser:install-extension',
animeBrowserRemoveExtension: 'anime-browser:remove-extension',
animeBrowserRescanExtensions: 'anime-browser:rescan-extensions',
animeBrowserAddRepo: 'anime-browser:add-repo',
animeBrowserRemoveRepo: 'anime-browser:remove-repo',
},
event: {
subtitleSet: 'subtitle:set',
@@ -156,6 +172,8 @@ export const IPC_CHANNELS = {
notificationHistoryToggle: 'notification-history:toggle',
syncUiProgress: 'sync-ui:progress',
syncUiStateChanged: 'sync-ui:state-changed',
animeBrowserBridgeState: 'anime-browser:bridge-state',
animeBrowserSearchUpdate: 'anime-browser:search-update',
},
} as const;