Resolve the current open issue backlog - #115
Conversation
|
Changing artist parsing rules now forces embedded metadata to be read again, so comma and word delimiters are reflected without requiring a manual rebuild.
Repeated ARTIST fields are preserved in source order, split with the configured delimiters, and deduplicated before artist relationships are rebuilt.
Album sorting now keeps discs in sequence, places numbered tracks before unknown positions, and uses stable title and id fallbacks.
A searchable playback setting now keeps the visible activity awake only while music is actively playing and always clears the window flag afterward.
Enhanced lyric files are parsed into word timings and rendered with faster, continuous highlighting while line-synced and plain lyrics keep their existing behavior.
The album-art palette can now theme the whole app, and short mini-player swipes skip tracks while the existing long dismiss gesture remains available.
Playlist launches now carry their playlist id into media items, allowing the service to resolve the selected transition rule instead of falling back to the global default.
Download and sync workers now start with the required dataSync service type and permission on modern Android releases instead of crashing the app.
Library selection now resolves visible album and artist songs once, removes duplicates from multi-artist tracks, and exposes the existing batch actions for the resolved set.
ad567f1 to
01065e5
Compare
Users can choose an external folder, reconcile file and app changes safely, run sync on demand, and keep synchronization active across app foreground sessions.
The song editor can read, validate, add, remove, and write optional rating and text metadata across the supported tag families without discarding unknown fields.
Playback now keeps durable cloud URIs, refreshes offline resolution safely, caches queue snapshots, and exposes artwork through explicit grants for external media controllers.
Diagnostics now distinguish foreground timing and playback transitions, while search genre typography avoids repeated font loading on the first rendered frame.
Cloud songs can now be downloaded from playlist actions and batch selections, with duplicate and already-local entries filtered before work is queued.
01065e5 to
fb5f972
Compare
Android added a playlist extension to temporary files, so synchronization rejected its own writes. Temporary documents now use a neutral MIME type until they are renamed after writing.
Playlists containing a song more than once could crash because rows shared the same key. Each occurrence now keeps its own key as it moves through the list.
The action row retained the initial selection flags and stayed hidden after a long press. It now evaluates the current selection on recomposition.
The editor read release dates as DATE but the writer expected YEAR, leaving the actual date unchanged. The writer now translates that name before updating or removing the tag. Regression tests cover editing and removing dates in MP3 and MP4 tags.
|
Want your agent to iterate on Greptile's feedback? Start a greploop in Claude Code and it will work through the open comments and keep going until this PR reviews clean. |
What changed
Implemented the current open issue backlog across cloud downloads, metadata parsing and editing, playlist behavior and M3U synchronization, lyrics, theme and gestures, library selection, crash hardening, and performance diagnostics.
Added regression coverage and repaired Android instrumentation fixtures so the device suite runs safely against API 37 without changing an existing emulator music library.
Why
The repository had 14 open issues spanning missing workflows and device-specific failures. Handling them together also exposed shared boundaries in media scanning, playback snapshots, metadata writes, and playlist reconciliation.
Closes #90
Closes #97
Closes #98
Closes #99
Closes #100
Closes #104
Closes #105
Closes #107
Closes #108
Closes #109
Closes #110
Closes #111
Closes #112
Closes #114
How to test
./gradlew test assembleDebug --no-daemon --console=plain../gradlew :app:connectedDebugAndroidTest --no-daemon --console=plain.TREX
Things to watch out for
Full lint still reports 94 pre-existing errors in old translation, Media3 opt-in, and Russian plural resources. The changes in this branch do not add new lint errors. M3U providers that cannot rename documents fail closed instead of replacing the original file.