edde746
fff559da06
feat(music): add music data layer for plex and jellyfin
...
Backend-neutral fetchArtistAlbums/fetchAlbumTracks/fetchInstantMix/
fetchLyrics, lyrics model + LRC parser, audio quality presets, music
transcode (plex /music universal, jellyfin audio PlaybackInfo profile),
station/InstantMix radio, music search, playlist type derivation, and
audio download resolution.
2026-07-05 15:55:52 +02:00
edde746
31e8c2e1e0
fix(plex): coerce PlexHomeUser fields against account-API drift
...
Same clients.plex.tv surface that broke in #1488 : /home/users powers
first sign-in and profile setup, so a drifted scalar shape would kill
the whole fetch. Coerce strings, bools, and ints tolerantly instead of
hard-casting.
2026-07-05 06:23:41 +02:00
edde746
96510f8aac
fix(plex): tolerate account-API schema drift in profile and switch parsing
...
Around July 3 plex.tv started returning the profile language-list fields
(defaultAudioLanguages, defaultSubtitleLanguages, mediaReviewsLanguages)
as comma-separated strings instead of arrays. The generated cast threw on
the successful 201 /switch response, dropping the freshly minted Home
user token: every rebind failed, the binder retried a /switch mint every
1-2s, and the app sat permanently in offline mode even after re-signing
in. Accounts without language prefs set were unaffected, which is why
the breakage looked sporadic.
Parse the language lists with a CSV-aware coercion, and make
UserSwitchResponse.fromJson strict only about authToken: decorative
fields now coerce tolerantly and a broken profile blob falls back to
defaults, so account-API drift can never brick token minting again.
close #1488
2026-07-05 06:23:34 +02:00
edde746
d80a1ed15a
feat: report real device identity to media servers
...
Resolve platform, hardware model, and friendly device name once via a
shared DeviceIdentityService and send them to both backends: Plex gets
a real X-Plex-Platform plus X-Plex-Device/X-Plex-Device-Name (shown as
Player in dashboards/Tautulli), Jellyfin gets the device name in the
MediaBrowser auth header. Transcode and live-TV decision requests keep
their pinned platform names, which Plex validates server-side.
close #1270
2026-07-05 01:22:20 +02:00
edde746
a5e422d284
fix(trackers): parse new Fribb imdb_id/themoviedb_id shapes
...
close #1402
2026-06-22 23:58:17 +02:00
edde746
cceba28d0a
fix(i18n): request localized Plex labels
...
close #1311
2026-06-12 07:59:35 +02:00
edde746
38afdab2e4
fix: support mx player variants
...
close #1304
2026-06-11 08:35:19 +02:00
edde746
4c4b18e2cd
fix(i18n): localize hardcoded UI strings
...
close #1257
2026-06-06 11:45:34 +02:00
edde746
74b8dc4561
refactor: type server identifiers
2026-06-01 11:06:03 +02:00
edde746
9825ce3c7c
fix: select first playable Plex Part instead of always Part[0]
...
close #1201
2026-05-30 21:37:01 +02:00
edde746
56cfb95af5
fix(playback): apply default quality to jellyfin
...
close #1150
2026-05-27 00:02:23 +02:00
edde746
29e0654d47
fix(windows): launch VLC from default install path
...
close #1085
2026-05-20 20:16:34 +02:00
edde746
87db591792
feat(livetv): group guide by source
2026-05-17 06:41:47 +02:00
edde746
3798a0c332
fix(ci): update generated tracker mapping
2026-05-16 21:55:18 +02:00
edde746
3e74937386
feat(trackers): sync anime watch state by episode
2026-05-16 20:54:39 +02:00
edde746
8f9947a874
fix(trackers): use catalog totals for anime completion
...
close #1025
2026-05-13 15:07:19 +02:00
edde746
126e6b9349
fix(trackers): sync scoped anime progress
2026-05-13 14:10:01 +02:00
edde746
0e296f8659
fix(livetv): show guide without favorites
2026-05-13 09:22:17 +02:00
edde746
d0bd919ff4
refactor: migrate models to freezed + json_serializable
2026-05-11 12:54:26 +02:00
edde746
f9615491b3
refactor(media): migrate media item to freezed
2026-05-11 07:01:46 +02:00
edde746
91c23786f2
refactor: reduce model and focus boilerplate
2026-05-06 00:26:44 +02:00
edde746
ed4be7b96d
refactor: strip obvious comments
2026-05-04 22:40:18 +02:00
edde746
720d0d2604
feat(livetv): add DVR and recording support
2026-05-04 09:31:53 +02:00
edde746
9bd5732f2b
chore: clean up redundant comments
2026-05-01 05:02:26 +02:00
edde746
31d2d9dc98
feat: jellyfin
2026-05-01 01:20:36 +02:00
edde746
19a0128363
feat(playback): add ArtCNN shader presets
...
close #924
2026-04-26 20:29:38 +02:00
edde746
8c8fc13baf
fix(playback): skip deleted/inaccessible Plex media versions before play
...
close #919
2026-04-26 18:12:30 +02:00
edde746
87696d77d1
refactor(models): json_serializable for 9 manual fromJson models
2026-04-25 12:52:43 +02:00
edde746
0dbcda25e7
refactor(models): json_serializable for plex_filter
2026-04-25 12:45:54 +02:00
edde746
feba5b6f74
lint: enforce unawaited_futures, prefer_final_locals, etc.
2026-04-25 12:27:28 +02:00
edde746
e4e8299981
refactor: showLoadingDialog helper, json_serializable for plex_home
2026-04-25 03:25:09 +02:00
edde746
2b59de91c7
chore: dart format
2026-04-24 14:19:07 +02:00
edde746
bf2584d90f
feat: per-tracker library whitelist/blacklist
...
close #917
2026-04-24 10:30:16 +02:00
edde746
1582fdbd5b
feat: mal/anilist/simkl progress sync
...
close #914
2026-04-24 08:29:49 +02:00
edde746
431c20f817
feat: match/unmatch metadata
2026-04-23 19:02:14 +02:00
edde746
c10cf55f2d
feat: transcoding
2026-04-22 21:07:12 +02:00
edde746
ee020d81bd
refactor: trakt/download hardening and cleanup sweep
2026-04-21 13:57:03 +02:00
edde746
fd898e0567
fix: json parse safety, stop mutating input maps
2026-04-21 12:03:32 +02:00
edde746
5937e5c721
refactor: extract shared mixins and helpers to dedupe
2026-04-20 21:25:50 +02:00
edde746
1fd415ae31
feat(android): display switch delay
...
close #894
2026-04-20 17:34:54 +02:00
edde746
ff2928b18f
feat: trakt integration
...
close #617
2026-04-19 11:31:27 +02:00
edde746
3da51f9d64
chore: pre-commit ci hook, dart format
2026-04-18 12:40:35 +02:00
edde746
2e429840d2
fix: fan out multi-airing EPG metadata
...
close #563
2026-04-17 03:36:27 +02:00
edde746
360741674d
feat: sync rules for downloads
...
close #867
2026-04-16 12:52:48 +02:00
edde746
c369f2c3d7
refactor: remove dead code across codebase
2026-04-16 08:14:42 +02:00
edde746
65e22fbbbd
refactor: remove dead download code
2026-04-16 07:27:05 +02:00
edde746
d093023ce7
feat: replace QR remote pairing with encrypted LAN discovery
...
Replace session ID + PIN auth with HKDF-derived home secret and
per-session AES-256-GCM encrypted channel. Auto-start remote server
on host devices, auto-discover hosts via authenticated UDP broadcast.
2026-04-14 12:33:40 +02:00
edde746
1b2ecd9de4
fix: standardize bool parsing with flexibleBool helper
...
close #844
2026-04-11 21:22:15 +02:00
edde746
91d191b3d8
fix: file info bitrate units, multi-track display, tv scrolling
...
close #840 , close #841
2026-04-11 08:04:12 +02:00
edde746
c034f9b66e
fix: request utf-8 encoding for external subtitles
...
close #817
2026-04-07 18:34:47 +02:00