fix: clean rewrite of audio recovery matching Kima Hub design
playCurrent(): - Remove canplay listener from before play() — it caused a race where both the listener and the initial play() fired simultaneously - canplay is now only registered in the catch (failure path only), eliminating the double-play race entirely - AbortError: reload src+load() with _trackChanging=true (OS interruption recovery); canplay fires once buffered and retries play() - Other errors: reset _trackChanging, let canplay retry (not throttled by Android background timers unlike setTimeout) - Add 10s safety net to reset _trackChanging if Doze kills everything (matches Kima Hub's reload failsafe) main.js error handler: - Skip when _trackChanging=true (playCurrent already recovering) to prevent conflicting dual recovery attempts - _onForeground: reset _trackChanging on play() failure so the flag can't get stuck when foreground recovery also fails index.html: - Add crossorigin=anonymous: Navidrome and NovaSonic backend both send Access-Control-Allow-Origin:* so this is safe, and it enables proper cross-context HTTP caching for cover art and audio responses Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
0344dcdcb6
commit
688348545d
3 files changed
+32
-34
No files matched your search
+1
-1
@@ -590,7 +590,7 @@
|
||||
<div class="jobs-panel" id="jobs-panel"></div>
|
||||
|
||||
<div class="toast-container" id="toast-container"></div>
|
||||
<audio id="audio-element" preload="auto" playsinline></audio>
|
||||
<audio id="audio-element" preload="auto" playsinline crossorigin="anonymous"></audio>
|
||||
<audio id="preview-audio"></audio>
|
||||
<audio id="abs-audio"></audio>
|
||||
|
||||
|
||||
Reference in new issue
Block a user