diff --git a/data/interfaces/default/manage.html b/data/interfaces/default/manage.html
index 66405aab..4c0de24c 100644
--- a/data/interfaces/default/manage.html
+++ b/data/interfaces/default/manage.html
@@ -119,7 +119,8 @@
Force Check for Wanted Albums
-
Force Update Active Artists
+
Force Update Active Artists [Fast]
+
Force Update Active Artists [Comprehensive]
Force Post-Process Albums in Download Folder
Check for Headphones Updates
Delete empty Artists
diff --git a/headphones/importer.py b/headphones/importer.py
index a808d548..d8fa677a 100644
--- a/headphones/importer.py
+++ b/headphones/importer.py
@@ -109,7 +109,7 @@ def addArtistIDListToDB(artistidlist):
for artistid in artistidlist:
addArtisttoDB(artistid)
-def addArtisttoDB(artistid, extrasonly=False):
+def addArtisttoDB(artistid, extrasonly=False, forcefull=False):
# Putting this here to get around the circular import. We're using this to update thumbnails for artist/albums
from headphones import cache
@@ -224,31 +224,35 @@ def addArtisttoDB(artistid, extrasonly=False):
#Make a user configurable variable to skip update of albums with release dates older than this date (in days)
pause_delta = headphones.MB_IGNORE_AGE
- check_release_date = myDB.action("SELECT ReleaseDate from albums WHERE ArtistID=? AND AlbumTitle=?", (artistid, al_title)).fetchone()
- if check_release_date:
- if check_release_date[0] is None:
- logger.info("Now updating: " + rg['title'])
- new_releases = mb.get_new_releases(rgid,includeExtras)
- elif len(check_release_date[0])!=10:
- logger.info("Now updating: " + rg['title'])
- new_releases = mb.get_new_releases(rgid,includeExtras)
- else:
- if helpers.get_age(today) - helpers.get_age(check_release_date[0]) < pause_delta:
+ if not forcefull:
+ check_release_date = myDB.action("SELECT ReleaseDate from albums WHERE ArtistID=? AND AlbumTitle=?", (artistid, al_title)).fetchone()
+ if check_release_date:
+ if check_release_date[0] is None:
logger.info("Now updating: " + rg['title'])
- new_releases = mb.get_new_releases(rgid,includeExtras)
+ new_releases = mb.get_new_releases(rgid,includeExtras)
+ elif len(check_release_date[0])!=10:
+ logger.info("Now updating: " + rg['title'])
+ new_releases = mb.get_new_releases(rgid,includeExtras)
else:
- logger.info('%s is over %s days old; not updating' % (al_title, pause_delta))
- skip_log = 1
- new_releases = 0
+ if helpers.get_age(today) - helpers.get_age(check_release_date[0]) < pause_delta:
+ logger.info("Now updating: " + rg['title'])
+ new_releases = mb.get_new_releases(rgid,includeExtras)
+ else:
+ logger.info('%s is over %s days old; not updating' % (al_title, pause_delta))
+ skip_log = 1
+ new_releases = 0
+ else:
+ logger.info("Now adding/updating: " + rg['title'])
+ new_releases = mb.get_new_releases(rgid,includeExtras)
+
+ if force_repackage == 1:
+ new_releases = -1
+ logger.info('Forcing repackage of %s, since dB groups have been removed' % al_title)
+ else:
+ new_releases = new_releases
else:
logger.info("Now adding/updating: " + rg['title'])
- new_releases = mb.get_new_releases(rgid,includeExtras)
-
- if force_repackage == 1:
- new_releases = -1
- logger.info('Forcing repackage of %s, since dB groups have been removed' % al_title)
- else:
- new_releases = new_releases
+ new_releases = mb.get_new_releases(rgid,includeExtras,forcefull)
#What this does is adds new releases per artist to the allalbums + alltracks databases
#new_releases = mb.get_new_releases(rgid,includeExtras)
@@ -411,9 +415,12 @@ def addArtisttoDB(artistid, extrasonly=False):
newValueDict['Status'] = "Skipped"
#Only update albums table with hybrid release if user didn't choose an alternate release
- check_alternate_release = myDB.action("SELECT AlbumID, ReleaseID FROM albums WHERE ArtistID=? AND AlbumID=?", ([artistid], [rg['id']])).fetchone()
- if check_alternate_release[0] == check_alternate_release[1]:
- myDB.upsert("albums", newValueDict, controlValueDict)
+ check_alternate_release = myDB.action("SELECT AlbumID, ReleaseID FROM albums WHERE ArtistID=? AND AlbumID=?", (artistid, rg['id'])).fetchone()
+ if check_alternate_release:
+ if check_alternate_release[0] == check_alternate_release[1]:
+ myDB.upsert("albums", newValueDict, controlValueDict)
+ else:
+ myDB.upsert("albums", newValueDict, controlValueDict)
myDB.action('DELETE from tracks WHERE AlbumID=?', [rg['id']])
tracks = myDB.action('SELECT * from alltracks WHERE ReleaseID=?', [releaseid]).fetchall()
@@ -441,9 +448,12 @@ def addArtisttoDB(artistid, extrasonly=False):
}
#Only update tracks table with hybrid release if user didn't choose an alternate release
- check_alternate_release = myDB.action("SELECT AlbumID, ReleaseID FROM albums WHERE ArtistID=? AND AlbumID=?", ([artistid], [rg['id']])).fetchone()
- if check_alternate_release[0] == check_alternate_release[1]:
- myDB.upsert("tracks", newValueDict, controlValueDict)
+ check_alternate_release = myDB.action("SELECT AlbumID, ReleaseID FROM albums WHERE ArtistID=? AND AlbumID=?", (artistid, rg['id'])).fetchone()
+ if check_alternate_release:
+ if check_alternate_release[0] == check_alternate_release[1]:
+ myDB.upsert("tracks", newValueDict, controlValueDict)
+ else:
+ myDB.upsert("tracks", newValueDict, controlValueDict)
# Mark albums as downloaded if they have at least 80% (by default, configurable) of the album
have_track_count = len(myDB.select('SELECT * from tracks WHERE AlbumID=? AND Location IS NOT NULL', [rg['id']]))
diff --git a/headphones/mb.py b/headphones/mb.py
index 742f628f..4f1d0e29 100644
--- a/headphones/mb.py
+++ b/headphones/mb.py
@@ -332,7 +332,7 @@ def getRelease(releaseid, include_artist_info=True):
return release
-def get_new_releases(rgid,includeExtras=False):
+def get_new_releases(rgid,includeExtras=False,forcefull=False):
myDB = db.DBConnection()
results = []
@@ -388,7 +388,7 @@ def get_new_releases(rgid,includeExtras=False):
artistid = unicode(releasedata['artist-credit'][0]['artist']['id'])
album_checker = myDB.action('SELECT * from allalbums WHERE ReleaseID=?', [rel_id_check]).fetchone()
- if not album_checker:
+ if not album_checker or forcefull:
release['AlbumTitle'] = unicode(releasedata['title'])
release['AlbumID'] = unicode(rgid)
release['AlbumASIN'] = unicode(releasedata['asin']) if 'asin' in releasedata else None
diff --git a/headphones/updater.py b/headphones/updater.py
index c80eec0b..1088af58 100644
--- a/headphones/updater.py
+++ b/headphones/updater.py
@@ -17,7 +17,7 @@ import headphones
from headphones import logger, db, importer
-def dbUpdate():
+def dbUpdate(forcefull=False):
myDB = db.DBConnection()
@@ -28,6 +28,6 @@ def dbUpdate():
for artist in activeartists:
artistid = artist[0]
- importer.addArtisttoDB(artistid)
+ importer.addArtisttoDB(artistid=artistid, extrasonly=False, forcefull=forcefull)
logger.info('Update complete')
diff --git a/headphones/webserve.py b/headphones/webserve.py
index 0811e68d..82fe8fa2 100644
--- a/headphones/webserve.py
+++ b/headphones/webserve.py
@@ -150,7 +150,7 @@ class WebInterface(object):
newValueDict = {'IncludeExtras': 1,
'Extras': extras}
myDB.upsert("artists", newValueDict, controlValueDict)
- threading.Thread(target=importer.addArtisttoDB, args=[ArtistID, True]).start()
+ threading.Thread(target=importer.addArtisttoDB, args=[ArtistID, True, False]).start()
raise cherrypy.HTTPRedirect("artistPage?ArtistID=%s" % ArtistID)
getExtras.exposed = True
@@ -403,10 +403,16 @@ class WebInterface(object):
def forceUpdate(self):
from headphones import updater
- threading.Thread(target=updater.dbUpdate).start()
+ threading.Thread(target=updater.dbUpdate, args=[False]).start()
raise cherrypy.HTTPRedirect("home")
forceUpdate.exposed = True
+ def forceFullUpdate(self):
+ from headphones import updater
+ threading.Thread(target=updater.dbUpdate, args=[True]).start()
+ raise cherrypy.HTTPRedirect("home")
+ forceFullUpdate.exposed = True
+
def forceSearch(self):
from headphones import searcher
threading.Thread(target=searcher.searchforalbum).start()