Skip to content

Resolve the current open issue backlog - #115

Merged
lostf1sh merged 18 commits into
mainfrom
fix/resolve-open-issues
Sep 5, 2026
Merged

Resolve the current open issue backlog#115
lostf1sh merged 18 commits into
mainfrom
fix/resolve-open-issues

Conversation

@lostf1sh

@lostf1sh lostf1sh commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

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

  • Run ./gradlew test assembleDebug --no-daemon --console=plain.
  • Start an API 37 emulator and run ./gradlew :app:connectedDebugAndroidTest --no-daemon --console=plain.
  • Exercise playlist downloads, album and artist multi-selection, M3U sync, custom metadata editing, word-synced lyrics, global now-playing colors, and mini-player swipe controls.
    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.

@greptile-apps

greptile-apps Bot commented Sep 1, 2026

Copy link
Copy Markdown

Greptile Summary

This change adds M3U playlist synchronization and updates playlist import behavior to preserve repeated tracks in their authored order.

T-Rex validation blocked

The focused M3U repeated-track test could not start because the JDK/JVM tool is unavailable: JAVA_HOME is unset and java is absent from PATH.

Confidence Score: 4/5

The M3U import behavior needs executable confirmation before this change can be considered safe to merge.

A prior report that M3U imports discard repeated tracks remains actionable because the focused test could not execute. The current parser and its focused test express the intended preservation behavior, but the unavailable JVM prevented confirmation on the claimed import path.

Files Needing Attention: app/src/main/java/com/lostf1sh/pixelplayeross/data/playlist/M3uManager.kt

T-Rex T-Rex Logs

What T-Rex did

  • Validation was blocked by the missing JDK/JVM tool, with JAVA_HOME unset and java absent from PATH.
  • The focused test and the current parser source were captured and byte-compared, but no executable result could be produced.
  • T-Rex ran the requested verification; however, local artifact references were not uploaded.

T-Rex Ran code and verified through T-Rex

Reviews (5): Last reviewed commit: "Save release date edits to the native au..." | Re-trigger Greptile

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.
@lostf1sh
lostf1sh force-pushed the fix/resolve-open-issues branch from ad567f1 to 01065e5 Compare September 1, 2026 12:11
Comment thread app/src/main/java/com/lostf1sh/pixelplayeross/data/playlist/M3uManager.kt Outdated
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.
@lostf1sh
lostf1sh force-pushed the fix/resolve-open-issues branch from 01065e5 to fb5f972 Compare September 1, 2026 12:28
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.
@greptile-apps

greptile-apps Bot commented Sep 5, 2026

Copy link
Copy Markdown

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.

@lostf1sh
lostf1sh merged commit db8cd3b into main Sep 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment