Skip to content

Commit

Permalink
PICARD-2584: Avoid loading same recording ID twice in RecordingResolver
Browse files Browse the repository at this point in the history
  • Loading branch information
phw committed Dec 21, 2023
1 parent 995e787 commit 9ff8e76
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions picard/acoustid/recordings.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ def __init__(self, ws: WebService, doc: dict, callback: callable) -> None:
self._doc = doc
self._callback = callback
self._recording_map = defaultdict(dict)
self._recording_cache = dict()
self._missing_metadata = deque()

def resolve(self) -> None:
Expand All @@ -74,16 +75,19 @@ def resolve(self) -> None:
result_score = get_score(result)
acoustid = result.get('id')
for recording in recordings:
mbid = recording.get('id')
sources = recording.get('sources', 1)
if recording_has_metadata(recording):
mb_recording = parse_recording(recording)
self._recording_cache[mbid] = mb_recording
self._recording_map[acoustid][recording['id']] = Recording(
recording=parse_recording(recording),
recording=mb_recording,
result_score=result_score,
sources=sources,
)
else:
self._missing_metadata.append(IncompleteRecording(
mbid=recording.get('id'),
mbid=mbid,
acoustid=acoustid,
result_score=result_score,
sources=sources,
Expand All @@ -99,11 +103,16 @@ def _load_recordings(self):
self._send_results()
return

self._mbapi.get_track_by_id(
self._missing_metadata[0].mbid,
self._recording_request_finished,
inc=['release-groups', 'releases'],
)
mbid = self._missing_metadata[0].mbid
if mbid in self._recording_cache:
mb_recording = self._recording_cache[mbid]
self._recording_request_finished(mb_recording, None, None)
else:
self._mbapi.get_track_by_id(
self._missing_metadata[0].mbid,
self._recording_request_finished,
inc=['release-groups', 'releases'],
)

def _recording_request_finished(self, mb_recording, http, error):
recording = self._missing_metadata.popleft()
Expand All @@ -116,6 +125,7 @@ def _recording_request_finished(self, mb_recording, http, error):
return

mbid = mb_recording.get('id')
self._recording_cache[mbid] = mb_recording
recording_dict = self._recording_map[recording.acoustid]
if mbid:
if mbid not in recording_dict:
Expand Down

0 comments on commit 9ff8e76

Please sign in to comment.