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.
This commit is contained in:
Broque Thomas 2026-03-27 11:24:36 -07:00
parent a0b2fa9441
commit cab12b61a6
2 changed files with 8 additions and 3 deletions

View file

@ -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)

View file

@ -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)