Commit Graph
609 Commits
Author SHA1 Message Date
zarzet 019257541b refactor(logging): rename Go-era log names to native
The log buffer polls the native backend, so isFromGo, the Go log polling
methods and their private state now use native names. Comments that still
described the backend as Go are reworded. No string literals changed.
2026-10-18 22:12:29 +07:00
zarzet e41e6ec432 test: share one FixedSettingsNotifier across tests
Replace 16 private SettingsNotifier fakes that only returned a fixed AppSettings with test/support/fixed_settings.dart. Mornye owner WIP tests and bespoke fakes are untouched.
2026-10-18 22:08:02 +07:00
zarzet 77c149eb20 test: skip the automix renderer test when ffmpeg is missing
Mirror the other ffmpeg-backed tests: skip instead of failing with a ProcessException on hosts without ffmpeg.
2026-10-18 22:08:02 +07:00
zarzet 25ad8b3c71 test: poll for cover eviction instead of asserting after one event-loop turn
Cover eviction deletes files without awaiting, so asserting right after one event-loop turn was timing dependent. Poll with a bounded timeout instead.
2026-10-18 22:08:02 +07:00
zarzet 7cef0700cc test: split models_and_utils_test by domain and isolate source contracts
The grab-bag file mixed model tests with tests that pin literal source
text across Dart, Kotlin and Swift. The contracts now live in
source_contracts_test.dart with a header explaining that they must be
updated, never deleted, when code moves. The remaining groups moved
verbatim into domain files.
2026-10-18 22:07:17 +07:00
zarzet 0539a12f99 ci: add a dart format gate and fix the one drifted test file
Format drift was unchecked in CI. Add the gate before analyze and include integration_test in the documented format commands.
2026-10-18 22:01:32 +07:00
zarzet 68c739dfa1 fix(equalizer): keep headroom and limiter choices when applying a preset
Applying a preset replaced every setting, so built-in presets silently
turned automatic headroom, the limiter and the compressor back on and
reset balance. Presets now carry only the curve, preamp, bass and treble.
The active preset is matched on the same fields, so it no longer shows as
Custom once headroom is off.
2026-10-18 20:58:36 +07:00
zarzet dbee3d56cb feat(player): search lyrics online for files without them
The empty lyrics page offers Search online, which asks the enabled lyrics
providers in their configured order. The result is shown in the player
only and never written to the file; a late result is dropped after the
track changes, and a miss says so.
2026-10-18 19:24:39 +07:00
zarzet 56ad01ec2c feat(lyrics): add lrc.red and BetterLyrics, split SpotiFLAC-Mobile Lyrics
Add two keyless providers that serve Apple Music TTML: lrc.red, matched by
recording, and BetterLyrics, which answers songs it has already cached.
TTML is read into the first-party Apple line structure, so vocal sides,
backing groups, word timing, translations and romanization share one eLRC
formatter. The XML depth guard moves to core so both readers use it.

SpotiFLAC-Mobile Lyrics becomes its own provider instead of a fallback
inside Apple Music. New defaults are Apple Music, lrc.red, SpotiFLAC-Mobile
Lyrics, LyricsPlus and LRCLIB. Migration 13 moves untouched defaults to the
new list and keeps the former fallback right after Apple Music in custom
orders. Replace the dead LyricsPlus Workers mirror.
2026-10-18 19:24:31 +07:00
zarzet 2ede99bef8 fix(player): restore the lighter full-screen cover scrim
Shade the app bar lightly and ease it out so white icons stay legible
without darkening the top of the cover.
2026-10-18 12:41:28 +07:00
zarzet 7c0b275f9f feat(onboarding): introduce the 5.2 release tour 2026-10-18 04:09:16 +07:00
zarzet 66d480dbdc fix(storage): retain legacy Android cipher migration support 2026-10-18 04:09:16 +07:00
zarzet 080df889d0 fix(library): recover missing local album artwork from audio 2026-10-18 04:09:15 +07:00
zarzet 759079517c fix(library): restore bit depth as the default quality badge 2026-10-18 03:11:54 +07:00
zarzet 4cee16e9e8 feat(home): localize greetings and address profile names 2026-10-18 03:11:44 +07:00
zarzet 1a6dc7366e feat(home): expose extension country settings and isolate regional caches 2026-10-18 03:11:33 +07:00
zarzet 2455cabced fix(haptics): analyze document audio across skips and AutoMix 2026-10-18 03:11:20 +07:00
zarzet f426b2d1f0 fix(player): report Android output failures without skipping tracks 2026-10-18 03:11:20 +07:00
zarzet 2782b1f7f2 feat(lyrics): refresh quote sharing and load lyrics on demand 2026-10-18 03:10:53 +07:00
zarzet bfd180909c refactor(explore): centralize persistent cache storage 2026-10-18 00:47:21 +07:00
zarzet 1b66bc469d perf(history): suppress unchanged membership notifications 2026-10-18 00:47:21 +07:00
zarzet 579ffae9c3 refactor(downloads): centralize failed session accounting 2026-10-18 00:47:21 +07:00
zarzet 1456d36a98 refactor(downloads): update queue items and indexes together 2026-10-18 00:47:21 +07:00
zarzet 4ab4e87c32 perf(history): reuse unchanged download lookup indexes 2026-10-18 00:46:53 +07:00
zarzet dea131778c refactor(playback): share lost route pause transitions 2026-10-18 00:46:53 +07:00
zarzet bbeca05a7a perf(releases): narrow weekly release provider dependencies 2026-10-18 00:46:52 +07:00
zarzet afab47ae4d perf(lyrics): cache timed lyric segment geometry 2026-10-18 00:46:52 +07:00
zarzet ad9b2b2ea5 refactor(extensions): share priority settings links 2026-10-18 00:46:52 +07:00
zarzet 12119530a7 refactor(library): share selection action grid layout 2026-10-18 00:46:52 +07:00
zarzet 50368012c0 refactor(settings): share selectable bottom sheet options 2026-10-18 00:46:51 +07:00
zarzet 08bc422634 perf(player): cache adjacent track titles during swipes 2026-10-18 00:46:51 +07:00
zarzet 181900a23a test(library): share re-enrichment settings fixtures 2026-10-18 00:46:10 +07:00
zarzet a396bcf08b refactor(metadata): reuse the platform tag mapper 2026-10-18 00:46:09 +07:00
zarzet 05a5613332 feat(player): add configurable full-screen cover art
Offer default and full-screen artwork in Material and Mornye, retaining landscape layouts and full-screen Mornye motion artwork. Keep the Material header readable over bright covers and normalize invalid saved styles without resetting other settings.

