soulsync/core/sync
BoulderBadgeDad e148f859e7 Sync detail modal: click '→ Wishlist' to re-add a track with the original context
In the dashboard Recent Syncs detail modal, the '→ Wishlist' status on unmatched
tracks is now a button. Clicking it re-adds that exact track to the wishlist with
the SAME context the sync used (source_type='playlist' + the playlist's name/id +
failure_reason), so it's indistinguishable from the original auto-add.

- reconstruct_sync_track_data() (pure, tested): prefers the full cached track from
  tracks_json (by source_track_id, then index) so album art/full data carry over;
  falls back to the track_result fields; refuses non-'wishlist' rows and rows with
  no id (can't re-wishlist a matched/unidentifiable track).
- POST /api/sync/history/<id>/track/<i>/wishlist resolves the entry server-side and
  calls the wishlist service; idempotent (reports added vs already-on-wishlist).
- button shows a busy state then '✓ Re-added' / '✓ On wishlist'.

7 pure tests (full-track preference, id-vs-index match, fallback rebuild, non-
wishlist + out-of-range refusal). JS/PY/ruff clean.
2026-06-24 16:09:55 -07:00
..
__init__.py Persist Find & Add selections as permanent server-playlist match overrides 2026-05-14 09:39:24 -07:00
match_overrides.py Fix #787: Find & Add now records a durable manual match that survives a rescan 2026-06-04 13:46:24 -07:00
playlist_edit.py Align playlists: reorder a server playlist to the source order (Navidrome) 2026-06-24 12:58:01 -07:00
playlist_reconcile.py Server playlist editor: surface 'accurate but out of order' + read-only server-order view 2026-06-24 12:15:47 -07:00
wishlist_readd.py Sync detail modal: click '→ Wishlist' to re-add a track with the original context 2026-06-24 16:09:55 -07:00