From d8cbd583aae41c1c4cbb9e5421ecbbc6ac355e34 Mon Sep 17 00:00:00 2001 From: Alexis Jeandeau Date: Sun, 20 Feb 2022 19:04:09 +0900 Subject: [PATCH] Update the scripts for Picard 2.0+ --- unicode-normalisation.py | 2 +- use-pseudo-releases.py | 77 ++++++++++++++++++---------------------- 2 files changed, 36 insertions(+), 43 deletions(-) diff --git a/unicode-normalisation.py b/unicode-normalisation.py index ae28b8d..50500e3 100644 --- a/unicode-normalisation.py +++ b/unicode-normalisation.py @@ -2,7 +2,7 @@ PLUGIN_AUTHOR = '' PLUGIN_DESCRIPTION = 'Adds $nfc(text) and $nfd(text) functions for converting strings to NFC or NFD' PLUGIN_VERSION = "0.1" -PLUGIN_API_VERSIONS = ["1.0"] +PLUGIN_API_VERSIONS = ["1.0", "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"] from picard.script import register_script_function import unicodedata diff --git a/use-pseudo-releases.py b/use-pseudo-releases.py index 0f2ca07..16b77c3 100644 --- a/use-pseudo-releases.py +++ b/use-pseudo-releases.py @@ -1,14 +1,12 @@ PLUGIN_NAME = 'Fetch latin script tracklists using translation/transliteration relationships' PLUGIN_AUTHOR = '' PLUGIN_DESCRIPTION = '''Fetch latin script tracklists using translation/transliteration relationships''' -PLUGIN_VERSION = '0.1' -PLUGIN_API_VERSIONS = ['0.12', '0.15', '0.16', '1.1'] +PLUGIN_VERSION = '0.2' +PLUGIN_API_VERSIONS = ['2.0', '2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7'] +from functools import partial from picard.metadata import register_album_metadata_processor, register_track_metadata_processor -from picard.album import Album -from picard.util import partial -from picard.mbxml import release_to_metadata, artist_credit_from_node -from PyQt4.QtCore import QUrl +from picard.mbjson import artist_credit_from_node from picard.config import Config script = "Latn" @@ -22,76 +20,71 @@ def _pseudo_release_downloaded(album, metadata, original_id, document, http, err try: if error: - album.log.error("%r", unicode(http.errorString())) + album.log.error("%r", http.errorString()) else: try: - release_node = document.metadata[0].release[0] - if release_node.text_representation[0].script[0].text != script: + if document["text-representation"]["script"] != script: return - album_latin = release_node.title[0].text + album_latin = document["title"] metadata["album"] = album_latin tracks['album'] = album_latin - artistcredit, tmp = artist_credit_from_node(release_node.artist_credit[0], config) + artistcredit, _, _, _ = artist_credit_from_node(document['artist-credit']) metadata["albumartist"] = artistcredit tracks["artist"] = artistcredit mediumpos = 1 tracks["mediums"] = {} - for i, node in enumerate(release_node.medium_list[0].medium): + for medium in document["media"]: + mediumpos = medium["position"] try: - tracks["mediums"][ mediumpos ] = release_node.medium_list[0].medium[i].title[0].text + tracks["media"][mediumpos] = medium["title"] except: pass tracks[mediumpos] = {} - trackpos = 1 - for j, node in enumerate(release_node.medium_list[0].medium[i].track_list[0].track): + for track in medium["tracks"]: + trackpos = track["position"] title = "" try: - title = node.title[0].text + title = track["title"] except: - title = node.recording[0].title[0].text + title = track["recording"]["title"] tartist = "" try: - tartist, tmp = artist_credit_from_node(node.artist_credit[0], config) + tartist, _, _, _ = artist_credit_from_node(track["artist-credit"]) except: - tartist, tmp = artist_credit_from_node(node.recording[0].artist_credit[0], config) + tartist, _, _, _ = artist_credit_from_node(track["recording"]["artist-credit"]) - tracks[ mediumpos ][ trackpos ] = {}; - tracks[ mediumpos ][ trackpos ]["artist"] = tartist + tracks[mediumpos][trackpos] = {} + tracks[mediumpos][trackpos]["artist"] = tartist - tracks[ mediumpos ][ trackpos ]["title"] = title; - tracks[ mediumpos ][ trackpos ]["mbid"] = node.recording[0].id; - - trackpos = trackpos + 1 - mediumpos = mediumpos + 1 - except: + tracks[mediumpos][trackpos]["title"] = title + tracks[mediumpos][trackpos]["mbid"] = track["recording"]["id"] + except Exception as e: error = True - album.log.error("some error occurred :(") + album.log.error("some error occurred: %s", e) finally: album._requests -= 1 album._finalize_loading(None) -def fetch_transliterations(album, metadata, release_node): +def fetch_transliterations(album, metadata, release): global tracks tracks = {} tracks['has_transliteration'] = False if metadata['releasestatus'] != 'pseudo-release' and metadata['script'] != script: - if release_node.children.has_key('relation_list'): - for relation_list in release_node.relation_list: - if relation_list.target_type == 'release': - for relation in relation_list.relation: - try: - direction = relation.direction if hasattr(relation, 'direction') else '' - if (relation.type == 'transl-tracklisting' and direction != 'backward'): - album._requests += 1 - album.tagger.xmlws.get_release_by_id(relation.target[0].text, - partial(_pseudo_release_downloaded, album, metadata, relation.target[0].text), - ['recordings', 'artist-credits']) - except AttributeError: pass + for relation in release['relations']: + if relation['target-type'] == 'release': + try: + direction = relation.get('direction', '') + if (relation["type"] == 'transl-tracklisting' and direction != 'backward'): + album._requests += 1 + album.tagger.mb_api.get_release_by_id(relation['release']['id'], + partial(_pseudo_release_downloaded, album, metadata, relation['release']['id']), + ['recordings', 'artist-credits']) + except AttributeError: pass register_album_metadata_processor(fetch_transliterations) @@ -109,7 +102,7 @@ def set_transliterations(tagger, metadata, track, release): except: pass metadata["albumartist"] = tracks["artist"] try: - if tracks[ int(metadata['discnumber']) ][ int(metadata['tracknumber']) ]["mbid"] == metadata["musicbrainz_trackid"]: + if tracks[ int(metadata['discnumber']) ][ int(metadata['tracknumber']) ]["mbid"] == metadata["musicbrainz_recordingid"]: metadata['title'] = tracks[ int(metadata['discnumber']) ][ int(metadata['tracknumber']) ]["title"] else: tagger.log.error("MBID for %s (%s) does not match MBID for %s (%s).", tracks[ int(metadata['discnumber']) ][ int(metadata['tracknumber']) ]["title"], tracks[ int(metadata['discnumber']) ][ int(metadata['tracknumber']) ]["mbid"], metadata['title'], metadata["musicbrainz_trackid"])