Validation: 144 related Flutter tests, flutter analyze, generated settings, formatter and diff checks.
2026-10-17 22:27:06 +07:00
zarzet 3d11169f21 fix(network): request Android 17 local network access before NAS connections 2026-10-17 16:18:41 +07:00
zarzet 6debfccba2 fix(theme): retain dominant cover colors in player backgrounds 2026-10-17 16:18:39 +07:00
zarzet 161a216bea fix(automix): align effect handoffs and render sufficient source audio 2026-10-17 16:18:38 +07:00
zarzet 11c6cf9915 feat(player): synchronize music haptics with local playback 2026-10-17 16:18:37 +07:00
zarzet 78a5e078cd feat(lyrics): share lyric cards and refine timed vocal transitions 2026-10-17 16:18:35 +07:00
zarzet 40f65d3a4d feat(player): show audio source processing and output details 2026-10-17 16:18:32 +07:00
zarzet ecf594aac2 feat(equalizer): add multiband EQ and per-player native audio processing 2026-10-17 16:18:30 +07:00
zarzet 21fd51d62c feat(autoplay): enable personalization by default and confirm learning resets 2026-10-17 16:18:26 +07:00
zarzet befcd2adec feat(a11y): label controls and improve settings contrast and targets 2026-10-17 16:18:25 +07:00
zarzet 09e07671c7 fix(downloads): recover native queues when their service dies
Check service liveness while monitoring newly started native runs, matching the recovery protection already present during adoption. After three consecutive dead-service probes, reconcile completed results, requeue in-flight items and release the run instead of polling a stale running snapshot indefinitely.

Cover stale snapshots, transient probe failures, paused workers, run isolation, startup timeout and sequential verification reconciliation. Related queue and verification validation: 155 tests passed; scoped analyzer and formatter clean.

Refs #675
2026-10-17 11:45:53 +07:00
zarzet 2bf50ecb30 fix(verification): bound browser handoffs and release expired dialogs
Apply the three-minute deadline to pending-auth lookup, browser launch, manual help and grant waiting. Dismiss owned help dialogs on timeout or cancellation, and prevent late launch failures from opening a fallback browser.

Add regression coverage for stalled steps, cancellation, late responses and successful retry after expiry. Related queue and verification validation: 155 tests passed; scoped analyzer and formatter clean.

Refs #675
2026-10-17 11:45:40 +07:00
zarzet 23fe78f30d feat(loading): align skeletons with collection and extension layouts 2026-10-15 19:16:47 +07:00
zarzet 2111afa468 feat(player): share volume controls across Material and Mornye 2026-10-15 19:16:17 +07:00
zarzet 1d53bf9301 feat(rewind): add yearly highlights and seasonal library banners 2026-10-15 17:15:32 +07:00
zarzet bf8ae854dd feat(forms): adopt expressive inputs with consistent form state 2026-10-15 16:00:15 +07:00
zarzet c5491302a7 feat(ui): add themed menus and adaptive checkbox rows 2026-10-15 16:00:02 +07:00