Repository navigation
Download synced songs' covers - #86
Merged
Merged
Conversation
Clementine sends a cover with each synced song that has one, but the phone never fetched it, so kept songs played with no cover unless their file had one inside. Sync now downloads each cover once, however many songs share it, into a hidden .covers folder beside the songs, records it in the store's art table, and deletes covers no song uses any more. A song kept before this gets its cover on the next sync without being downloaded again, and a cover that fails to download is tried again next time without failing the song. The phone player shows Clementine's cover, or else the one in the song's file, as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R2bAq6hMmUmb79VSMAxLPp
hatstand
force-pushed
the
claude/project-thread-7edbi5
branch
from
November 11, 2026 17:29
fd50730 to
43c44e5
Compare
ScreenshotsFrom run 43068724329, against a real Clementine. Left: main. Right: this pull request, light and dark.
Screens at a failure |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





































Requested by John · project thread
Part of media sync, behind testing features. Covers only arrive from a Clementine that sends
SyncItem.art, which the Clementine change in this set adds; the Android client gets the same change.Summary
Kept songs played without a cover unless their file had one inside, for every kind of rule: the engine wrote
artKey: niland never fetchedSyncItem.art, although the store already had anarttable for it.SyncEnginedownloads each cover once, however many songs share it, into a hidden.covers/<key>beside the songs (so it stays out of the Files app's view of the music), records it withputArt, and stores the song'sartKey.artKeystays nil and it's tried again next sync.removeUnwanteddeletes covers no song uses any more..covers.KeptSong.artFilepoints at the cover;PhonePlayershows it, or else the cover in the song's file as before, so the player and lock screen both get it.Testing
New
SyncEngineTests: one download per shared cover, covers for already-kept songs, retry after a failed cover, deleting unused covers, rejecting non-hash keys. CI builds and runs them (no Swift toolchain here).Generated by Claude Code