diff --git a/picard/acoustid/__init__.py b/picard/acoustid/__init__.py index 1d6d393ed..9b4cd28cd 100644 --- a/picard/acoustid/__init__.py +++ b/picard/acoustid/__init__.py @@ -33,6 +33,13 @@ from picard.const.sys import IS_FROZEN from picard.util import find_executable +def get_score(node): + try: + return float(node.get('score', 1.0)) + except (TypeError, ValueError): + return 1.0 + + class AcoustIDClient(QtCore.QObject): def __init__(self): @@ -76,18 +83,21 @@ class AcoustIDClient(QtCore.QObject): recording_list = doc['recordings'] = [] status = document['status'] if status == 'ok': - results = document['results'] - if results: - result = results[0] - file.metadata['acoustid_id'] = result['id'] - if 'recordings' in result and result['recordings']: - max_sources = max([r.get('sources', 1) for r in result['recordings']] + [1]) - for recording in result['recordings']: - parsed_recording = parse_recording(recording) - if parsed_recording is not None: - parsed_recording['score'] = recording.get('sources', 1) / max_sources * 100 - recording_list.append(parsed_recording) - log.debug("AcoustID: Lookup successful for '%s'", file.filename) + results = document.get('results') or [] + for result in results: + recordings = result.get('recordings') or [] + max_sources = max([r.get('sources', 1) for r in recordings] + [1]) + result_score = get_score(result) + for recording in recordings: + parsed_recording = parse_recording(recording) + if parsed_recording is not None: + # Calculate a score based on result score and sources for this + # recording relative to other recordings in this result + score = recording.get('sources', 1) / max_sources * 100 + parsed_recording['score'] = score * result_score + parsed_recording['acoustid'] = result['id'] + recording_list.append(parsed_recording) + log.debug("AcoustID: Lookup successful for '%s'", file.filename) else: mparms = { 'error': document['error']['message'], diff --git a/picard/file.py b/picard/file.py index a261b7a0f..fcdcc2abd 100644 --- a/picard/file.py +++ b/picard/file.py @@ -675,6 +675,7 @@ class File(QtCore.QObject, Item): statusbar(N_("File '%(filename)s' identified!")) (track_id, release_group_id, release_id, node) = trackmatch if lookuptype == File.LOOKUP_ACOUSTID: + self.metadata['acoustid_id'] = node.get('acoustid') self.tagger.acoustidmanager.add(self, track_id) if release_group_id is not None: releasegroup = self.tagger.get_release_group_by_id(release_group_id) @@ -700,13 +701,12 @@ class File(QtCore.QObject, Item): return None else: track_id = best_match.result.track['id'] - release_group_id, release_id, node = None, None, None + release_group_id, release_id = None, None if best_match.result.release: release_group_id = best_match.result.releasegroup['id'] release_id = best_match.result.release['id'] - elif 'title' in best_match.result.track: - node = best_match.result.track + node = best_match.result.track return (track_id, release_group_id, release_id, node) def lookup_metadata(self):