feat(anime): queue episodes to play next across anime

- Episode rows gain Play/Queue actions (and matching context-menu items); queued rows show their place in line, with a queue count and Clear queue in the episode header
- Queue lives in the main process (`anime-browser-queue.ts`) so it survives the browser window closing and advances on mpv's end-file even when nobody is watching; streams resolve at play time so a signed URL cannot expire while queued
- Holds mpv's keep-open off while the queue waits and restores it once empty; queueing with nothing playing just plays immediately
- Adds anime-browser-queue and episode-queue unit tests, IPC channels/contracts, and doc updates
This commit is contained in:
2026-08-15 21:44:51 -07:00
parent 51fc9034f7
commit 3ca7dcd664
19 changed files with 838 additions and 7 deletions
+6
View File
@@ -135,6 +135,11 @@ export const IPC_CHANNELS = {
animeBrowserGetWatchState: 'anime-browser:get-watch-state',
animeBrowserSetWatched: 'anime-browser:set-watched',
animeBrowserPlayEpisode: 'anime-browser:play-episode',
animeBrowserQueueEpisode: 'anime-browser:queue-episode',
animeBrowserDequeueEpisode: 'anime-browser:dequeue-episode',
animeBrowserClearQueue: 'anime-browser:clear-queue',
animeBrowserGetQueue: 'anime-browser:get-queue',
animeBrowserIsPlaying: 'anime-browser:is-playing',
animeBrowserGetPreferences: 'anime-browser:get-preferences',
animeBrowserSetPreference: 'anime-browser:set-preference',
animeBrowserListAvailableExtensions: 'anime-browser:list-available-extensions',
@@ -179,6 +184,7 @@ export const IPC_CHANNELS = {
syncUiStateChanged: 'sync-ui:state-changed',
animeBrowserBridgeState: 'anime-browser:bridge-state',
animeBrowserSearchUpdate: 'anime-browser:search-update',
animeBrowserQueueState: 'anime-browser:queue-state',
},
} as const;