feat(R3.8): resume + up-next + autoplay + "needs transcode" notice#61
Merged
Conversation
The player's three closing moments, extracted from the locked R0 mockup
(player-chrome.html:184-197):
- ResumePrompt.vue — on-open "Resume from {time}" / "Start over" when the
persisted resume map holds an in-band (30s–95%) position; Resume seeks
(deferred to loadedmetadata when duration is unknown) + plays, Start over
clears + restarts; auto-dismisses once playing.
- UpNext.vue — end-of-video card (poster thumb, amber depleting countdown
ring) shown on `ended` with a queued item; counts down 8s + auto-advances
via usePlayerStore.next() when prefs.autoplay is on, static + manual
Play now when off; Cancel/replay stop it.
- TranscodeNotice.vue — opaque role=alert notice instead of a silent black
frame when a file can't direct-play (mkv/avi/… by extension on the stream
URL or library path, or a fatal <video> decode/src error); center +
controls are suppressed under it.
- playback.ts — pure helpers (extensionOf, needsTranscode, isFatalMediaError,
ringDashoffset + up-next/ring constants).
- usePlayerStore.next(resolveStreamUrl?) now threads/clears streamUrl so
advancing the queue never leaves a stale URL (fixes the R3.7 note).
- Player.vue: new optional `streamUrlFor` prop + `play-next` emit; resume +
transcode state initialized synchronously in setup (no first-frame flash).
1315 vitest passing (+52); components/player 99.6% lines; vue-tsc + vite 8
build clean; anti-slop clean. Consumers stay pinned (R6.6).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
detain
added a commit
that referenced
this pull request
Jun 4, 2026
The player's three closing moments, extracted from the locked R0 mockup
(player-chrome.html:184-197):
- ResumePrompt.vue — on-open "Resume from {time}" / "Start over" when the
persisted resume map holds an in-band (30s–95%) position; Resume seeks
(deferred to loadedmetadata when duration is unknown) + plays, Start over
clears + restarts; auto-dismisses once playing.
- UpNext.vue — end-of-video card (poster thumb, amber depleting countdown
ring) shown on `ended` with a queued item; counts down 8s + auto-advances
via usePlayerStore.next() when prefs.autoplay is on, static + manual
Play now when off; Cancel/replay stop it.
- TranscodeNotice.vue — opaque role=alert notice instead of a silent black
frame when a file can't direct-play (mkv/avi/… by extension on the stream
URL or library path, or a fatal <video> decode/src error); center +
controls are suppressed under it.
- playback.ts — pure helpers (extensionOf, needsTranscode, isFatalMediaError,
ringDashoffset + up-next/ring constants).
- usePlayerStore.next(resolveStreamUrl?) now threads/clears streamUrl so
advancing the queue never leaves a stale URL (fixes the R3.7 note).
- Player.vue: new optional `streamUrlFor` prop + `play-next` emit; resume +
transcode state initialized synchronously in setup (no first-frame flash).
1315 vitest passing (+52); components/player 99.6% lines; vue-tsc + vite 8
build clean; anti-slop clean. Consumers stay pinned (R6.6).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
R3.8 — Resume + Up-Next + autoplay + mkv/hevc "needs transcode" notice
The player's three closing moments, extracted from the locked R0 mockup (
player-chrome.html:184-197). Part of the R3 player-surface redo; consumers stay pinned to#v0.7.0until the aligned R6.6 release.Added
ResumePrompt.vue— on-open glass prompt ("Resume from {time}" / "Start over") shown when the persisted resume map holds an in-band (30s–95%) position for the current media. Resume seeks to the stored second (deferred toloadedmetadatawhen the duration isn't known yet) + plays; Start over seeks 0 +clearResume+ plays. Auto-dismisses once playback begins.UpNext.vue— end-of-video card (poster thumb, "Up next" eyebrow, title, amber depleting countdown ring). Onendedwith a queued item it counts down 8s and auto-advances viausePlayerStore.next(...)whenprefs.autoplayis on; static card with a manual Play now (+ Cancel) when off.TranscodeNotice.vue— opaquerole=alertnotice that replaces the silent black frame when a file can't direct-play: detected proactively by container extension (mkv/avi/wmv/ts/… on the stream URL or the library path) and reactively on a fatal<video>error (decode / src-not-supported). Center play + controls are suppressed under it.playback.ts— pure, DOM-free helpers:extensionOf,needsTranscode,isFatalMediaError,ringDashoffset+ the up-next / ring constants.Player.vue: new optionalstreamUrlForprop +play-next(media)emit; resume + transcode state is initialized synchronously insetup()(no first-frame black flash). New components + helpers exported.Fixed
usePlayerStore.next(resolveStreamUrl?)now threads a fresh stream URL intosetCurrent(or clears it to''when unresolved), so advancing the queue no longer leaves the previous item'sstreamUrlbehind (the R3.7-noted stale-URL bug).Review
Reviewer subagent → 3 LOW findings. #1 (real bug: replaying a just-ended video let the countdown advance the queue mid-replay) fixed — the
playingwatch now cancels the up-next too, with a new test. #2 accepted (forward-note for R3.9). #3 fixed (loading="lazy"on the up-next thumb). Re-verify: NO NEW FINDINGS.Gates
vue-tsc --noEmitclean ·npm run build(vite 8) clean (dist rebuilt) ·vitest run1315 passing (+52) ·components/player99.6% lines (playback.ts100%),Player.vue98.18% lines · overall 97.23% lines · anti-slop clean.Out of scope (R3.9)
PlayerPage.vueintegration: real/media/:id/streamURL resolution + thestreamUrlForresolver wiring, the route-leave→showMiniPlayer()toggle, ambient backdrop, loading/error states.🤖 Generated with Claude Code