edde746
1aa06ffe90
fix(tv): restore passthrough setting visibility
2026-06-15 13:28:38 +02:00
edde746
1b29cb3ef7
fix(player): apply stored passthrough setting
2026-06-15 13:28:23 +02:00
edde746
ba22dca9e5
fix(platform): gate audio passthrough support
2026-06-15 13:28:10 +02:00
edde746
b5a9f09f12
fix(player): wait for autoplay subtitle tracks
...
close #1348
2026-06-15 13:09:09 +02:00
edde746
8bf5dbb379
fix(player): resume mpv startup frame after subtitles
2026-06-15 12:06:04 +02:00
edde746
5fc599439e
fix(player): wire playback streams before open
2026-06-15 12:05:48 +02:00
edde746
27723e6f29
fix(video): sync first-frame background state
2026-06-15 12:05:29 +02:00
edde746
a4c444435f
fix(player): avoid overlapping performance stat fetches
2026-06-15 12:05:15 +02:00
edde746
6292685b5d
fix(player): fetch Android mpv stats off main thread
2026-06-15 12:04:58 +02:00
edde746
7195702242
fix(player): repair Plex transcode seeking
...
close #1341
2026-06-14 23:39:05 +02:00
edde746
01a5d11ef5
fix(jellyfin): use season episode endpoint
2026-06-14 18:34:12 +02:00
edde746
5e2bd4efa8
fix(video): release scrub chrome hold
...
close #1340
2026-06-14 18:34:12 +02:00
edde746
d6487e24c9
fix(tv): keep sidebar transparent
2026-06-14 14:53:56 +02:00
edde746
c404589382
style(native): fix formatting
2026-06-14 14:04:52 +02:00
edde746
f1689a7794
fix(tvos): keep audio passthrough opt-in
2026-06-14 13:49:57 +02:00
edde746
a861a4110f
feat(player): add mobile edge adjustments
2026-06-14 13:40:16 +02:00
edde746
e7809b3160
fix(player): harden pinch zoom activation
2026-06-14 11:08:14 +02:00
edde746
edd0618e64
fix: harden playback and discover state
2026-06-14 09:44:04 +02:00
edde746
849e62df7e
fix(jellyfin): honor continue watching action
...
close #1334
2026-06-14 07:25:40 +02:00
edde746
e1c0df3bd7
fix(ci): resolve sanity check failures
2026-06-14 06:55:58 +02:00
edde746
349b5b0513
fix(tv): stop playback behind menu
2026-06-14 06:27:00 +02:00
edde746
3ad049cb28
fix(player): clear stale mpv fallback switch
2026-06-14 00:27:41 +02:00
edde746
656cf1158b
fix(libraries): restore tvOS empty tab focus
...
close #1330
2026-06-14 00:05:44 +02:00
edde746
f3cb508649
fix(player): wait for mpv subtitles after load
...
close #1331
2026-06-13 23:52:19 +02:00
edde746
c39b5a5cf1
feat(player): show cache limit in perf overlay
2026-06-13 21:21:15 +02:00
edde746
9ff3099a9d
fix(player): update MPVKit and stream buffering
2026-06-13 20:51:14 +02:00
edde746
c24a2aade0
fix(images): preserve media image filter quality
2026-06-13 18:19:23 +02:00
edde746
8f862d1ca0
fix(jellyfin): sort series episodes
...
close #1329
2026-06-13 17:12:48 +02:00
edde746
b56608f94f
fix(media): show source rating badges on TV
...
close #1327
2026-06-13 15:58:36 +02:00
edde746
2876e1bf78
fix(media): catch menu client and refresh failures
2026-06-13 13:25:48 +02:00
edde746
ebd850b0d5
fix(profiles): guard pin dialog route pops
2026-06-13 13:25:41 +02:00
edde746
f3f962a7c9
fix(database): swallow legacy documents lookup failures
2026-06-13 13:25:34 +02:00
edde746
49ae1fdc34
fix(cache): use app-private image cache
2026-06-13 13:25:26 +02:00
edde746
dc769bda41
fix(android): fall back when cronet init fails
2026-06-13 13:23:41 +02:00
edde746
75ba6b0627
fix(player): isolate dispose teardown races
2026-06-13 13:23:29 +02:00
edde746
1e40d21bd8
fix(discovery): handle udp datagram socket errors
2026-06-13 13:23:22 +02:00
edde746
3c43874342
fix(tvos): update mpvkit audio passthrough
2026-06-13 10:24:15 +02:00
edde746
4f422f1485
fix(plex): persist transcode audio stream switches
...
close #1326
2026-06-13 10:15:08 +02:00
edde746
85d9b6ebab
fix(tvos): hide unsupported playback options
2026-06-13 10:13:02 +02:00
edde746
90662e2173
fix(player): scale mpv stream ring buffer for poorly interleaved mp4/mov
2026-06-12 22:21:17 +02:00
edde746
24980aff95
feat(subs): render resolution setting for the avfoundation VO
2026-06-12 21:05:28 +02:00
edde746
804261605b
docs(player): note live session and progress tracker client pinning
2026-06-12 17:12:25 +02:00
edde746
8a65c78999
fix(plex): retry related hubs and skip unchanged threshold mirror
2026-06-12 17:12:25 +02:00
edde746
979db254d1
perf(providers): delta-fetch newly-online servers instead of full refetch
...
Discover and libraries now fetch only the servers that came online since
the last pass and merge the results; already-loaded servers are not
refetched. Both providers also own their online-servers listener
(registered in the constructor, removed in dispose), so profile switches
no longer leak listeners that kept disposed providers refetching.
2026-06-12 17:12:18 +02:00
edde746
18ebe77806
fix(jellyfin): page show/season folder children incrementally
2026-06-12 17:12:09 +02:00
edde746
0de856e929
fix(settings): refuse overlapping runAsync at runtime
2026-06-12 17:12:03 +02:00
edde746
a6d82b4637
fix(livetv): stop abandoned sessions when a tune is superseded or unmounts
2026-06-12 17:11:58 +02:00
edde746
acfb79c857
refactor(livetv): tune protocol methods go private behind the session
2026-06-12 16:18:09 +02:00
edde746
dcfe0f8308
refactor(player): live playback drives LiveTvPlaybackSession
2026-06-12 16:15:20 +02:00
edde746
23a423fe85
refactor(livetv): playback session lifecycle behind LiveTvSupport
2026-06-12 16:06:12 +02:00
edde746
b2cb874b73
fix(discover): refresh content when a server comes online mid-session
2026-06-12 15:56:09 +02:00
edde746
f671f367ea
refactor(discover): DiscoverProvider owns hubs and continue-watching
2026-06-12 15:53:26 +02:00
edde746
665603b314
fix(jellyfin): bounded transient retry on hub surfaces
2026-06-12 15:33:58 +02:00
edde746
0d7dd093c4
fix(jellyfin): flip server status when all endpoints are exhausted
2026-06-12 15:26:39 +02:00
edde746
c849a213f0
refactor(net): shared FailoverHttpClient for both backends
2026-06-12 15:22:52 +02:00
edde746
49ff0854c0
refactor(profiles): profile-scoped provider subtree keyed by active profile
2026-06-12 14:44:10 +02:00
edde746
5047057521
test(cache): cover per-backend applyWatchState mutations
2026-06-12 14:35:50 +02:00
edde746
e28e2b9371
refactor(media): folder browsing via MediaServerClient interface
2026-06-12 14:33:38 +02:00
edde746
bb92b6083b
refactor(player): clarify requested vs session-effective media source id
2026-06-12 14:21:12 +02:00
edde746
acdae74587
refactor(offline): single connectivity subscription in OfflineModeProvider
2026-06-12 14:18:49 +02:00
edde746
5e4449247b
fix(downloads): inject visibility-aware client resolver
2026-06-12 14:16:24 +02:00
edde746
c2fe142293
refactor(watch): WatchActions owns mark-watched orchestration and events
2026-06-12 14:09:21 +02:00
edde746
431b0f9b0c
refactor(ui): shared watched indicator overlay
2026-06-12 13:56:47 +02:00
edde746
959e6e9398
refactor(watch): single watched-progress predicate
2026-06-12 13:49:46 +02:00
edde746
18e47d2327
refactor(ui): share android keyboard-mode system-back guard
2026-06-12 13:48:06 +02:00
edde746
b2e5e02204
refactor(library): reuse grid column formula in fetch-size estimate
2026-06-12 13:48:06 +02:00
edde746
e6a488a4e2
fix(settings): resolve tv-dependent defaults at read time
2026-06-12 13:45:37 +02:00
edde746
75d0164a8b
fix(offline): persist plex watched threshold for offline use
2026-06-12 13:43:29 +02:00
edde746
05251edaf3
fix(tv): close virtual keyboard when its text field unmounts
...
The keyboard is a navigator route, so a screen swapping out its form
left it floating over the new content. showTvVirtualKeyboard now
returns a route handle and the field host closes it on dispose.
2026-06-12 13:36:01 +02:00
edde746
892dfee381
fix(tv): keyboard no longer opens over jellyfin quick connect screen
...
Auto-starting quick connect from inside the probe's runAsync let the
probe's finally clear busy mid-initiate; the re-enabled form then took
focus fallback on the URL field, auto-opening the TV keyboard. Sequence
the two busy scopes and debug-assert against overlapping runAsync.
2026-06-12 13:35:55 +02:00
edde746
7f1eb3a818
fix(focus): back over a dialog no longer pops the underlying screen
2026-06-12 13:19:29 +02:00
edde746
bd0a0c5d6b
feat(android): loudness normalization for exoplayer via audiofx
...
close #1289
2026-06-12 12:38:57 +02:00
edde746
71b05fd4b2
fix(ui): unwatched count badge grows as pill, caps at 999+
...
close #1310
2026-06-12 09:11:56 +02:00
edde746
587609d7f6
fix(tv): hug poster with focus border and add focus glow toggle
...
close #1278
2026-06-12 08:50:29 +02:00
edde746
cceba28d0a
fix(i18n): request localized Plex labels
...
close #1311
2026-06-12 07:59:35 +02:00
edde746
03c623e8c7
perf(grids): rebuild media grids on width change, not every scroll tick
2026-06-12 07:18:34 +02:00
edde746
2b34f4a9d7
perf(tv): reduced visual-effects tier for low-end devices
2026-06-12 06:30:38 +02:00
edde746
ad3cc6b986
feat(player): language-first audio & subtitle track labels
...
close #1307
2026-06-12 04:16:39 +02:00
edde746
133db721a2
fix(livetv): auto-catch-up stale guide window to now
...
close #1297
2026-06-12 04:13:59 +02:00
edde746
a03d30fa45
fix(android): eliminate per-byte buffer ops in DV bitstream sanitizer
2026-06-12 04:05:35 +02:00
edde746
62abd3c30a
feat(jellyfin): simpler, code-first Quick Connect screen
2026-06-12 03:16:58 +02:00
edde746
97ba02f45e
fix: flashbang
2026-06-12 02:40:42 +02:00
edde746
0f1bf5e011
perf(jellyfin): skip per-folder user data in folder tree listings
2026-06-12 02:18:28 +02:00
edde746
d816d82a38
fix(folders): row context menus, dpad left to sidebar, faster Jellyfin listings
2026-06-12 02:00:42 +02:00
edde746
c89c88647e
fix(android): package libmpv's NDK r29 libc++_shared.so deterministically
2026-06-12 01:51:51 +02:00
edde746
3599b0b0e1
fix(startup): no-servers flash on fresh login + faster connect splash
...
- start binder before navigating from auth, mark isBinding synchronously
- overlap plex.tv resource refresh with optimistic cached-metadata connect,
reconcile tokens/membership in background once it lands
- cached endpoint probe gets a head start on the race instead of serially
blocking it
- defer phase-1 HTTPS upgrade off the splash critical path
- per-server connect progress stream for incremental splash checkmarks
- startup timing instrumentation (bind/fetch/race/connect elapsedMs)
2026-06-12 01:46:43 +02:00
edde746
1adb89c6b3
feat(android): frame-accurate libass pipeline + optimized native core
2026-06-12 01:45:19 +02:00
edde746
7ec1c2ebdc
fix(player): anchor libass overlay to video rect for correct zoom/cover positioning
2026-06-11 12:49:21 +02:00
edde746
7ec062deaf
fix(player): pinch zoom flicker from per-tick relayout and filter churn
...
close #1261
2026-06-11 12:29:34 +02:00
edde746
a5c7d5b52a
refactor(watch-together): host-authoritative declarative sync protocol
...
Replaces the imperative play/pause/seek/positionSync message soup with a
single host-authored PlaybackState (seq-ordered, anchor-extrapolated,
phase machine: loading/waitingForPeers/paused/playing) that doubles as
the heartbeat, plus guest status reports and host-applied control
requests. Fixes the guest seek-back loop while the host loads (readiness
was keyed on a pre-load !buffering snapshot and heartbeats broadcast
frozen positions), adds real group buffering coordination (stall grace,
scheduled simultaneous resumes, 15s safety timeout), rate-nudge drift
correction with passthrough-aware seek fallback, session-scoped message
handling (no lost messages during episode-switch detach gaps), and an
expected-state ledger replacing the racy remote-action flag.
2026-06-11 09:42:38 +02:00
edde746
e54bbd11f1
feat(player): passthrough state tracking + sync-layer position/passthrough getters
...
Includes the mpv passthrough rate-suspend wiring (passthrough cannot
scaletempo; suspended while rate != 1.0) that the new getters report.
2026-06-11 09:16:01 +02:00
edde746
38afdab2e4
fix: support mx player variants
...
close #1304
2026-06-11 08:35:19 +02:00
edde746
f214c50c15
fix(player): responsive double-tap skip stacking
...
single tap stacks while the skip pill is visible, feedback shows before
the seek (instant on transcode restarts), fade-out hide timer is tracked so
a re-shown pill isn't killed mid-spree, and tap pairing uses the platform
kDoubleTapTimeout
2026-06-11 07:15:31 +02:00
edde746
1fc081ed6b
fix(player): eager timeline scrub gesture and stable slider tree
...
close #1302
2026-06-11 07:15:31 +02:00
edde746
cbaed8cdfb
fix(livetv): tune current guide programs on tv
...
close #1298
2026-06-11 07:15:31 +02:00
edde746
1292d7ac34
fix(dovi): bump MPVKit to v1.0.2 for profile 8 DV hardware decode
...
close #1262
2026-06-10 20:26:11 +02:00
edde746
e75ab94eb9
fix(tv): make osk search key focus results
...
The TV keyboard dialog froze the field's callbacks at open time, so the
search screen's done key fell through to unfocus() once results arrived.
Resolve callbacks against the latest field widget at invoke time, and
give the search screen a TV submit handler that focuses the first result
or flushes the pending debounce.
2026-06-10 16:37:35 +02:00
edde746
804bea8e9a
fix(android): keep only the active dynamic HDR metadata in DV bitstreams
...
close #1296
2026-06-10 15:39:51 +02:00
edde746
0502dd7ba0
fix(discover): resolve hero watch state in build
2026-06-10 15:10:52 +02:00
edde746
3221a0cb1a
feat: add continue watching details navigation
...
close #1295
2026-06-10 12:50:32 +02:00