Improve album disambiguation handling, more stripping logic
This commit is contained in:
57
__init__.py
57
__init__.py
@@ -12,41 +12,52 @@ def process_track(_, metadata, track, __):
|
|||||||
explicit_keywords = config.setting["ecd2itat_explicit_keywords"] or DEFAULT_EXPLICIT_KEYWORDS
|
explicit_keywords = config.setting["ecd2itat_explicit_keywords"] or DEFAULT_EXPLICIT_KEYWORDS
|
||||||
if isinstance(explicit_keywords, str):
|
if isinstance(explicit_keywords, str):
|
||||||
explicit_keywords = [kw.strip() for kw in explicit_keywords.split(",")]
|
explicit_keywords = [kw.strip() for kw in explicit_keywords.split(",")]
|
||||||
|
explicit_keywords = sorted((kw for kw in explicit_keywords if kw), key=len, reverse=True)
|
||||||
|
|
||||||
clean_keywords = config.setting["ecd2itat_clean_keywords"] or DEFAULT_CLEAN_KEYWORDS
|
clean_keywords = config.setting["ecd2itat_clean_keywords"] or DEFAULT_CLEAN_KEYWORDS
|
||||||
if isinstance(clean_keywords, str):
|
if isinstance(clean_keywords, str):
|
||||||
clean_keywords = [kw.strip() for kw in clean_keywords.split(",")]
|
clean_keywords = [kw.strip() for kw in clean_keywords.split(",")]
|
||||||
|
clean_keywords = sorted((kw for kw in clean_keywords if kw), key=len, reverse=True)
|
||||||
|
|
||||||
explicit_match = next((kw for kw in explicit_keywords if kw.lower() in disambiguation.strip().lower()), None)
|
disambiguation_lc = disambiguation.strip().lower()
|
||||||
clean_match = next((kw for kw in clean_keywords if kw.lower() in disambiguation.strip().lower()), None)
|
album_disambiguation_lc = album_disambiguation.strip().lower()
|
||||||
|
|
||||||
|
explicit_match = next((kw for kw in explicit_keywords if kw.lower() in disambiguation_lc), None)
|
||||||
|
clean_match = next((kw for kw in clean_keywords if kw.lower() in disambiguation_lc), None)
|
||||||
|
album_explicit_match = next((kw for kw in explicit_keywords if kw.lower() in album_disambiguation_lc), None)
|
||||||
|
album_clean_match = next((kw for kw in clean_keywords if kw.lower() in album_disambiguation_lc), None)
|
||||||
|
|
||||||
stripped_disambiguation = disambiguation
|
stripped_disambiguation = disambiguation
|
||||||
stripped_album_disambiguation = album_disambiguation
|
stripped_album_disambiguation = album_disambiguation
|
||||||
|
|
||||||
if explicit_match:
|
if explicit_match or album_explicit_match:
|
||||||
metadata["itunesadvisory"] = iTunesAdvisory.EXPLICIT.value
|
metadata["itunesadvisory"] = iTunesAdvisory.EXPLICIT.value
|
||||||
|
|
||||||
if config.setting["ecd2itat_save_rtng"]:
|
if config.setting["ecd2itat_save_rtng"]:
|
||||||
metadata["rtng"] = rtng.EXPLICIT.value
|
metadata["rtng"] = rtng.EXPLICIT.value
|
||||||
|
|
||||||
if config.setting["ecd2itat_strip_keyword_from_disambiguation"]:
|
if config.setting["ecd2itat_strip_keyword_from_disambiguation"]:
|
||||||
stripped_disambiguation = strip_keyword_from_disambiguation(disambiguation, explicit_match)
|
if explicit_match:
|
||||||
stripped_album_disambiguation = strip_keyword_from_disambiguation(album_disambiguation, explicit_match)
|
stripped_disambiguation = strip_keyword_from_disambiguation(disambiguation, explicit_match)
|
||||||
elif clean_match:
|
if album_explicit_match:
|
||||||
|
stripped_album_disambiguation = strip_keyword_from_disambiguation(album_disambiguation, album_explicit_match)
|
||||||
|
elif clean_match or album_clean_match:
|
||||||
metadata["itunesadvisory"] = iTunesAdvisory.CLEAN.value
|
metadata["itunesadvisory"] = iTunesAdvisory.CLEAN.value
|
||||||
|
|
||||||
if (config.setting["ecd2itat_save_rtng"]):
|
if (config.setting["ecd2itat_save_rtng"]):
|
||||||
metadata["rtng"] = rtng.CLEAN.value
|
metadata["rtng"] = rtng.CLEAN.value
|
||||||
|
|
||||||
if config.setting["ecd2itat_strip_keyword_from_disambiguation"]:
|
if config.setting["ecd2itat_strip_keyword_from_disambiguation"]:
|
||||||
stripped_disambiguation = strip_keyword_from_disambiguation(disambiguation, clean_match)
|
if clean_match:
|
||||||
stripped_album_disambiguation = strip_keyword_from_disambiguation(album_disambiguation, clean_match)
|
stripped_disambiguation = strip_keyword_from_disambiguation(disambiguation, clean_match)
|
||||||
|
if album_clean_match:
|
||||||
|
stripped_album_disambiguation = strip_keyword_from_disambiguation(album_disambiguation, album_clean_match)
|
||||||
|
|
||||||
metadata["~recordingcomment"] = stripped_disambiguation
|
metadata["~recordingcomment"] = stripped_disambiguation
|
||||||
metadata["~releasecomment"] = stripped_album_disambiguation
|
metadata["~releasecomment"] = stripped_album_disambiguation
|
||||||
|
|
||||||
def strip_keyword_from_disambiguation(disambiguation, keyword):
|
def strip_keyword_from_disambiguation(disambiguation, keyword):
|
||||||
# If the keyword is the entire disambiguation, return an empty string (e,g. "explicit" becomes "")
|
# keyword is the entire disambiguation (e,g. "explicit" becomes "")
|
||||||
if disambiguation.strip().lower() == keyword.lower():
|
if disambiguation.strip().lower() == keyword.lower():
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@@ -54,6 +65,30 @@ def strip_keyword_from_disambiguation(disambiguation, keyword):
|
|||||||
if disambiguation.strip().lower().startswith(keyword.lower() + ","):
|
if disambiguation.strip().lower().startswith(keyword.lower() + ","):
|
||||||
return disambiguation[len(keyword)+1:].strip()
|
return disambiguation[len(keyword)+1:].strip()
|
||||||
|
|
||||||
|
# keyword is separated by a dash in the beginning of the disambiguation (e.g. "explicit - original mix" becomes "original mix")
|
||||||
|
if disambiguation.strip().lower().startswith(keyword.lower() + " -"):
|
||||||
|
return disambiguation[len(keyword)+2:].strip()
|
||||||
|
|
||||||
|
# keyword is separated by a dash in the end of the disambiguation (e.g. "original mix - explicit" becomes "original mix")
|
||||||
|
if disambiguation.strip().lower().endswith("- " + keyword.lower()):
|
||||||
|
return disambiguation[:-len(keyword)-2].strip()
|
||||||
|
|
||||||
|
# keyword is separated by a dash in the middle of the disambiguation (e.g. "album version - explicit - remix" becomes "album version - remix")
|
||||||
|
if "-" + keyword.lower() + "-" in disambiguation.strip().lower():
|
||||||
|
return disambiguation.replace("-" + keyword + "-", "-").strip()
|
||||||
|
|
||||||
|
# keyword is at the start of the disambiguation followed by a space (e.g. "explicit album version" becomes "album version")
|
||||||
|
if disambiguation.strip().lower().startswith(keyword.lower() + " "):
|
||||||
|
return disambiguation[len(keyword):].strip()
|
||||||
|
|
||||||
|
# keyword is at the end of the disambiguation preceded by a space (e.g. "album version explicit" becomes "album version")
|
||||||
|
if disambiguation.strip().lower().endswith(" " + keyword.lower()):
|
||||||
|
return disambiguation[:-len(keyword)].strip()
|
||||||
|
|
||||||
|
# keyword is a standalone word in the disambiguation (e.g. "original explicit mix" becomes "original mix")
|
||||||
|
if f" {keyword.lower()} " in disambiguation.strip().lower():
|
||||||
|
return disambiguation.replace(f" {keyword} ", " ").strip()
|
||||||
|
|
||||||
# keyword is at the end of the disambiguation (e.g. "original mix,explicit" becomes "original mix")
|
# keyword is at the end of the disambiguation (e.g. "original mix,explicit" becomes "original mix")
|
||||||
if disambiguation.strip().lower().endswith("," + keyword.lower()):
|
if disambiguation.strip().lower().endswith("," + keyword.lower()):
|
||||||
return disambiguation[:-len(keyword)-1].strip()
|
return disambiguation[:-len(keyword)-1].strip()
|
||||||
@@ -66,6 +101,10 @@ def strip_keyword_from_disambiguation(disambiguation, keyword):
|
|||||||
if "," + keyword.lower() + "," in disambiguation.strip().lower():
|
if "," + keyword.lower() + "," in disambiguation.strip().lower():
|
||||||
return disambiguation.replace("," + keyword + ",", ",").strip()
|
return disambiguation.replace("," + keyword + ",", ",").strip()
|
||||||
|
|
||||||
|
# keyword is in between brackets in the disambiguation (e.g. "original mix (explicit)" becomes "original mix")
|
||||||
|
if f"({keyword.lower()})" in disambiguation.strip().lower():
|
||||||
|
return disambiguation.replace(f"({keyword})", "").strip()
|
||||||
|
|
||||||
# Return the disambiguation unchanged if the keyword is not found or cannot be stripped
|
# Return the disambiguation unchanged if the keyword is not found or cannot be stripped
|
||||||
log.debug(f"Keyword '{keyword}' not found in disambiguation '{disambiguation}' for stripping")
|
log.debug(f"Keyword '{keyword}' not found in disambiguation '{disambiguation}' for stripping")
|
||||||
return disambiguation
|
return disambiguation
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from picard.config import BoolOption, TextOption, Option
|
|||||||
PLUGIN_NAME = "ecd2iTat"
|
PLUGIN_NAME = "ecd2iTat"
|
||||||
PLUGIN_AUTHOR = "cy1der"
|
PLUGIN_AUTHOR = "cy1der"
|
||||||
PLUGIN_DESCRIPTION = "Convert disambiguations containing \"explicit\"/\"clean\" (and others) keywords to proper tags so clients can display the 🅴/🅲 symbol"
|
PLUGIN_DESCRIPTION = "Convert disambiguations containing \"explicit\"/\"clean\" (and others) keywords to proper tags so clients can display the 🅴/🅲 symbol"
|
||||||
PLUGIN_VERSION = "1.0.1"
|
PLUGIN_VERSION = "1.0.2"
|
||||||
PLUGIN_API_VERSIONS = ["2.7", "2.8", "2.9", "2.10", "2.11", "2.12", "2.13"]
|
PLUGIN_API_VERSIONS = ["2.7", "2.8", "2.9", "2.10", "2.11", "2.12", "2.13"]
|
||||||
PLUGIN_LICENSE = "GPL-2.0-or-later"
|
PLUGIN_LICENSE = "GPL-2.0-or-later"
|
||||||
PLUGIN_LICENSE_URL = "https://www.gnu.org/licenses/gpl-2.0.html"
|
PLUGIN_LICENSE_URL = "https://www.gnu.org/licenses/gpl-2.0.html"
|
||||||
|
|||||||
Reference in New Issue
Block a user