diff --git a/headphones/mb.py b/headphones/mb.py index eacc937e..c598c852 100644 --- a/headphones/mb.py +++ b/headphones/mb.py @@ -9,7 +9,7 @@ import lib.musicbrainz2.utils as u from lib.musicbrainz2.webservice import WebServiceError -from headphones import logger +from headphones import logger, db from headphones.helpers import multikeysort q = ws.Query() @@ -21,6 +21,7 @@ def findArtist(name, limit=1): artistlist = [] attempt = 0 + artistResults = None while attempt < 5: @@ -35,18 +36,29 @@ def findArtist(name, limit=1): time.sleep(1) if not artistResults: - return False - + return False for result in artistResults: + + if result.artist.name != result.artist.getUniqueName() and limit == 1: + + logger.info('Found an artist with a disambiguation: %s - doing an album based search' % name) + artistdict = findArtistbyAlbum(name) + + if not artistdict: + return False + + else: + artistlist.append(artistdict) - artistlist.append({ - 'name': result.artist.name, - 'uniquename': result.artist.getUniqueName(), - 'id': u.extractUuid(result.artist.id), - 'url': result.artist.id, - 'score': result.score - }) + else: + artistlist.append({ + 'name': result.artist.name, + 'uniquename': result.artist.getUniqueName(), + 'id': u.extractUuid(result.artist.id), + 'url': result.artist.id, + 'score': result.score + }) return artistlist @@ -58,7 +70,7 @@ def getArtist(artistid): #Get all official release groups inc = ws.ArtistIncludes(releases=(m.Release.TYPE_OFFICIAL, m.Release.TYPE_ALBUM), releaseGroups=True) - + artist = None attempt = 0 while attempt < 5: @@ -107,7 +119,7 @@ def getReleaseGroup(rgid): releaselist = [] inc = ws.ReleaseGroupIncludes(releases=True) - + releaseGroup = None attempt = 0 while attempt < 5: @@ -129,7 +141,7 @@ def getReleaseGroup(rgid): for release in releaseGroup.releases: inc = ws.ReleaseIncludes(tracks=True) - + releaseResult = None attempt = 0 while attempt < 5: @@ -170,7 +182,7 @@ def getRelease(releaseid): release = {} inc = ws.ReleaseIncludes(tracks=True, releaseEvents=True) - + results = None attempt = 0 while attempt < 5: @@ -209,7 +221,45 @@ def getRelease(releaseid): release['tracks'] = tracks return release + +def findArtistbyAlbum(name): + + myDB = db.DBConnection() + artist = myDB.action('SELECT AlbumTitle from have WHERE ArtistName=?', [name]).fetchone() + + term = '"'+artist['AlbumTitle']+'" AND artist:"'+name+'"' + + f = ws.ReleaseGroupFilter(query=term, limit=1) + results = None + attempt = 0 + + while attempt < 5: + + try: + results = q.getReleaseGroups(f) + break + except WebServiceError, e: + logger.warn('Attempt to retrieve information for %s from MusicBrainz failed: %s' % (releaseResult.title, e)) + attempt += 1 + time.sleep(1) + + time.sleep(1) + + if not results: + return False + + artist_dict = {} + + for result in results: + releaseGroup = result.releaseGroup + artist_dict['name'] = releaseGroup.artist.name + artist_dict['uniquename'] = releaseGroup.artist.getUniqueName() + artist_dict['id'] = u.extractUuid(releaseGroup.artist.id) + artist_dict['url'] = releaseGroup.artist.id + artist_dict['score'] = result.score + + return artist_dict def getExtras(artistid): diff --git a/headphones/searcher.py b/headphones/searcher.py index 7ae43037..1c146d08 100644 --- a/headphones/searcher.py +++ b/headphones/searcher.py @@ -188,8 +188,9 @@ def searchNZB(albumid=None): bestqual = sorted(newlist, key=lambda title: title[3])[0] - except TypeError: + except Exception, e: + logger.debug('Error: %s' % str(e)) logger.info('No track information for %s - %s. Defaulting to highest quality' % (albums[0], albums[1])) bestqual = sorted(resultlist, key=lambda title: title[1], reverse=True)[0] diff --git a/headphones/webserve.py b/headphones/webserve.py index 17b81673..e40bc7de 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -82,7 +82,11 @@ class WebInterface(object): page.append(templates._footer % headphones.CURRENT_VERSION) else: - page.append("""
Add some artists to the database!
""") + have = myDB.select('SELECT ArtistName from have') + if len(have): + page.append("""
Scanning...
""") + else: + page.append("""
Add some artists to the database!
""") return page home.exposed = True