edde746
34252b9ba7
fix: persist aspect ratio and shader settings
...
Closes #602 , closes #603
2026-03-02 18:19:46 +01:00
edde746
8d3f448fdf
feat(macos): add picture-in-picture support
2026-03-02 18:19:36 +01:00
edde746
7ebbfb9ef7
fix(i18n): add missing pip keys
2026-03-02 14:31:40 +01:00
edde746
a008f86ee2
feat(ios): add picture-in-picture support
...
close #44
2026-03-02 14:06:11 +01:00
edde746
5f1c51ff6c
fix: skip specials in playback order
...
close #601
2026-03-02 07:32:20 +01:00
edde746
229d6b24e1
feat: crash log reporting
2026-03-02 07:29:21 +01:00
edde746
36277076bd
fix(android): cap demuxer buffers + sync mpv dispose
2026-03-02 02:30:48 +01:00
edde746
f96ef0740d
fix(android): move JSON parsing off main thread
2026-03-02 02:24:08 +01:00
edde746
0dbba6439d
fix: hide hero carousel indicators in dpad mode
...
close #600
2026-03-02 01:50:51 +01:00
edde746
9c7cb7439f
feat: add winget package manager support
2026-03-01 13:11:11 +01:00
edde746
3bf7ff3d48
feat: improve LiveTV guide visual contrast and polish
...
close #494
2026-03-01 12:24:56 +01:00
edde746
138c8f9fd8
feat: auto picture-in-picture
...
close #527
2026-03-01 10:52:31 +01:00
edde746
796db94896
remove unused sliver_adaptive_media_builder
2026-03-01 10:08:17 +01:00
edde746
d1dacae581
feat: show server name in search results
...
close #515
2026-03-01 09:24:53 +01:00
edde746
a62a01b9c3
feat: bridge ExoPlayer logs to Dart + device info in logs screen
...
ExoPlayerCore emitLog() forwards native diagnostics (init, tracks,
tunneling, watchdog, errors, framerate, audio focus) to Dart via the
existing log-message event when debug logging is enabled. URIs are
redacted before forwarding. setLogLevel method channel wires into the
existing debug toggle in video_player_screen.
Logs screen now shows a device info header (app version, OS, model,
TV mode) and includes it in copy/upload output.
2026-03-01 04:59:35 +01:00
edde746
d0f2122944
feat: add tunneled playback setting + frame watchdog for HDR black screen
...
Adds a user-facing toggle for MediaCodec tunneling (Android/ExoPlayer)
and a rendered-frame watchdog that auto-falls back to MPV when ExoPlayer
produces 0 video frames after 8 seconds of audio playback.
2026-03-01 04:02:36 +01:00
edde746
5dfc5af4c5
fix: only blur episode thumbnails
...
close #595
2026-03-01 03:01:22 +01:00
edde746
8a5f1ddea9
feat: add audio normalization toggle (MPV loudnorm filter)
2026-03-01 02:49:48 +01:00
edde746
bbfe7cf783
fix: use explicit mediacodec hwdec chain on android
2026-03-01 02:46:50 +01:00
edde746
b78bc3e869
fix: only show timeline thumbnail on direct timeline interaction
2026-02-28 19:48:46 +01:00
edde746
0e84ce9166
fix: desktop context menu overflow
2026-02-28 15:00:59 +01:00
edde746
9f81671603
fix: suppress repeated android log spam from MPV surface and stats polling
...
- Deduplicate android-surface-size updates with lastSurfaceSize cache
- Short-circuit ensureFlutterOverlayOnTop after initial application
- Remove deprecated cache-used property query
- Skip unavailable MPV properties on Android (display-fps, HDR metadata)
- Gate video-dependent stats queries behind hasVideo check
2026-02-28 15:00:29 +01:00
edde746
15e1f0b9e2
fix: use mediacodec on android
...
close #593
2026-02-28 12:35:43 +01:00
edde746
08399e5d37
feat: respect server collection mode in library browse
...
close #580
2026-02-28 07:06:48 +01:00
edde746
48c9dcae1b
fix: apply hide spoilers setting to hero section
...
close #588
2026-02-28 06:18:11 +01:00
Micah Morrison
5986ac6c79
Adjust expander pill alignment with text when small
2026-02-27 22:40:24 -05:00
Micah Morrison
c02f84dba0
Merge remote-tracking branch 'upstream/main' into feature/expand-episodes
2026-02-27 16:47:51 -05:00
edde746
a6119414ca
Merge branch 'fix-plex-notifications'
2026-02-27 22:20:12 +01:00
edde746
4929e7d42b
fix: hardcode app name in connection probe headers
2026-02-27 22:19:24 +01:00
edde746
18614022c0
feat: auto-dismiss skip segment buttons
...
closes #584
2026-02-27 22:13:03 +01:00
edde746
389a9622c3
fix: prevent OOM crash from infinite focus reclaim loop
...
Add re-entrancy guard to VideoPlayerScreen._onScreenFocusChanged()
and replace busy-wait spin loop with Completer in MediaDetailScreen.
2026-02-27 21:23:31 +01:00
edde746
3103cb5ee1
fix: harden offline playback and exoplayer fallback
2026-02-27 21:02:30 +01:00
edde746
7a0a911cd9
fix: prevent ASS subtitle stretching
...
close #579
2026-02-27 20:33:48 +01:00
edde746
03d62d2e2b
fix: handle corrupted download paths missing leading slash
2026-02-27 19:05:05 +01:00
edde746
5ff5441baa
fix: map ssa subtitle codec to .ass extension
...
close #569
2026-02-27 16:51:49 +01:00
edde746
00667fe8b8
fix: add const constructors and remove unused imports
2026-02-27 15:43:34 +01:00
edde746
ab2f8cf6ff
fix: normalize corrupted download paths on startup
2026-02-27 15:43:34 +01:00
edde746
edb285a279
feat: cache BIF file for instant preview thumbnails
...
close #565
2026-02-27 15:30:29 +01:00
edde746
11377362cb
fix: duplicate hero tag error in logs upload dialog
2026-02-27 15:26:49 +01:00
edde746
1cdf1890cf
fix: download playback issues (doubled path, audio language, spinner)
2026-02-27 15:26:49 +01:00
edde746
9e0c3e7b68
fix: improve delete-from-server button safety
...
Rename "Delete" to "Delete from server" with distinct icon and
always-red styling to prevent accidental server deletions.
Closes #568
2026-02-27 14:49:47 +01:00
edde746
7f03c15779
fix: restore FocusTheme import in libraries screen
2026-02-27 12:53:21 +01:00
edde746
cc30bee83a
refactor: extract FocusableActionBar widget for reusable app bar actions
...
Replace duplicated focusable action button pattern across 8 screens with
a shared FocusableActionBar widget that handles focus nodes, D-pad
navigation, back key, and focus decoration automatically.
2026-02-27 11:55:19 +01:00
edde746
8559037a50
fix: logs screen d-pad navigation
2026-02-27 11:37:11 +01:00
edde746
732c09eec1
fix: cancel status stream subscription on dispose
...
Closes #571
2026-02-27 09:11:16 +01:00
edde746
602982d426
fix: remove low memory warnings during playback
...
Closes #576
2026-02-27 08:53:38 +01:00
edde746
7472e3a2f7
fix: broken imports
2026-02-26 14:57:37 +01:00
Matt Vogel
6eeb484c30
Pass persistent client UUID through auth screen login path
...
The auth screen was calling connectAndInitialize without a clientIdentifier,
causing MultiServerManager to fall back to a throwaway timestamp ID for all
probe requests during first login. This meant Plex registered a new device on
every login, not just the first ever install.
2026-02-26 08:21:06 -05:00
Matt Vogel
e9218e0a3d
Fix duplicate Plex notifications and Flutter app name on login
...
Connection probe requests in testConnectionWithLatency were sent without
X-Plex-Client-Identifier, X-Plex-Product, or X-Plex-Device-Name headers.
Plex treated each anonymous probe as a new unknown device and fired a
"New Device" notification for every server tested (one per shared/owned
server), while displaying "Flutter" as the device name from the HTTP
user-agent.
Pass clientIdentifier through findBestWorkingConnection and all connection
test helpers so every probe request identifies itself as "Plezy" with the
persistent client UUID. This prevents spurious notifications and ensures
the device shows the correct app name in Plex's device list.
https://claude.ai/code/session_01V5VraujkNmk5GGPLyZ33fN
2026-02-26 08:21:06 -05:00
edde746
4588457319
refactor: consolidate files
2026-02-26 13:41:51 +01:00