Commit Graph
430 Commits
Author SHA1 Message Date
zarzet f035538778 fix(library): expose failed scan files and reasons in app logs 2026-10-03 17:57:35 +07:00
zarzet 61708829fd fix(stats): show artwork for top artists 2026-10-03 17:15:49 +07:00
zarzet 6550104df9 chore(release): bump app version to 5.1.0 2026-10-03 16:12:01 +07:00
zarzet fb41a86f5a fix(library): match SAF documents across folder tree aliases 2026-10-03 13:40:39 +07:00
zarzet 983f1b26a5 feat(settings): default to built-in playback and word-synced lyrics 2026-10-03 13:40:39 +07:00
zarzet 84cac92983 feat(network): add SMB and WebDAV libraries with streaming and uploads 2026-10-03 04:27:47 +07:00
zarzet d0d85b0e0e fix(artwork): recover missing SAF covers after transient provider failures 2026-10-03 04:24:23 +07:00
zarzet cc3fe42df2 refactor(metadata): flatten track actions and remove similar songs 2026-10-03 03:26:35 +07:00
zarzet 0b2cf0e4e5 feat(discord): add opt-in mobile rich presence with track artwork 2026-10-03 02:14:11 +07:00
zarzet b767bd16d8 fix(playback): refresh notification favorite and shuffle controls 2026-10-03 02:14:01 +07:00
zarzet 70f8bd7f35 feat(extensions): support personal account forms and direct downloads 2026-10-02 19:21:58 +07:00
zarzet 253a19f17f fix(library): preserve folders during upgrades and load failures
Load configured sources before storage probes and the track index, retain visible configuration on failures, and expose loading and retry states. Wait for saved settings before legacy migration and recreate a missing source placeholder without replacing existing identities.
2026-10-02 18:34:57 +07:00
zarzet 1eea52c1c2 feat(playback): add local listening statistics and annual recap
Measure actual playback time and count plays after 30 seconds, with local SQLite aggregation for weekly, monthly and annual summaries. Add recording controls and safe clearing without affecting music or playlists.
2026-10-02 18:17:54 +07:00
zarzet 39bfda8f3d feat(library): show recent releases from favorite artists
Use installed extensions through the existing artist metadata API. Cache catalogs daily, cap concurrency, preserve previous results on provider failures and filter exact release dates into seven- and thirty-day views.
2026-10-02 18:13:39 +07:00
zarzet 575f3fc1bd fix(ios): preserve Now Playing ownership with motion artwork
Restore the non-mixing music audio session after decorative video initialization and before playback resumes. Add an artwork switch that releases or pauses video decoders and uses still covers when disabled.
2026-10-02 18:13:02 +07:00
zarzet a93e552b3e feat(library): add batch playlist and queue actions
Expose playlist, play-next and queue actions across Library search and album selections, including selected artist albums. Sort playlists, keep long selection toolbars scrollable, separate file operations in metadata menus, and show related local songs without online playback.
2026-10-02 18:11:37 +07:00
zarzet 9ea2647c39 feat(library): filter albums with missing tracks
Assess album completeness from the full local inventory, deduplicate track positions, and retain unknown status for ambiguous tags or disconnected sources. Add filters and count badges to Material and Mornye, including single-track albums and filtered search.
2026-10-02 17:03:07 +07:00
zarzet ae679214a9 fix(lyrics): preserve batch track identity and report results promptly 2026-10-02 14:54:47 +07:00
zarzet 7584daad88 fix(history): prevent maintenance from restoring orphan downloads 2026-10-02 13:58:13 +07:00
zarzet 3c62d38c34 fix(metadata): show re-enrich results above Library cards 2026-10-02 11:44:51 +07:00
zarzet 4b39716b23 fix(library): preserve SD card visibility during transient access failures 2026-10-02 11:44:44 +07:00
zarzet c1892fcd69 fix(library): include unindexed tracks in missing ReplayGain filter 2026-10-02 11:44:37 +07:00
zarzet 718e13f24e feat(library): filter tracks missing verified ReplayGain tags 2026-10-02 01:24:26 +07:00
zarzet 50f21d9c82 feat(library): pause and resume library scans
The scan progress tile offers Pause and Resume. A paused scan releases its foreground service and wake lock, shows a paused notice, and resumes from the next unscanned file.
2026-10-01 21:00:42 +07:00
zarzet a21e46e6dd perf(library): trim scan ingestion writes
Fresh staging tables hold no path keys, so the first row for an id no longer issues a delete. Removing scanned paths now runs in one transaction with a subselect instead of committing a lookup and two deletes per chunk.
2026-10-01 19:06:25 +07:00
zarzet 6e6d9dd00e fix(background): keep library scans and update downloads running with the screen off
Android froze the process once the activity stopped, because only track downloads held a foreground service. A dataSync BackgroundWorkService with a partial wake lock now covers library scans and in-app APK downloads, and stops when the last task ends or the system timeout fires. Its notification shows the existing localized progress, so no duplicate appears. If Android refuses the service, work continues as before.

