Commit Graph

25 Commits

Author SHA1 Message Date
hl-valdemar 93acc1436a ui: frost playback titles and hide chrome on pointer exit 2026-10-12 13:55:46 +02:00
hl-valdemar 0ed35b4a58 ui: blend titlebars into player background 2026-10-12 13:09:53 +02:00
hl-valdemar e6897332a5 ui: frost the empty player window background 2026-10-12 12:57:22 +02:00
hl-valdemar 39efa96986 ui: match empty player styling to playback controls 2026-10-12 12:39:42 +02:00
hl-valdemar 1e75f554f0 fix: allow compact mode while media is loading 2026-10-12 12:18:11 +02:00
hl-valdemar f495c8b719 feat: animate compact window transitions 2026-10-12 10:38:59 +02:00
hl-valdemar 8eba97579f refactor: concentrate playback transition ownership 2026-10-12 00:58:23 +02:00
hl-valdemar cc99a2a4f8 feat: report authoritative playback progress from shared backend 2026-10-11 21:34:08 +02:00
hl-valdemar 41e4a458cf feat: configure explicit state-dependent player keybindings 2026-10-11 17:02:15 +02:00
hl-valdemar 722a225da5 feat: load optional XDG TOML configuration with session overrides 2026-10-11 15:03:20 +02:00
hl-valdemar 0dce073287 feat: add independent CLI launches and preserve shared video bookmarks 2026-10-11 14:13:05 +02:00
hl-valdemar 537e8e2624 fix: avoid unbounded HTTP throttling and make buffer readout opt-in 2026-10-11 12:12:36 +02:00
hl-valdemar 13554a1574 feat: retain streaming media and add opt-in automatic quality 2026-10-11 11:52:24 +02:00
hl-valdemar 041d2b0644 fix: make buffered time visible in both player modes 2026-10-11 10:58:28 +02:00
hl-valdemar 5087a0a0f0 feat: visualize retained network playback buffer 2026-10-11 03:15:38 +02:00
hl-valdemar 4d4c3e6b0a feat: choose YouTube quality with a 1080p default 2026-10-11 02:54:01 +02:00
hl-valdemar 5f0287f489 fix: preserve app identity through FFmpeg preflight 2026-10-11 02:25:25 +02:00
hl-valdemar cf24a0fc4f fix: respond to macOS system playback controls 2026-10-11 01:51:59 +02:00
hl-valdemar 230949bb95 feat: add a native CLI launcher for local and YouTube playback
Build .build/terebi beside the app. Parse a single local file or YouTube URL, --url, --, and help; reject invalid commands before GUI launch. Resolve the adjacent app through symlinks and launch through NSWorkspace, reusing its process/window and saved progress.

Launch the app without media before delivering URL events. Raw media argv suppress SwiftUI's initial singleton window. Own warm document and internet Apple events because SwiftUI's default external-event routing closes that window; retain initial Finder document delivery to create it.

Verified actual CLI 0/64/69 exit behavior, PATH/symlink discovery from another directory, cold local/YouTube playback, warm local/YouTube replacement in the same native window/process, resume, Finder-style cold launch, and make all check.
2026-10-11 00:45:24 +02:00
hl-valdemar 0411064f0c feat: remember playback progress across player restarts
Persist authoritative per-video positions in UserDefaults. Save periodic checkpoints, pause, close, replacement, and quit; restore a validated position before autoplay. Canonical YouTube webpage URLs survive fresh stream extraction, and local symlinks share file progress.

Clear completed or out-of-duration bookmarks. Leave failed opens and live/non-seekable inputs out of persistence. Pending opens hide errors belonging to the previous source.

Verified separate-process restart, source replacement, failed-open recovery, completion, checkpoints, real YouTube short-link resume, live exclusion, and make all check.
2026-10-10 23:44:48 +02:00
hl-valdemar 5bc0d81bbf fix: keep initial playback focus off the titlebar pin
Restore the playback window as first responder after initial setup and after file/YouTube dialogs return. Keep native control focus indicators and Tab navigation unchanged.

Verified hidden native window focus, both dialog cancellations, explicit control focus, Tab navigation, P shortcut, app build, and compact-window checks.
2026-10-10 23:21:26 +02:00
hl-valdemar 8fb08db6f3 feat: stream YouTube video with coordinated audio and video inputs
Resolve public YouTube URLs through external yt-dlp and play selected streams in the existing native window.

Independent bounded network readers keep one authored timeline. Successful seeks clear FFmpeg's sticky aborted-read AVIO error; manifest seekability uses native format flags rather than a top-level I/O handle.

Verified real YouTube playback, seeking, frame stepping, compact mode, cancellation, and the complete native regression checks.
2026-10-10 23:02:19 +02:00
hl-valdemar a6bebb05c0 feat: replace normal fullscreen control with compact-mode button 2026-10-10 22:05:54 +02:00
hl-valdemar fa66020951 feat: add same-window compact playback with magnetic snapping 2026-10-10 21:34:08 +02:00
hl-valdemar 681a7be6f7 chore: rename project and app to terebi 2026-10-10 20:32:14 +02:00