diff --git a/maloja/__main__.py b/maloja/__main__.py index 12a77c5..0fa7e7d 100644 --- a/maloja/__main__.py +++ b/maloja/__main__.py @@ -160,6 +160,14 @@ def print_info(): except Exception: print("Could not determine system information.") + +def print_settings(): + print_header_info() + maxlen = max(len(k) for k in conf.malojaconfig) + for k in conf.malojaconfig: + print(col['lightblue'](k.ljust(maxlen+2)),conf.malojaconfig[k]) + + @mainfunction({"l":"level","v":"version","V":"version"},flags=['version','include_images','prefer_existing'],shield=True) def main(*args,**kwargs): @@ -180,7 +188,8 @@ def main(*args,**kwargs): "apidebug":apidebug.run, # maloja apidebug "parsealbums":tasks.parse_albums, # maloja parsealbums --strategy majority # aux - "info":print_info + "info":print_info, + "settings":print_settings } if "version" in kwargs: diff --git a/maloja/thirdparty/musicbrainz.py b/maloja/thirdparty/musicbrainz.py index f16229b..56e0be1 100644 --- a/maloja/thirdparty/musicbrainz.py +++ b/maloja/thirdparty/musicbrainz.py @@ -33,14 +33,15 @@ class MusicBrainz(MetadataInterface): self.lock.acquire() try: artists, title = track - artiststring = ", ".join(artists) #Join artists collection into string - titlestring = title + searchstr = f'recording:"{title}"' + for artist in artists: + searchstr += f' artist:"{artist}"' querystr = urllib.parse.urlencode({ "fmt":"json", - "query":"{title} {artist}".format(artist=artiststring,title=titlestring) + "query":searchstr }) req = urllib.request.Request(**{ - "url":"https://musicbrainz.org/ws/2/release?" + querystr, + "url":"https://musicbrainz.org/ws/2/recording?" + querystr, "method":"GET", "headers":{ "User-Agent":self.useragent @@ -49,15 +50,27 @@ class MusicBrainz(MetadataInterface): response = urllib.request.urlopen(req) responsedata = response.read() data = json.loads(responsedata) - mbid = data["releases"][0]["id"] - response = urllib.request.urlopen( - "https://coverartarchive.org/release/{mbid}?fmt=json".format(mbid=mbid) - ) - responsedata = response.read() - data = json.loads(responsedata) - imgurl = self.metadata_parse_response_track(data) - if imgurl is not None: imgurl = self.postprocess_url(imgurl) - return imgurl + entity = data["recordings"][0]["releases"][0] + coverartendpoint = "release" + while True: + mbid = entity["id"] + try: + response = urllib.request.urlopen( + f"https://coverartarchive.org/{coverartendpoint}/{mbid}?fmt=json" + ) + responsedata = response.read() + data = json.loads(responsedata) + imgurl = self.metadata_parse_response_track(data) + except: + imgurl = None + if imgurl is None: + entity = entity["release-group"] + # this will raise an error so we don't stay in the while loop forever + coverartendpoint = "release-group" + continue + + imgurl = self.postprocess_url(imgurl) + return imgurl except Exception: return None