From 32b17c6a2cb35ec8849952261038bc389448de1c Mon Sep 17 00:00:00 2001 From: krateng Date: Tue, 24 Oct 2023 16:42:43 +0200 Subject: [PATCH] Fixed duplicate albums and tracks from association edits --- maloja/database/sqldb.py | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/maloja/database/sqldb.py b/maloja/database/sqldb.py index cd730cb..c3d8c63 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -650,7 +650,10 @@ def add_artists_to_tracks(track_ids,artist_ids,dbconn=None): ]) result = dbconn.execute(op) - clean_db(dbconn=dbconn) + + # the resulting tracks could now be duplicates of existing ones + # this also takes care of clean_db + merge_duplicate_tracks(dbconn=dbconn) return True @@ -673,7 +676,10 @@ def remove_artists_from_tracks(track_ids,artist_ids,dbconn=None): ) result = dbconn.execute(op) - clean_db(dbconn=dbconn) + + # the resulting tracks could now be duplicates of existing ones + # this also takes care of clean_db + merge_duplicate_tracks(dbconn=dbconn) return True @@ -687,7 +693,10 @@ def add_artists_to_albums(album_ids,artist_ids,dbconn=None): ]) result = dbconn.execute(op) - clean_db(dbconn=dbconn) + + # the resulting albums could now be duplicates of existing ones + # this also takes care of clean_db + merge_duplicate_albums(dbconn=dbconn) return True @@ -705,7 +714,10 @@ def remove_artists_from_albums(album_ids,artist_ids,dbconn=None): ) result = dbconn.execute(op) - clean_db(dbconn=dbconn) + + # the resulting albums could now be duplicates of existing ones + # this also takes care of clean_db + merge_duplicate_albums(dbconn=dbconn) return True @@ -1587,10 +1599,15 @@ def renormalize_names(): @connection_provider -def merge_duplicate_tracks(artist_id,dbconn=None): +def merge_duplicate_tracks(artist_id=None,dbconn=None): + + affected_track_conditions = [] + if artist_id: + affected_track_conditions = [DB['trackartists'].c.artist_id == artist_id] + rows = dbconn.execute( DB['trackartists'].select().where( - DB['trackartists'].c.artist_id == artist_id + *affected_track_conditions ) ) affected_tracks = [r.track_id for r in rows] @@ -1623,10 +1640,15 @@ def merge_duplicate_tracks(artist_id,dbconn=None): @connection_provider -def merge_duplicate_albums(artist_id,dbconn=None): +def merge_duplicate_albums(artist_id=None,dbconn=None): + + affected_album_conditions = [] + if artist_id: + affected_album_conditions = [DB['albumartists'].c.artist_id == artist_id] + rows = dbconn.execute( DB['albumartists'].select().where( - DB['albumartists'].c.artist_id == artist_id + *affected_album_conditions ) ) affected_albums = [r.album_id for r in rows]