Commit Graph
2732 Commits
Author SHA1 Message Date
zarzet 7ef0a1875e perf(library): stat each walked entry once
The direct-path walk re-validated every path component and stat'ed each file twice more. Children of an already validated directory now take one lstat of their own name, which still rejects symlinks and special files. Tag reads may use up to six workers on slow storage; artwork decoding stays serialized.

Tests cover walk order, size and modification time, and symlink rejection; they pass on the previous walk as well.
2026-10-01 19:06:25 +07:00
zarzet d65f3a1cc2 perf(library): overlap SAF listings and metadata reads
SD cards, USB drives and network shares pay a provider round trip per query. Folder listings are now prefetched four at a time while the walk stays serial, so order, deduplication and error counts are unchanged. Full and incremental scans share a six-worker in-order read pool; incremental scans were fully serial.

Changed files reuse the listing's name and timestamp, CUE copies skip the name and MIME queries, and directories holding CUE sheets are not listed twice.
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 ad9670eb46 feat(library): select search results with a long press
Long-pressing a song in Library search results enters multi-select with the Library track actions. Taps toggle songs, select all covers the visible songs, back leaves selection mode, and a new query clears it. Applies to the Mornye Library tab and the Material/Songs search.
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 41340a4a21 feat(metadata): write primary-artist tags in native writers
Native tag writers accept artist_tag_mode=primary and keep only the first credited artist in ARTIST and ALBUMARTIST for every format: FLAC download embedding, FLAC/Opus edits, and the ID3, MP4, APE and RIFF writers. The Android finalizer's FFmpeg fallback applies the same rule.

Rust and Kotlin share one separator set (comma, semicolon, ampersand, a spaced x, feat/ft/featuring/with) and test the same fixtures. The Go-parity split_vorbis pattern is unchanged. Refs #618.
2026-10-01 16:12:44 +07:00
zarzet fe30871e36 fix(mornye): preserve navbar blur during collapse animations 2026-10-01 01:29:00 +07:00
zarzet d1eba29a4a fix(mornye): soften glass rims and increase transparency 2026-10-01 01:29:00 +07:00
zarzet 788c76c22d chore(release): bump app version to 5.0.7 2026-10-01 01:28:12 +07:00
zarzet a2974acee0 fix(mornye): respect glass clarity and accessibility limits 2026-10-01 00:42:15 +07:00
zarzet 7a7dd99eab test(library): keep notifier test counters private 2026-10-01 00:42:15 +07:00
zarzet fa491356d8 fix(library): spread filters across the search field width 2026-10-01 00:16:38 +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 ce13e29b71 feat(appearance): add glass clarity controls and directional highlights 2026-09-30 23:42:20 +07:00
zarzet 9ebf98ff6c perf(mornye): adapt glass and player effects to device capabilities 2026-09-30 23:42:00 +07:00
zarzet b11e925ee4 perf(player): suspend covered pages and streamline transitions 2026-09-30 23:40:04 +07:00
zarzet 1e246138c8 perf(download): avoid repeated progress decoding and queue regrouping 2026-09-30 23:39:22 +07:00
zarzet 44b7ceb8e8 perf(download): reuse connections across probes and retries 2026-09-30 23:39:22 +07:00
zarzet 9051f37cf5 perf(library): reduce scan allocations and keep SAF workers busy 2026-09-30 23:39:22 +07:00
zarzet 1d3f7a0d44 fix(lyrics): lift timed words together 2026-09-30 22:09:41 +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 377710ec22 refactor(ui): consolidate file feedback and shared display helpers 2026-09-30 21:43:39 +07:00
zarzet c5789df87d fix(storage): retain document access for library metadata and covers 2026-09-30 21:42:53 +07:00
zarzet cda9868a1f fix(startup): keep shared backend alive across activity recreation 2026-09-30 20:58:36 +07:00
zarzet fb08110797 fix(download): verify ReplayGain tags independently of metadata embedding 2026-09-30 20:58:18 +07:00
zarzet 2538cdffe1 fix(metadata): preserve the selected recording during download enrichment 2026-09-30 20:58:18 +07:00
zarzet 88508c806a perf(library): reuse bounded artwork thumbnails during scans 2026-09-30 20:57:59 +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 a1cec6de51 fix(library): open track metadata from search results 2026-09-30 20:16:08 +07:00
zarzet e025abeec8 chore(release): sync remote AltStore metadata v5.0.6 2026-09-28 17:35:57 +07:00
zarzet e61e54f93f fix(download): align native metadata preparation and ReplayGain support 2026-09-28 12:21:15 +07:00
zarzet c0997de19c style(playback): mark bit-perfect and DAP hi-res output as beta 2026-09-28 12:13:17 +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 4c2c356763 fix(download): detect mislabeled MP4 before native metadata writes 2026-09-28 12:13:17 +07:00
zarzet c5a262b865 fix(motion): pause loading effects when hidden or motion is reduced 2026-09-28 11:58:50 +07:00
zarzet 987245de71 style(library): use theme colors for Material collections 2026-09-28 11:58:50 +07:00
zarzet aeba9b879e feat(player): show covers and expressive controls in Material queue 2026-09-28 11:58:50 +07:00
zarzet 892911c825 feat(material): unify search filters and extension actions 2026-09-28 11:58:49 +07:00
zarzet fb13b87561 fix(metadata): resolve album artist consistently across separate downloads 2026-09-28 11:45:10 +07:00
zarzet 25c6292783 fix(settings): use neutral category icons in Material 2026-09-27 18:28:50 +07:00
zarzet c2eab0da51 fix(material): keep navigation tint continuous through system inset 2026-09-27 18:18:19 +07:00
zarzet 3980f1f851 fix(player): move Material audio output to bottom right 2026-09-27 17:51:45 +07:00
zarzet fad7e64fd3 fix(player): align Material lyrics toggle to bottom left 2026-09-27 17:48:11 +07:00