Handle AniList update errors and expand setup docs

This commit is contained in:
2026-02-17 00:00:30 -08:00
parent 5602d751eb
commit 7610bba16e
2 changed files with 18 additions and 1 deletions

View File

@@ -388,6 +388,21 @@ Current post-watch behavior:
- Episode/title detection is `guessit`-first with fallback to SubMiner's filename parser. - Episode/title detection is `guessit`-first with fallback to SubMiner's filename parser.
- If `guessit` is unavailable, updates still work via fallback parsing but title matching can be less accurate. - If `guessit` is unavailable, updates still work via fallback parsing but title matching can be less accurate.
- If embedded AniList auth UI fails to render, SubMiner opens the authorize URL in your default browser and shows fallback instructions in-app. - If embedded AniList auth UI fails to render, SubMiner opens the authorize URL in your default browser and shows fallback instructions in-app.
- Failed updates are retried with a persistent backoff queue in the background.
Setup flow details:
1. Set `anilist.enabled` to `true`.
2. Leave `anilist.accessToken` empty and restart SubMiner to trigger setup.
3. Approve access in AniList (browser window or system browser fallback).
4. Copy the returned token and paste it into `anilist.accessToken`.
5. Save config and restart SubMiner.
Token + detection notes:
- `anilist.accessToken` can be set directly in config; SubMiner also stores the token locally for reuse if config token is later blank.
- Detection quality is best when `guessit` is installed and available on `PATH`.
- When `guessit` cannot parse or is missing, SubMiner falls back automatically to internal filename parsing.
### Keybindings ### Keybindings

View File

@@ -1317,7 +1317,9 @@ function bindMpvClientEventHandlers(mpvClient: MpvIpcClient): void {
if (text.trim() && appState.subtitleTimingTracker) { if (text.trim() && appState.subtitleTimingTracker) {
appState.subtitleTimingTracker.recordSubtitle(text, start, end); appState.subtitleTimingTracker.recordSubtitle(text, start, end);
} }
void maybeRunAnilistPostWatchUpdate(); void maybeRunAnilistPostWatchUpdate().catch((error) => {
logger.error("AniList post-watch update failed unexpectedly", error);
});
}); });
mpvClient.on("media-path-change", ({ path }) => { mpvClient.on("media-path-change", ({ path }) => {
mediaRuntime.updateCurrentMediaPath(path); mediaRuntime.updateCurrentMediaPath(path);