Skip to content

feat: add a controller-first full-screen video player - #212

Merged
nextestudios merged 2 commits into
mainfrom
feature/61-video-player
Sep 27, 2026
Merged

nextestudios merged 2 commits into
mainfrom
feature/61-video-player

Conversation

@nextestudios

Copy link
Copy Markdown
Owner

Summary

Implements the basic in-app video preview (#61) and the controller-first full-screen player (#170) in one PR, since #170 builds directly on #61.

  • Open: South on MP4/M4V/MOV/WMV/AVI/MKV/WebM/3GP from the list or grid (or North → Assistir aqui). The existing Open/Open with items stay.
  • Full screen: a new VideoPlayerView layer covers the whole window under the modal layer, so menus/dialogs open on top without recreating the video element; the window switches to full screen while a video is open and restores afterwards (a user F11 is left alone).
  • Overlay: title, elapsed/remaining time, progress bar, volume/mute, subtitle and audio-track state, and the active controller's prompts (feat: add dynamic controller button prompts to action bar #34). Shows on any input, fades after 3 s while playing, stays while paused; prompts only when the player is the top modal.
  • Controls (semantic actions only): South play/pause (restart at end); Left/Right ±10 s, LB/RB ±1 min, LT/RT ±5% (timeline) accumulate a previewed target shown large and as a mark on the bar, committed after 700 ms (South commits now, Back cancels), bounded to [0, duration]; Up/Down volume; North options menu (subtitles off/embedded/sidecar .srt/.vtt, audio track when >1, mute, start over, forget position) with unavailable entries disabled and explained; Back hides the overlay first, then closes and restores folder + focused file.
  • Resume: leaving between 30 s and duration−30 s stores the position under a SHA-256 of path+size+mtime (never the name) in playback.json (max 500). Reopening the same file asks Continuar de m:ss / Começar do início / back; another file with the same name or an edited file does not resume. Ending the video or "Esquecer onde parei" forgets it; Configurações → Apagar onde os vídeos pararam clears all.
  • Errors: unsupported codecs / no audio device show a clear message on the overlay; only Back is offered and it returns to the list. Playback stops and the file is released on close.
  • Windows codecs only (documented in GUIDE both languages: which formats may need Store extensions). Security notes in docs/security-model.md, privacy note in docs/PRIVACY.md. Render harness: mv-video-player with a generated uncompressed AVI.

Tested in CI

  • VideoPlayerJourneyTests (fake player/store/clock): overlay fade and reveal, previewed seek accumulation/commit/bounds/cancel, Back hides overlay before closing, focus restored; resume offered only for the same file, resume applied when seekable, subtitles selectable and missing audio tracks explained, ended video forgets the position; unsupported codec message with Back only.

Manual checks (docs/TESTING.md, "Vídeo (#61, #170)")

  • Real playback, full-screen switch, multi-track MKV/embedded and sidecar subtitles, resume across launches, missing HEVC/VP9 codecs, TV/handheld legibility, real controllers per family. The GitHub runner has no audio device, so real playback can't be proven in CI (see the mv-video-player capture).

Closes #61
Closes #170

🤖 Generated with Claude Code

@nextestudios
nextestudios force-pushed the feature/61-video-player branch 3 times, most recently from 36d982b to 23d9028 Compare September 27, 2026 22:51
nextestudios and others added 2 commits September 27, 2026 19:53
In-app video on the Windows MediaPlayer in a full-window layer under the
modal layer: an overlay that fades while playing, previewed bounded seeks
(D-pad, shoulders, triggers), volume, subtitle and audio track options,
Back hides the overlay first, and resume/start over per exact file stored
as a digest only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nextestudios
nextestudios force-pushed the feature/61-video-player branch from 23d9028 to 29b0fc2 Compare September 27, 2026 22:53
@nextestudios
nextestudios merged commit f489c99 into main Sep 27, 2026
1 check passed
@nextestudios
nextestudios deleted the feature/61-video-player branch September 27, 2026 22:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add a controller-first full-screen video player feat: add in-app video preview

1 participant