Commit Graph
773 Commits
Author SHA1 Message Date
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
edde746 e489a97847 fix: throttle demuxer-cache-time updates 2026-02-26 13:12:25 +01:00
edde746 2b5923d80b feat: square art in hero sections 2026-02-26 13:00:55 +01:00
edde746 a56ef0e3ca fix: throttle cache state parsing 2026-02-26 12:28:42 +01:00
edde746 8eda892b68 feat: themed splash screen with status messages 2026-02-26 11:55:45 +01:00
edde746 4b6c82b071 fix: hide alpha jump bar for small libraries 2026-02-26 11:55:45 +01:00
edde746 a5fa8a4c99 fix: don't clear buffer state on playback restart 2026-02-26 11:55:45 +01:00
edde746 a38aac7829 fix: artwork changing not working
- Use PUT instead of POST and singular element path (art/poster) to
  match Plex Web API behavior
- Set content type to application/octet-stream for binary uploads
- Add GestureDetector for mouse/touch tap support in artwork picker
- Always refresh detail screen metadata after returning from edit
2026-02-26 11:55:45 +01:00
edde746 414e5804eb feat: add hide spoilers setting for unwatched episodes 2026-02-26 11:55:45 +01:00
edde746 a32422bb5e chore: remove unused formatRelativeTime 2026-02-26 04:30:48 +01:00