From 4bbf067776fe947d934e5594aa06cbb94618abdb Mon Sep 17 00:00:00 2001 From: theguardian Date: Wed, 2 Oct 2013 09:26:38 -0700 Subject: [PATCH] Fixed the bug where "Get Extras" caused albums to be deleted. Updated webserve.py to remove all traces of deleted items: necessary for this new algorithm to function globally. --- headphones/importer.py | 4 ++-- headphones/mb.py | 19 ++++++++++--------- headphones/webserve.py | 6 ++++++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/headphones/importer.py b/headphones/importer.py index 0ea32d93..d71914f8 100644 --- a/headphones/importer.py +++ b/headphones/importer.py @@ -196,7 +196,7 @@ def addArtisttoDB(artistid, extrasonly=False): group_list = [] force_repackage = 0 #Don't nuke the database if there's a MusicBrainz error - if len(artist['releasegroups']) != 0: + if len(artist['releasegroups']) != 0 and not extrasonly: for groups in artist['releasegroups']: group_list.append(groups['id']) remove_missing_groups_from_albums = myDB.action("SELECT ReleaseID FROM albums WHERE ArtistID=?", [artistid]) @@ -246,7 +246,7 @@ def addArtisttoDB(artistid, extrasonly=False): if force_repackage == 1: new_releases = -1 - logger.info('Forcing repackage of %s, since dB references have been removed' % al_title) + logger.info('Forcing repackage of %s, since dB groups have been removed' % al_title) else: new_releases = new_releases diff --git a/headphones/mb.py b/headphones/mb.py index 2ef7700e..8cec8873 100644 --- a/headphones/mb.py +++ b/headphones/mb.py @@ -363,15 +363,16 @@ def get_new_releases(rgid,includeExtras=False): release_list.append(unicode(release_mark['id'])) release_title = release_mark['title'] remove_missing_releases = myDB.action("SELECT ReleaseID FROM allalbums WHERE AlbumID=?", [rgid]) - for items in remove_missing_releases: - if items['ReleaseID'] not in release_list and items['ReleaseID'] != rgid: - # Remove all from albums/tracks that aren't in release - myDB.action("DELETE FROM albums WHERE ReleaseID=?", [items['ReleaseID']]) - myDB.action("DELETE FROM tracks WHERE ReleaseID=?", [items['ReleaseID']]) - myDB.action("DELETE FROM allalbums WHERE ReleaseID=?", [items['ReleaseID']]) - myDB.action("DELETE FROM alltracks WHERE ReleaseID=?", [items['ReleaseID']]) - logger.info("Removing all references to release %s to reflect MusicBrainz" % items['ReleaseID']) - force_repackage1 = 1 + if remove_missing_releases: + for items in remove_missing_releases: + if items['ReleaseID'] not in release_list and items['ReleaseID'] != rgid: + # Remove all from albums/tracks that aren't in release + myDB.action("DELETE FROM albums WHERE ReleaseID=?", [items['ReleaseID']]) + myDB.action("DELETE FROM tracks WHERE ReleaseID=?", [items['ReleaseID']]) + myDB.action("DELETE FROM allalbums WHERE ReleaseID=?", [items['ReleaseID']]) + myDB.action("DELETE FROM alltracks WHERE ReleaseID=?", [items['ReleaseID']]) + logger.info("Removing all references to release %s to reflect MusicBrainz" % items['ReleaseID']) + force_repackage1 = 1 else: logger.info("Error pulling data from MusicBrainz: Maintaining dB") diff --git a/headphones/webserve.py b/headphones/webserve.py index 1807409f..20dcc873 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -163,6 +163,8 @@ class WebInterface(object): for album in extraalbums: myDB.action('DELETE from tracks WHERE ArtistID=? AND AlbumID=?', [ArtistID, album['AlbumID']]) myDB.action('DELETE from albums WHERE ArtistID=? AND AlbumID=?', [ArtistID, album['AlbumID']]) + myDB.action('DELETE from allalbums WHERE ArtistID=? AND AlbumID=?', [ArtistID, album['AlbumID']]) + myDB.action('DELETE from alltracks WHERE ArtistID=? AND AlbumID=?', [ArtistID, album['AlbumID']]) raise cherrypy.HTTPRedirect("artistPage?ArtistID=%s" % ArtistID) removeExtras.exposed = True @@ -274,6 +276,8 @@ class WebInterface(object): myDB = db.DBConnection() myDB.action('DELETE from albums WHERE AlbumID=?', [AlbumID]) myDB.action('DELETE from tracks WHERE AlbumID=?', [AlbumID]) + myDB.action('DELETE from allalbums WHERE AlbumID=?', [AlbumID]) + myDB.action('DELETE from alltracks WHERE AlbumID=?', [AlbumID]) if ArtistID: raise cherrypy.HTTPRedirect("artistPage?ArtistID=%s" % ArtistID) else: @@ -342,6 +346,8 @@ class WebInterface(object): myDB.action('DELETE from artists WHERE ArtistID=?', [ArtistID]) myDB.action('DELETE from albums WHERE ArtistID=?', [ArtistID]) myDB.action('DELETE from tracks WHERE ArtistID=?', [ArtistID]) + myDB.action('DELETE from allalbums WHERE AlbumID=?', [AlbumID]) + myDB.action('DELETE from alltracks WHERE AlbumID=?', [AlbumID]) myDB.action('INSERT OR REPLACE into blacklist VALUES (?)', [ArtistID]) elif action == 'pause': controlValueDict = {'ArtistID': ArtistID}