47d968eeea
fix: review round 4 — an account switch unloads as the old account, a share link's lockout costs five networks
peter2026-09-15 02:53:22 +02:00
e7f38396a2
fix: review round 3 — a new tab keeps its account's notices, a revoked tab account lands on the default
peter2026-09-15 02:25:00 +02:00
f569b19c49
fix: review round 2 — a signed-out tab acts as nobody, honest share-page failures
peter2026-09-15 01:35:25 +02:00
e795d191c5
fix(boot): review round 1 — reconcile the tab pin, one loading clock, honest probe failures
peter2026-09-15 00:53:15 +02:00
4ad7183102
feat(players): keep a video playing in the background on Brave iOS; repeat on the watch page
peter2026-09-14 23:58:30 +02:00
2c3aaec62d
feat(watch): prototype background sound for a shared video on iPad (dev only)
peter2026-09-14 23:40:51 +02:00
70598d47a3
fix(dev): proxy the messages WebSocket through Vite, which stops a reset killing the dev server
peter2026-09-14 23:08:41 +02:00
5858e7b513
test(e2e): run the net on WebKit and an iPad profile; opt the account out of Home
peter2026-09-14 22:29:33 +02:00
5346efcd10
fix(boot): a new tab knows its account before anything renders
peter2026-09-14 22:29:33 +02:00
6169e32ca5
fix(downloads): a signed-in Facebook reel keeps its title, and an mp3 stays an mp3
peter2026-09-14 17:46:46 +02:00
4c7ab12a3e
release: 0.85.0 — E11 Power Navigation
peter2026-09-13 21:02:22 +02:00
c6b552e75f
fix(keys): epic-end review round 3 — the part-way clip count shows, busy buttons keep focus, cards say their names
peter2026-09-13 20:47:13 +02:00
3cd0c525e2
fix(keys): epic-end review round 2 — focus comes back to the card, the right rail and the reason
peter2026-09-13 19:18:04 +02:00
f130a1c05a
fix(keys): epic-end review round 1 — Back, menus and dialogs keep the focus where it belongs
peter2026-09-13 17:17:49 +02:00
bbd31c7143
feat(keys): Back returns focus to the item a view was opened from; "Feed" everywhere; every backend id named
peter2026-09-13 07:36:41 +02:00
8731508645
feat(keys): the conversation list walks with j/k; the cheat sheet names keys in the reader's language
peter2026-09-13 07:00:51 +02:00
b5d37ca142
feat(keys): j/k and the arrows walk the channel, playlist and download lists
peter2026-09-13 06:08:05 +02:00
eb0507f942
fix(keys): a card reached by Tab rings the whole card, not just its poster
peter2026-09-13 05:47:43 +02:00
6d09b94bbb
feat(keys): j/k and the arrows walk Home's rails and every Plex grid and rail
peter2026-09-13 05:38:36 +02:00
5274216981
feat(ui): PageUp/PageDown page through every dropdown list, not just the palette
peter2026-09-13 05:20:53 +02:00
75d89613d0
feat(palette): PageUp/PageDown move a page of results at a time
peter2026-09-13 05:03:35 +02:00
8fb276aa90
feat(keys): j/k walk the feed, s finds the search box, g jumps to a module
peter2026-09-13 04:16:20 +02:00
78a9324381
fix(ui): the palette ranks what you typed, and lib stops leaning on components
peter2026-09-13 02:14:07 +02:00
8a50538275
fix(ui): a write that fails says what failed and why, wherever it fails
peter2026-09-13 01:45:28 +02:00
b4aea7fa5b
fix(ui): dialogs, menus and busy buttons keep the keyboard focus where it belongs
peter2026-09-13 01:04:11 +02:00
92c305bab9
fix(nav): a navigation closes every overlay before it pushes
peter2026-09-13 00:17:09 +02:00
8c51062e5b
fix(api,ui): the demo refusal says why at every site, and the contract guard cannot fail open
peter2026-09-12 16:22:27 +02:00
63bf1bca78
fix(plex): an accepted reorder refetches the detail it just wrote
peter2026-09-12 16:22:27 +02:00
c7a377396b
fix(ui): a closing dialog leaves the focus to the dialog standing above it
peter2026-09-12 16:22:06 +02:00
8036251589
fix(plex): the reclaim window rolls, and a refused finish is not performed through a third route
peter2026-09-12 16:21:51 +02:00
71d7646bf1
fix(plex): a name this session cannot write fails at once, and the layout has one spelling
peter2026-09-12 16:21:37 +02:00
3eb0f41962
fix(plex): a Plex reorder the server accepted is the order the cache holds
peter2026-09-12 05:50:40 +02:00
a0114deff1
fix(api,ui): a refused write says why, wherever the refusal happens
peter2026-09-12 05:50:31 +02:00
d89d887a9b
fix(plex): the reclaim budget bounds what it says it bounds, and a refused finish is not performed anyway
peter2026-09-12 05:50:11 +02:00
f8a31d48cf
fix(ui): a dialog keeps the focus it was given, and hands it back where it took it from
peter2026-09-12 05:49:58 +02:00
7f17b17c13
fix(plex): an HLS session's file names are one vocabulary, and a name it cannot produce fails at once
peter2026-09-12 05:49:38 +02:00
1f81684b6e
fix(ui,plex): a dialog keeps the focus its child asked for, and a hopeless segment fails at once
peter2026-09-12 04:31:51 +02:00
33fddacee2
test(plex): the over-long-name guard is asserted the same way on every OS
peter2026-09-12 04:18:35 +02:00
12121255dd
fix(playlists): a rejected reorder goes back to the order the server accepted
peter2026-09-12 04:15:15 +02:00
4a7b65d187
fix(api): a refused write is named, in the reader's language
peter2026-09-12 04:07:25 +02:00
47af4d5c05
fix(plex): an HLS artifact names the session it belongs to, and a paused viewer says so
peter2026-09-12 03:57:52 +02:00
8a83bc0e9f
fix(plex): a finished item is finished when the server says so, and a lost session is reclaimed a bounded number of times
peter2026-09-12 03:47:42 +02:00
41b652f8fd
fix(ui): a dialog opens focused where it said it would, and the wizard is a dialog
peter2026-09-12 03:41:37 +02:00
545996f807
fix(ui): a toast host ranks by when its overlay opened, and an overlay keeps its Escape, its dialog and its navigation straight
peter2026-09-11 23:43:23 +02:00
267fd7f70f
fix(playlists): a refused edit is taken back on screen, and a gone list or tag is said, not swallowed
peter2026-09-11 23:34:33 +02:00
6d49da17fe
fix(api): a write that hit a connection failure is still reported, and every failure is reported once
peter2026-09-11 23:27:08 +02:00
6a92585098
fix(plex): the player restarts a reaped session, finishes a played-through item as watched, and starts each item once
peter2026-09-11 23:18:33 +02:00
31dc4184f5
fix(api): a paused viewer keeps its HLS session, a refused subtitle publish backs off, and a NUL is a 422 everywhere
peter2026-09-11 23:08:11 +02:00
86971c574d
fix(api): progress checkpoints past the int4 column are a 422, and idle HLS sessions are reaped on a timer
peter2026-09-11 18:05:30 +02:00
785080f3da
fix(plex): a Surprise card whose watched toggle failed is put back
peter2026-09-11 18:05:30 +02:00
76b5f7c93e
fix(playlists): a failed background refetch keeps the list on screen, and the player outlives every branch
peter2026-09-11 18:05:19 +02:00
1cfe6a7f59
fix(api): a gone row and a refused playlist action are said in the reader's language, and a failure is reported once
peter2026-09-11 18:05:19 +02:00
33fe895539
fix(ui): every full-screen overlay hosts its own toasts, above the players' controls, without re-announcing them
peter2026-09-11 18:04:54 +02:00
5c5cabbe5a
fix(plex): the player drops a session answer that lands late, and Next neither loses nor lends a position
peter2026-09-11 18:04:41 +02:00
4f37c41021
fix(plex): a subtitle failure about one position no longer ends the track, and windows are read ahead and never wait behind a full pass
peter2026-09-11 18:04:30 +02:00
f7faa19ee2
fix(plex): the player starts, and resumes after a session-restart seek, when React mounts it twice
peter2026-09-11 03:47:36 +02:00
0b4b268678
test(feed): pin the sort options' default directions as literals
peter2026-09-11 03:19:17 +02:00
d349bc9084
fix(plex): a collection's failed watched toggle is put back the way it was
peter2026-09-11 03:19:17 +02:00
dcd8a9566a
fix(playlists): the player's Remove follows the list it was launched from, the player survives a change of selection, and a gone list is said in the reader's language
peter2026-09-11 03:19:07 +02:00
6de2cd950d
fix(ui): toasts raised while a full-screen player is open show inside it, not under its scrim
peter2026-09-11 03:18:55 +02:00
645d14f45d
fix(plex): a subtitle track's failed load is heard and retried with a pause, and the poll asks about the right item, position and failure
peter2026-09-11 03:18:42 +02:00
7360339039
fix(api): a non-finite number in a JSON body is refused with a 422, not a 500
peter2026-09-11 03:18:17 +02:00
473d9f02f2
fix(plex): subtitle windows land where the full pass does, and the extractor stops re-reading, respawning and outliving the process
peter2026-09-11 03:18:08 +02:00
d2e225666b
test(playlists): let react-query's notify tick run inside act before the reopen click
peter2026-09-11 01:42:17 +02:00
efd95fca01
fix(ui): the card's channel name is a real link too; call sites the bug hunt left untested now have tests
peter2026-09-11 01:38:31 +02:00
060deb89d2
fix(playlists): "remove" inside the player targets the list it came from, reports failure, and keeps the cursor and focus honest
peter2026-09-11 01:28:27 +02:00
4869d6c108
fix(player): the resume position reaches the playlist page and live search, not just the feed
peter2026-09-11 01:19:14 +02:00
d20317e0f1
fix(plex): the collection page's watched toggle and Sort control survive the sort joining the query key
peter2026-09-11 01:12:51 +02:00
d2ba65e383
fix(plex): the subtitle poll backs off on errors, a failed <track> is replaced, and a resume asks for the right window
peter2026-09-11 01:08:27 +02:00
cf7ec5e9ec
fix(plex): the subtitle extractor's seams — doubled cues, a truncated track cached as whole, a poll that respawned ffmpeg
peter2026-09-11 00:52:59 +02:00
f76a2afbf1
feat(ui): the four small gaps — player delete, repeat-move, a real channel link, YT search sorting
peter2026-09-10 22:34:12 +02:00
889d2acf52
feat(plex): the collection page sorts, and a linked collection has a name
peter2026-09-10 22:05:39 +02:00
782362b808
fix(channels): the video grid follows a running backfill instead of freezing until F5
peter2026-09-10 20:56:16 +02:00
5a42d76e8a
feat(plex): an off-by-default loudness normalisation toggle for playback
peter2026-09-10 20:02:06 +02:00
ed4ab4e13c
fix(plex): subtitles stop blocking the request, and stop re-reading the file
peter2026-09-10 19:31:05 +02:00
b8bff504d8
fix(plex): "Clear resume point" now tells Plex about an in-progress item
peter2026-09-09 23:55:51 +02:00
1630a3df3c
fix(player): the YT progress checkpoint reaches the cache, so a reopen cannot rewind it
peter2026-09-09 23:55:51 +02:00