On iOS a scan holds its own background task; on expiry it cancels the scan cleanly instead of being suspended.
2026-10-01 18:46:21 +07:00
zarzet 86cf860288 refactor(library): share the track selection bar and delete action
The Library list's multi-select toolbar (FLAC upgrade, re-enrich, convert, ReplayGain add/remove, delete) becomes LibraryTrackSelectionBar, and its delete flow becomes deleteLibraryTracks. The Library list renders and behaves as before; other screens can now offer the same actions.
2026-10-01 18:46:21 +07:00
zarzet a549671c4e feat(metadata): add a primary artist tag mode
Artist Tag Mode gains "Primary artist only": downloads and re-enrichment write only the first credited artist to Artist and Album Artist, so players list one artist. The FFmpeg MP3, M4A and Vorbis embeds and the AC-4 path now honor the mode; MP3 and M4A previously ignored it.

Manual metadata edits, lyrics embedding and format conversion keep existing or typed credits joined instead of dropping names. The picker scrolls so three options fit on small and landscape screens. Closes #618.
2026-10-01 16:12:58 +07:00
zarzet cef57af562 fix(library): offer re-enrichment for downloaded selections 2026-10-01 00:16:25 +07:00
zarzet eed56d4cbb feat(album): replace selection sharing with metadata re-enrichment 2026-09-30 23:51:54 +07:00
zarzet fe88048db2 refactor(backend): retire unused native bridge entry points 2026-09-30 21:47:15 +07:00
zarzet b8e3a4c166 refactor(download): simplify finalization and remove the retired worker 2026-09-30 21:44:31 +07:00
zarzet 3a63918e1f refactor(flutter): remove unreachable state and widget APIs 2026-09-30 21:44:16 +07:00
zarzet b3f7f59e2e refactor(library): remove unused history lookups and replacement paths 2026-09-30 21:43:54 +07:00
zarzet 2538cdffe1 fix(metadata): preserve the selected recording during download enrichment 2026-09-30 20:58:18 +07:00
zarzet 6c22a91498 fix(library): preserve partial scans and ignore stale completion events 2026-09-30 20:57:48 +07:00
zarzet 8aa8d598d8 feat(lyrics): keep the screen awake while viewing lyrics 2026-09-30 20:21:21 +07:00
zarzet e61e54f93f fix(download): align native metadata preparation and ReplayGain support 2026-09-28 12:21:15 +07:00
zarzet b15bb2673c fix(library): index native completions and refresh background downloads 2026-09-28 12:13:17 +07:00
zarzet e3bec31b36 fix(library): preserve indexed tracks when a full scan is incomplete 2026-09-28 12:13:17 +07:00
zarzet fb13b87561 fix(metadata): resolve album artist consistently across separate downloads 2026-09-28 11:45:10 +07:00
zarzet e0f5a96564 fix(player): distinguish AAudio access and decoder failures 2026-09-27 15:26:11 +07:00
zarzet d92bcf7716 feat(player): add AAudio hi-res, WavPack DSD and DAC volume 2026-09-27 15:26:11 +07:00
zarzet 608675a255 feat(player): add direct USB audio and DSD transport 2026-09-27 15:26:10 +07:00
zarzet 4e464b5b6b feat(player): add verified USB bit-perfect PCM output 2026-09-27 12:22:42 +07:00
zarzet 5f0463a7a4 feat(player): continue playback with Library autoplay 2026-09-27 11:53:40 +07:00
zarzet fa4a03c754 fix(player): retain duration probing after queue edits during loading 2026-09-27 00:42:53 +07:00
zarzet bf7dd5b1c4 feat(player): swipe track headers and remove individual queue entries 2026-09-27 00:35:55 +07:00
zarzet 8199e4dbba fix(player): keep shuffle order stable and restore the original queue 2026-09-27 00:27:26 +07:00
zarzet 3f111b5ea6 fix(player): serialize source changes during rapid track selection 2026-09-27 00:15:38 +07:00