Commit Graph

234 Commits

Author SHA1 Message Date
Jonathan Sykes
6cb00d5073 Add per-file asset hashes and a rollback-compatible server manifest 2026-10-07 22:57:41 +08:00
Jonathan Sykes
be1d939afd Merge branch 'codex/prewarm-next'
# Conflicts:
#	frontend/index.html
2026-10-07 22:44:11 +08:00
Jonathan Sykes
d65b9e032a Prewarm upcoming queue streams 2026-10-07 16:30:15 +08:00
Jonathan Sykes
fcd98b6a4d Add queue prewarm candidate selection 2026-10-07 16:30:01 +08:00
Jonathan Sykes
233bf94e4c Pause non-playback UI timers while the page is hidden 2026-10-07 03:30:57 +08:00
Jonathan Sykes
722df3125f Add visibility-aware interval helper 2026-10-07 03:30:22 +08:00
Jonathan Sykes
2e58924971 Add shell consistency test between index.html and the service worker 2026-10-07 03:29:24 +08:00
Jonathan Sykes
2b286ae146 Stop the last song from restarting and freezing service-mode lyrics 2026-10-07 02:12:07 +08:00
Jonathan Sykes
128f8e95e3 Respect the notch in the Framework7 top bar, sidebar and full sheet 2026-10-06 09:16:49 +08:00
Jonathan Sykes
63ff2173d8 Lift player to body for iOS fullscreen so the app never shows around it 2026-10-06 09:14:06 +08:00
Jonathan Sykes
a143c8331d Stop video seek loop when returning from background 2026-10-06 09:14:06 +08:00
Jonathan Sykes
3be7a7b194 Fix fullscreen fit gesture clash and double swipe-remove in Framework7 layout 2026-10-06 04:19:01 +08:00
Jonathan Sykes
605d21a3e2 Use native icons in the Framework7 sidebar 2026-10-06 04:13:55 +08:00
Jonathan Sykes
cc4fb0d5c9 Simplify fullscreen playback controls 2026-10-06 04:12:28 +08:00
Jonathan Sykes
af38affdbe Make fullscreen video fill the viewport 2026-10-06 04:12:25 +08:00
Jonathan Sykes
034b3df7ae Complete Framework7 swipe gestures 2026-10-06 04:12:15 +08:00
Jonathan Sykes
d4497b0c05 Restyle the Framework7 layout 2026-10-06 04:12:09 +08:00
Jonathan Sykes
a81f4ffa51 Refine fullscreen control overlay 2026-10-06 02:32:43 +08:00
Jonathan Sykes
1cad18826b Fill viewport in fullscreen playback 2026-10-06 02:32:36 +08:00
Jonathan Sykes
1ba3f8704b Style Framework7 swipe layout 2026-10-06 02:32:36 +08:00
Jonathan Sykes
0bda242a98 Add Framework7 Swipe layout with swipeout rows, up-next sheet and mini-bar gestures 2026-10-06 02:01:56 +08:00
Jonathan Sykes
1754933f7e Polish Bento scrolling and controls with full screen coverage 2026-10-04 23:44:51 +08:00
Jonathan Sykes
4e5b1584c6 Restore Bento theme integration lost during recovery 2026-10-04 22:47:33 +08:00
Jonathan Sykes
9589c38773 Apply Bento tiles to Settings, sheets and empty states 2026-10-04 22:46:23 +08:00
Jonathan Sykes
3baf67349f Bring Bento playback and Service mode into the new theme 2026-10-04 22:44:54 +08:00
Jonathan Sykes
e100d47143 Style Bento library rows and download recovery controls 2026-10-04 22:42:22 +08:00
Jonathan Sykes
838798ca9b Build the new Bento Hub shell and browsing tiles 2026-10-04 03:09:15 +08:00
Jonathan Sykes
04b620e3c7 Polish download action buttons in Classic and Glass Stage 2026-10-04 02:48:08 +08:00
Jonathan Sykes
2042c9b6fc Recover related videos with bounded discovery and retryable fallbacks 2026-10-04 02:42:02 +08:00
Jonathan Sykes
df4acfc9f1 Keep iPhone audio playing through background handoffs 2026-10-04 02:29:10 +08:00
Jonathan Sykes
536555e12d Add selectable fullscreen orientation and an iPhone landscape overlay 2026-10-04 02:26:54 +08:00
Jonathan Sykes
25ae810463 Glass Stage: float the section rail again, centred above the mini player 2026-10-04 02:17:48 +08:00
Jonathan Sykes
49ba470740 Keep the Glass Stage notes toolbar on one row at every player width 2026-10-03 21:58:03 +08:00
Jonathan Sykes
3c0adb2577 Keep Glass Stage section navigation and panel content clear of playback chrome 2026-10-03 21:45:34 +08:00
Jonathan Sykes
90ef21297a Keep resume preparation and final verification outside connection timeouts 2026-10-03 20:49:08 +08:00
Jonathan Sykes
d78b06ff4b Close unconfirmed transfer paths and reject binary signalling envelopes 2026-10-03 20:45:04 +08:00
Jonathan Sykes
5661eea6e6 Preview compatible fragmented MP4 transfers while saving the verified copy 2026-10-03 20:43:03 +08:00
Jonathan Sykes
795a5aaed4 Prefer direct copies for playback, saves and exports within verified device groups 2026-10-03 20:38:51 +08:00
Jonathan Sykes
08ff8398b5 Transfer saved songs directly between paired devices with resumable OPFS writes 2026-10-03 20:32:45 +08:00
Jonathan Sykes
88e2e67eeb Authorize direct file invitations within paired rooms and parties 2026-10-03 20:26:07 +08:00
Jonathan Sykes
d93fc0d70f Use Glass Stage icons for playlist and offline controls 2026-10-03 20:14:19 +08:00
Jonathan Sykes
79a3c28c8e Center Glass Stage tab icons above their labels 2026-10-03 20:11:10 +08:00
Jonathan Sykes
5e78374efb Explain save failures and keep download diagnostics available 2026-10-03 19:23:07 +08:00
Jonathan Sykes
f341b0c76e Restart failed saves through a guarded server retry 2026-10-03 19:16:08 +08:00
Jonathan Sykes
cdc367a972 Restore the playing playlist when returning to Now Playing 2026-10-03 18:28:58 +08:00
Jonathan Sykes
f2c9459a54 Unify Glass Stage navigation and page controls with Now Playing 2026-10-03 18:19:56 +08:00
Jonathan Sykes
8ea92c1aac Report phone playback metadata once per browser session 2026-10-03 17:56:01 +08:00
Jonathan Sykes
9e960cf70f iPhone background audio in every playback mode; Classic playlist card actions; export sheet bar
- Dual mode (separate video + audio, used by adaptive streams and the iPhone EQ
  copies): going to the background now makes the audio the master, so progress,
  Now Playing and auto-advance keep working while iOS has the video suspended
  (the paused video used to be the only source of "ended", so playback stopped
  after the current song). The picture is re-synced on return.
- A track that starts while the app is in the background (auto-advance, the
  lock-screen Next button) starts as audio — iOS will not start a <video> there —
  and gets its picture back at the same position when the app returns.
- The handoff also runs on pagehide and when iOS pauses the master video while
  the page is hidden, for when visibilitychange arrives too late.
- Classic: playlist cards place their three actions as a 2x2 block (note + add
  on top, remove below) instead of the note button wrapping to the bottom-left.
- Save to this device: hide the full progress bar once the file is ready; it
  read as a squashed, broken button above "Save to Photos / Files".
2026-10-03 17:46:23 +08:00
Jonathan Sykes
ca836e0cd2 Align saved video actions and confirm storage removal 2026-10-03 16:10:46 +08:00
Jonathan Sykes
cf9b6f4133 Clarify download states and make the empty page useful 2026-10-03 16:05:42 +08:00