diff --git a/core/watchlist_scanner.py b/core/watchlist_scanner.py index 7b5f96e2..310b9f16 100644 --- a/core/watchlist_scanner.py +++ b/core/watchlist_scanner.py @@ -676,9 +676,8 @@ class WatchlistScanner: logger.warning(f"Error checking album {album.name}: {e}") continue - # Update last scan timestamp for this artist (use spotify_artist_id as DB key for consistency) - db_artist_id = watchlist_artist.spotify_artist_id or artist_id - self.update_artist_scan_timestamp(db_artist_id) + # Update last scan timestamp for this artist + self.update_artist_scan_timestamp(watchlist_artist) # Fetch and store similar artists for discovery feature (with caching to avoid over-polling) # Similar artists are fetched from MusicMap (works with any source) and matched to both Spotify and iTunes @@ -1203,29 +1202,45 @@ class WatchlistScanner: logger.error(f"Error adding track to wishlist: {track_name}: {e}") return False - def update_artist_scan_timestamp(self, spotify_artist_id: str) -> bool: - """Update the last scan timestamp for an artist""" + def update_artist_scan_timestamp(self, artist) -> bool: + """Update the last scan timestamp for an artist. + + Args: + artist: WatchlistArtist object, or a string spotify_artist_id for backward compat + """ try: with self.database._get_connection() as conn: cursor = conn.cursor() - - cursor.execute(""" - UPDATE watchlist_artists - SET last_scan_timestamp = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP - WHERE spotify_artist_id = ? - """, (spotify_artist_id,)) - + + # Support both WatchlistArtist objects and raw string IDs + if hasattr(artist, 'id'): + # WatchlistArtist object - use database primary key (always reliable) + cursor.execute(""" + UPDATE watchlist_artists + SET last_scan_timestamp = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP + WHERE id = ? + """, (artist.id,)) + artist_label = f"{artist.artist_name} (id={artist.id})" + else: + # Backward compat: raw string ID (try spotify, then itunes) + cursor.execute(""" + UPDATE watchlist_artists + SET last_scan_timestamp = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP + WHERE spotify_artist_id = ? OR itunes_artist_id = ? + """, (artist, artist)) + artist_label = f"ID {artist}" + conn.commit() - + if cursor.rowcount > 0: - logger.debug(f"Updated scan timestamp for artist {spotify_artist_id}") + logger.debug(f"Updated scan timestamp for artist {artist_label}") return True else: - logger.warning(f"No artist found with Spotify ID {spotify_artist_id}") + logger.warning(f"No artist found for {artist_label}") return False - + except Exception as e: - logger.error(f"Error updating scan timestamp for artist {spotify_artist_id}: {e}") + logger.error(f"Error updating scan timestamp: {e}") return False def _fetch_similar_artists_from_musicmap(self, artist_name: str, limit: int = 20) -> List[Dict[str, Any]]: diff --git a/ui/components/watchlist_status_modal.py b/ui/components/watchlist_status_modal.py index 62736859..46bc7c2b 100644 --- a/ui/components/watchlist_status_modal.py +++ b/ui/components/watchlist_status_modal.py @@ -247,7 +247,7 @@ class WatchlistScanWorker(QThread): continue # Update last scan timestamp - scanner.update_artist_scan_timestamp(watchlist_artist.spotify_artist_id) + scanner.update_artist_scan_timestamp(watchlist_artist) return ScanResult( artist_name=watchlist_artist.artist_name, diff --git a/web_server.py b/web_server.py index 6f8fcf5b..25c3b98c 100644 --- a/web_server.py +++ b/web_server.py @@ -19013,8 +19013,8 @@ def start_watchlist_scan(): continue # Update scan timestamp - scanner.update_artist_scan_timestamp(artist.spotify_artist_id) - + scanner.update_artist_scan_timestamp(artist) + # Store result scan_results.append(type('ScanResult', (), { 'artist_name': artist.artist_name, @@ -19025,7 +19025,7 @@ def start_watchlist_scan(): 'success': True, 'error_message': None })()) - + print(f"✅ Scanned {artist.artist_name}: {artist_new_tracks} new tracks found, {artist_added_tracks} added to wishlist") # Fetch similar artists for discovery feature @@ -19731,7 +19731,7 @@ def _process_watchlist_scan_automatically(): continue # Update scan timestamp - scanner.update_artist_scan_timestamp(artist.spotify_artist_id) + scanner.update_artist_scan_timestamp(artist) # Store result scan_results.append(type('ScanResult', (), {