Honor manual matches in automatic wishlist cleanup
This commit is contained in:
parent
94f6c950cb
commit
3e7eeb7c9c
2 changed files with 40 additions and 46 deletions
|
|
@ -696,52 +696,14 @@ def automatic_wishlist_cleanup_after_db_update(
|
||||||
|
|
||||||
logger.info(f"[Auto Cleanup] Found {len(wishlist_tracks)} tracks in wishlist")
|
logger.info(f"[Auto Cleanup] Found {len(wishlist_tracks)} tracks in wishlist")
|
||||||
|
|
||||||
removed_count = 0
|
removed_count = remove_tracks_already_in_library(
|
||||||
for track in wishlist_tracks:
|
wishlist_service,
|
||||||
track_name = track.get('name', '')
|
profiles_database,
|
||||||
artists = track.get('artists', [])
|
music_database,
|
||||||
spotify_track_id = track.get('spotify_track_id') or track.get('id')
|
active_server,
|
||||||
track_album = track.get('album', {}).get('name') if isinstance(track.get('album'), dict) else track.get('album')
|
logger=logger,
|
||||||
|
log_prefix="[Auto Cleanup]",
|
||||||
if not track_name or not artists or not spotify_track_id:
|
)
|
||||||
continue
|
|
||||||
|
|
||||||
found_in_db = False
|
|
||||||
for artist in artists:
|
|
||||||
if isinstance(artist, str):
|
|
||||||
artist_name = artist
|
|
||||||
elif isinstance(artist, dict) and 'name' in artist:
|
|
||||||
artist_name = artist['name']
|
|
||||||
else:
|
|
||||||
artist_name = str(artist)
|
|
||||||
|
|
||||||
try:
|
|
||||||
db_track, confidence = music_database.check_track_exists(
|
|
||||||
track_name,
|
|
||||||
artist_name,
|
|
||||||
confidence_threshold=0.7,
|
|
||||||
server_source=active_server,
|
|
||||||
album=track_album,
|
|
||||||
)
|
|
||||||
|
|
||||||
if db_track and confidence >= 0.7:
|
|
||||||
found_in_db = True
|
|
||||||
logger.info(
|
|
||||||
f"[Auto Cleanup] Track found in database: '{track_name}' by {artist_name} (confidence: {confidence:.2f})"
|
|
||||||
)
|
|
||||||
break
|
|
||||||
except Exception as db_error:
|
|
||||||
logger.error(f"[Auto Cleanup] Error checking database for track '{track_name}': {db_error}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
if found_in_db:
|
|
||||||
try:
|
|
||||||
removed = wishlist_service.mark_track_download_result(spotify_track_id, success=True)
|
|
||||||
if removed:
|
|
||||||
removed_count += 1
|
|
||||||
logger.info(f"[Auto Cleanup] Removed track from wishlist: '{track_name}' ({spotify_track_id})")
|
|
||||||
except Exception as remove_error:
|
|
||||||
logger.error(f"[Auto Cleanup] Error removing track from wishlist: {remove_error}")
|
|
||||||
|
|
||||||
logger.info(f"[Auto Cleanup] Completed automatic cleanup: {removed_count} tracks removed from wishlist")
|
logger.info(f"[Auto Cleanup] Completed automatic cleanup: {removed_count} tracks removed from wishlist")
|
||||||
return removed_count
|
return removed_count
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,38 @@ def test_automatic_wishlist_cleanup_after_db_update_removes_library_matches():
|
||||||
assert wishlist_service.removed == [("sp-1", True, None, 1)]
|
assert wishlist_service.removed == [("sp-1", True, None, 1)]
|
||||||
|
|
||||||
|
|
||||||
|
def test_automatic_wishlist_cleanup_after_db_update_removes_manual_matches(monkeypatch):
|
||||||
|
wishlist_service = _CleanupWishlistService(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Manual Song",
|
||||||
|
"artists": [{"name": "Artist A"}],
|
||||||
|
"spotify_track_id": "sp-manual",
|
||||||
|
"id": "sp-manual",
|
||||||
|
"provider": "spotify",
|
||||||
|
"album": {"name": "Album A"},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
)
|
||||||
|
music_db = _CleanupMusicDatabase()
|
||||||
|
monkeypatch.setattr(
|
||||||
|
"core.library.manual_library_match.get_match",
|
||||||
|
lambda *_args, **_kwargs: {"id": 1, "library_track_id": 42},
|
||||||
|
)
|
||||||
|
|
||||||
|
removed = processing.automatic_wishlist_cleanup_after_db_update(
|
||||||
|
wishlist_service=wishlist_service,
|
||||||
|
profiles_database=_CleanupProfilesDatabase(),
|
||||||
|
music_database=music_db,
|
||||||
|
active_server="navidrome",
|
||||||
|
logger=_FakeLogger(),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert removed == 1
|
||||||
|
assert wishlist_service.removed == [("sp-manual", True, None, 1)]
|
||||||
|
assert music_db.track_checks == []
|
||||||
|
|
||||||
|
|
||||||
class _CleanupProfilesDatabase:
|
class _CleanupProfilesDatabase:
|
||||||
def get_all_profiles(self):
|
def get_all_profiles(self):
|
||||||
return [{"id": 1}]
|
return [{"id": 1}]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue