zarzet
c7b1d0b0ec
fix(metadata): preserve original artwork resolution for SAF files
2026-10-09 10:34:49 +07:00
zarzet
9f2062d495
build(android): verify full APK integrity and publish checksums
2026-10-08 23:54:24 +07:00
zarzet
f0e89e0348
fix(ios): audit Discord license in its framework bundle
2026-10-08 23:54:06 +07:00
zarzet
d3a4e4d999
docs: move detailed build guidance to contributing guide
...
Keep the README Development section short and group Android/iOS builds, Full/Lite variants, SDK setup, and crash symbol handling in CONTRIBUTING.md. Replace the stale Discord setup link with the maintained bridge documentation.
2026-10-08 23:16:53 +07:00
zarzet
0d13c9585c
Merge remote-tracking branch 'origin/main'
v5.1.0
2026-10-08 23:10:20 +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
61410f29fb
chore(l10n): merge Crowdin translation updates from PR #551
...
Integrate 16 locale updates from 9c32784be4 while preserving translations for newer local features. Resolve duplicate entries, regional locale IDs, placeholder mismatches, and introduced plural conflicts.
Validation: Flutter gen-l10n, flutter analyze lib/l10n, ARB key and placeholder audit, and git diff --check.
2026-10-08 22:09:47 +07:00
zarzet
8251c16ca0
fix(repo): retry initialization before adding a registry
...
Coalesce repository startup and retry a failed owner initialization before changing the registry URL. Keep the original startup error and avoid rollback calls when initialization never succeeded.
Validation: 56 targeted Flutter tests passed (2 optional skips), analyzer clean; two Android profile integration cases verified unreadable extensions remain visible, the repository initializes, and encrypted settings reopen with their original key.
2026-10-08 20:30:24 +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
461d5325d8
fix(extensions): retain packages with unreadable settings
...
Keep installed extensions visible with an error and disable execution when their encrypted settings cannot be read. Preserve settings and credentials so restoring the correct key remains possible.
Validation: 80 extension Rust tests passed (2 ignored), Clippy and formatting; Android profile integration verified repository initialization and preservation of encrypted settings.
2026-10-08 20:29:57 +07:00
zarzet
4b07607884
test(progress): keep batch tests after production helpers
2026-10-08 17:53:55 +07:00
zarzet
e4b6156249
perf(downloads): index queued positions for scheduling
2026-10-08 17:51:56 +07:00
zarzet
5a4d0716db
perf(downloads): stop queue selection when slots fill
2026-10-08 17:25:11 +07:00
zarzet
1df593eb4f
perf(downloads): index progress notification candidates
2026-10-08 17:05:13 +07:00
zarzet
c6332e77d8
perf(downloads): reuse committed queue snapshots
2026-10-08 16:46:51 +07:00
zarzet
a9578b35fa
test(downloads): measure selectors after queue removals
2026-10-08 16:28:33 +07:00
zarzet
a167021766
perf(downloads): retain queue indexes between item removals
2026-10-08 16:15:15 +07:00
zarzet
4ab9e53e43
fix(downloads): finalize album ReplayGain after history is saved
2026-10-08 15:49:48 +07:00
zarzet
8192441f60
perf(downloads): check album ReplayGain readiness in one pass
2026-10-08 15:22:45 +07:00
zarzet
f75593c15a
perf(downloads): batch queue failures when folder access is lost
2026-10-08 12:03:29 +07:00
zarzet
e01ec99c5e
perf(downloads): enqueue selected playlists in one update
2026-10-08 09:27:26 +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
3da4126762
perf(downloads): enqueue Wishlist selections in one update
2026-10-08 05:08:24 +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
4076842b8f
perf(lyrics): short-circuit content availability checks
2026-10-08 04:33:30 +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
aa54c57590
test(network): read complete fixture requests on BSD
2026-10-08 03:14:29 +07:00
zarzet
6325c4769c
fix(downloads): preserve actual provider audio format
2026-10-08 01:50:36 +07:00
zarzet
dc1e7c1273
fix(lyrics): treat placeholder zero timestamps as unsynced
2026-10-08 00:49:42 +07:00
zarzet
a68ab4ee97
feat(player): warn when muted and allow manual resume
2026-10-07 23:20:27 +07:00
zarzet
d89048409f
fix(library): retry transient SQLite locks before scan transactions
2026-10-07 18:46:05 +07:00
zarzet
023a093f15
fix(riverpod): remove public notifier getters
2026-10-07 12:42:09 +07:00
zarzet
6cf2195563
test(native): verify private data routes through app channels
2026-10-07 04:31:52 +07:00
zarzet
0ca60d4a1b
perf(collections): split native chunks without per-line async events
2026-10-07 04:31:52 +07:00
zarzet
11d496effc
fix(queue): merge startup additions before persistence and processing
2026-10-07 04:28:07 +07:00
zarzet
8ca9205cc4
fix(library): stage native scans before owner SQLite publication
2026-10-07 04:19:14 +07:00
zarzet
d285f26f9a
fix(cache): prune detached projections under source writer barrier
2026-10-07 04:19:14 +07:00
zarzet
100999e5f5
perf(library): load bounded browse pages without rereading prefixes
2026-10-07 04:19:14 +07:00
zarzet
e7d0d88035
perf(backup): stream encoded collections without cloning model graphs
2026-10-07 04:19:14 +07:00
zarzet
1094ed72f5
perf(queue): bound SQLite transfers and move large codecs off UI
2026-10-07 04:19:14 +07:00
zarzet
4d0fe68f17
perf(collections): hydrate native snapshots on bounded workers
2026-10-07 04:19:14 +07:00
zarzet
c03be45ed9
test(sqlite): exercise private files and exclusive transactions
2026-10-07 04:19:13 +07:00
zarzet
a0abf97168
fix(backup): publish native restores through owning SQLite connection
2026-10-07 04:18:29 +07:00
zarzet
546d2eda2d
fix(sqlite): isolate native staging from live database handles
2026-10-07 03:49:33 +07:00
zarzet
98a83bb8ec
fix(queue): preserve restored downloads during startup flush
2026-10-07 03:41:56 +07:00