Commit Graph
541 Commits
Author SHA1 Message Date
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 bfd180909c refactor(explore): centralize persistent cache storage 2026-10-18 00:47:21 +07:00
zarzet dea131778c refactor(playback): share lost route pause transitions 2026-10-18 00:46:53 +07:00
zarzet 3d11169f21 fix(network): request Android 17 local network access before NAS connections 2026-10-17 16:18:41 +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 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 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 1d53bf9301 feat(rewind): add yearly highlights and seasonal library banners 2026-10-15 17:15:32 +07:00
zarzet 1bae2e6b16 refactor(ui): unify expressive actions and modal transitions 2026-10-15 02:52:15 +07:00
zarzet c42b314042 fix(player): expose favorites and shuffle in Material notifications 2026-10-15 00:28:17 +07:00
zarzet 08266c7369 feat(listening): add Rewind highlights and refresh statistics 2026-10-14 23:05:26 +07:00
zarzet 62ce404390 feat(ui): extend Material Expressive surfaces and playback controls 2026-10-13 22:58:00 +07:00
zarzet e3b69a25ef fix(download): probe M4A streams before preserving requested FLAC
Provider and decryption extensions describe the downloaded container, not
its audio codec. A decrypted M4A/MP4 can still carry FLAC, so a requested
FLAC output now reaches the codec probe instead of being preserved early.
Lossy streams keep their native container and still receive metadata.
2026-10-13 18:27:16 +07:00
zarzet 65dbce27f5 fix(automix): wait for advancing audio before starting fades 2026-10-12 12:11:27 +07:00
zarzet ac8523d789 feat(metadata): add per-field download tag separators 2026-10-12 12:11:06 +07:00
zarzet ef903248c0 feat(network): delete SMB and WebDAV tracks from the library 2026-10-11 16:14:01 +07:00
zarzet 2e170ca298 fix(notifications): show indeterminate scans without false zero percent 2026-10-11 15:38:20 +07:00
zarzet c84fc335ac fix(ios): preserve folder grants and surface picker failures 2026-10-11 14:34:35 +07:00
zarzet d2dcf28622 feat(autoplay): add opt-in on-device recommendation learning 2026-10-11 14:34:11 +07:00
zarzet e22e934525 feat(network): enable audio and hi-res analysis for network tracks 2026-10-11 14:34:04 +07:00
zarzet 5eafd3acc4 perf(library): prefetch network metadata with bounded concurrency
Read up to three WebDAV tracks or two SMB tracks through a scan-owned metadata service while retaining listing order, bounded output, artwork and progress. Keep pause and cancellation independent of playback and add host regressions plus a native Android latency benchmark.
2026-10-10 23:22:41 +07:00
zarzet 0d70e413ed perf(network): reuse HTTP connections for browsing and range reads
Pool bounded read clients by connection credentials and certificate pin, invalidate them after configuration changes, and abort timed-out requests. Verify connection reuse, concurrent range limits, error recovery and credential rotation.
2026-10-10 23:22:32 +07:00
zarzet e9b7e84113 fix(webdav): retain tracks across equivalent parent URI encodings
Match decoded path components once in Dart and Rust while rejecting encoded separators and paths outside the selected folder. Add folder scan diagnostics, shared parser fixtures, a synthetic 1806-track traversal and native Android regression coverage.
2026-10-10 23:22:21 +07:00
zarzet 9ecfb31bc2 fix(automix): ease effects into playback without cutting dry audio 2026-10-10 17:06:41 +07:00
zarzet b30dd9fed0 feat(appearance): support imported TTF and OTF fonts 2026-10-10 16:59:06 +07:00
zarzet cdceda4585 fix(library): exclude inactive NAS entries and file aliases from duplicates 2026-10-10 02:16:32 +07:00
zarzet edf575e8fc fix(playlists): preserve repeated tracks during imports 2026-10-10 02:16:22 +07:00
zarzet 829aeb156e fix(playback): reload audio sources when switching tracks 2026-10-10 02:16:15 +07:00
zarzet 00cff9b3c3 fix(ios): restore lock screen controls across app transitions 2026-10-09 18:08:12 +07:00
zarzet 1b9c35f322 fix(downloads): preserve browser verification and queues across restarts 2026-10-09 18:07:49 +07:00
zarzet 37258a6160 fix(setup): recover folder permissions after Android restarts 2026-10-09 18:07:38 +07:00
zarzet f870cafd07 fix(library): bound path-key migration batches
Migrate paths in 250-track pages and retain unchanged aliases to reduce memory use and index rewrites. Cover large libraries and atomic upgrade rollback with regression tests.

Refs #640
2026-10-09 13:49:03 +07:00
zarzet c7b1d0b0ec fix(metadata): preserve original artwork resolution for SAF files 2026-10-09 10:34:49 +07:00
zarzet e975cae99f feat(library): expand audio format and ReplayGain filters
Keep format choices available independently of loaded pages, match codec and extension aliases, and add a filter for indexed ReplayGain tags. Preserve source, quality, search, paging, and existing missing-ReplayGain behavior.

Validation: 13 targeted database and widget tests; Flutter localization generation and targeted analysis.
2026-10-08 22:30:04 +07:00
zarzet 9177a683a2 fix(storage): preserve extension encryption keys on read failures
Disable automatic deletion across clients sharing Android secure storage and enable protected migration. Reject replacement keys when encrypted settings exist or the saved key is malformed. Surface preparation failures through extension state and preserve retry behavior.

Validation: targeted Flutter tests, analyzer and Android secure-storage compatibility test passed. The original device key-loss trigger is not established.
2026-10-08 20:30:24 +07:00
zarzet 5a4d0716db perf(downloads): stop queue selection when slots fill 2026-10-08 17:25:11 +07:00
zarzet c6332e77d8 perf(downloads): reuse committed queue snapshots 2026-10-08 16:46:51 +07:00
zarzet 8192441f60 perf(downloads): check album ReplayGain readiness in one pass 2026-10-08 15:22:45 +07:00
zarzet 2ded1cff68 perf(downloads): batch queue cancellation and progress cleanup 2026-10-08 08:47:47 +07:00
zarzet c67d2a2dd2 perf(downloads): batch cancellation resets for retry 2026-10-08 06:55:26 +07:00
zarzet e0bdcb5134 perf(collections): delete selected playlists in one transaction 2026-10-08 05:14:44 +07:00
zarzet 8ffd232b35 perf(collections): remove selected tracks in one transaction 2026-10-08 04:58:47 +07:00
zarzet 105f1b0946 perf(network): prepare large SMB listings off the UI thread 2026-10-08 04:47:53 +07:00
zarzet 0af197b82a perf(library): buffer network scan output with bounded writes 2026-10-08 04:40:09 +07:00
zarzet 20e0573d09 perf(collections): batch Love All updates and persistence 2026-10-08 04:01:50 +07:00
zarzet 460f8ebc2d perf(collections): stage large playlist additions off the UI thread 2026-10-08 03:19:45 +07:00
zarzet a68ab4ee97 feat(player): warn when muted and allow manual resume 2026-10-07 23:20:27 +07:00