From cab12b61a629582b4dcfb3fb759e56c69ce594c0 Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Fri, 27 Mar 2026 11:24:36 -0700 Subject: [PATCH] Fix missing year and track numbers when Deezer metadata cache is stale Root cause: search_albums cached album data without release_date or track_position. get_album_metadata accepted this incomplete cache hit (only checked for title), never called the full API. Result: year empty, all tracks numbered 01. Fix: get_album_metadata now requires release_date in cache to use it. Search results without release_date trigger a fresh /album/{id} API call which returns complete data. Also improved track_number fallback in download context builder when Spotify isn't configured. --- core/deezer_client.py | 7 ++++++- web_server.py | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/deezer_client.py b/core/deezer_client.py index db2cbe86..95c3549e 100644 --- a/core/deezer_client.py +++ b/core/deezer_client.py @@ -423,11 +423,16 @@ class DeezerClient: is get_album_raw() (used by deezer_worker.py).""" cache = get_metadata_cache() cached = cache.get_entity('deezer', 'album', str(album_id)) - if cached and cached.get('title'): + # Only use cache if it has full album data (release_date indicates full API response, + # not just a search result which lacks release_date and track details) + if cached and cached.get('title') and cached.get('release_date'): return self._build_album_result(cached, album_id, include_tracks) data = self._api_get(f'album/{album_id}') if not data: + # Fall back to cached if API fails + if cached and cached.get('title'): + return self._build_album_result(cached, album_id, include_tracks) return None cache.store_entity('deezer', 'album', str(album_id), data) diff --git a/web_server.py b/web_server.py index aad0588d..257777ac 100644 --- a/web_server.py +++ b/web_server.py @@ -24581,8 +24581,8 @@ def _attempt_download_with_candidates(task_id, candidates, track, batch_id=None) enhanced_payload['disc_number'] = track_info.get('disc_number', 1) print(f"⚠️ [Context] No track_number in detailed_track, using track_info fallback: {enhanced_payload['track_number']}") except Exception as e: - enhanced_payload['track_number'] = track_info.get('track_number', 1) - enhanced_payload['disc_number'] = track_info.get('disc_number', 1) + enhanced_payload['track_number'] = track_info.get('track_number') or track.track_number if hasattr(track, 'track_number') else 0 + enhanced_payload['disc_number'] = track_info.get('disc_number') or track.disc_number if hasattr(track, 'disc_number') else 1 print(f"❌ [Context] Error getting track_number, using track_info fallback: {enhanced_payload['track_number']} ({e})") else: enhanced_payload['track_number'] = track_info.get('track_number', 1)