From 5334a4688eae9227c28915ea6edc8d61de1e2ece Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Tue, 31 Mar 2026 10:40:18 -0700 Subject: [PATCH] Preserve discovery data when re-mirroring playlists mirror_playlist() was deleting all tracks and re-inserting them, which wiped the extra_data containing discovery results. Now saves the {source_track_id: extra_data} map before deleting and restores it on re-insert for tracks that don't bring their own extra_data. This prevents discovery loss when playlists auto-refresh on tab load. --- database/music_database.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/database/music_database.py b/database/music_database.py index c44ebc10..9f32aa05 100644 --- a/database/music_database.py +++ b/database/music_database.py @@ -9192,12 +9192,28 @@ class MusicDatabase: (source, source_playlist_id, profile_id) ).fetchone()['id'] + # Preserve existing extra_data (discovery results) before replacing tracks + old_extra_map = {} + try: + cursor.execute(""" + SELECT source_track_id, extra_data FROM mirrored_playlist_tracks + WHERE playlist_id = ? AND source_track_id IS NOT NULL AND extra_data IS NOT NULL + """, (playlist_id,)) + old_extra_map = {row['source_track_id']: row['extra_data'] for row in cursor.fetchall()} + except Exception: + pass + # Replace all tracks cursor.execute("DELETE FROM mirrored_playlist_tracks WHERE playlist_id=?", (playlist_id,)) for i, t in enumerate(tracks): extra = t.get('extra_data') if extra and not isinstance(extra, str): extra = json.dumps(extra) + # Restore preserved discovery data if the incoming track doesn't have its own + if not extra: + sid = t.get('source_track_id') + if sid and sid in old_extra_map: + extra = old_extra_map[sid] cursor.execute(""" INSERT INTO mirrored_playlist_tracks (playlist_id, position, track_name, artist_name, album_name, duration_ms, image_url, source_track_id, extra_data)