edde746
618251b8eb
fix(player): attach external subtitles during open
2026-06-15 17:21:08 +02:00
edde746
9437956b83
fix(livetv): keep timeline heartbeat on active endpoint
2026-06-15 14:59:06 +02:00
edde746
f602925896
fix(trakt): persist refreshed auth sessions
...
close #1347
2026-06-15 14:42:24 +02:00
edde746
1aecb9d2d2
fix(trakt): publish refreshed sessions
2026-06-15 14:42:18 +02:00
edde746
4a5731976a
refactor(platform): centralize Apple TV detection
2026-06-15 13:32:54 +02:00
edde746
8198ea9522
fix(android): wire ExoPlayer passthrough control
2026-06-15 13:31:42 +02:00
edde746
e069d30555
fix(android): block direct audio without passthrough
2026-06-15 13:28:54 +02:00
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