|
Alex Lancaster |
d746224 |
PLUGIN_NAME = 'Title sort names'
|
|
Alex Lancaster |
d746224 |
PLUGIN_AUTHOR = 'Jacob Rask'
|
|
Alex Lancaster |
d746224 |
PLUGIN_DESCRIPTION = 'Guesses title and album sortnames (language specific) and adds as titlesort and albumsort tags.'
|
|
Alex Lancaster |
d746224 |
PLUGIN_VERSION = "0.1.4"
|
|
Alex Lancaster |
d746224 |
PLUGIN_API_VERSIONS = ["0.12", "0.15"]
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
from picard.metadata import register_track_metadata_processor
|
|
Alex Lancaster |
d746224 |
from picard.metadata import register_album_metadata_processor
|
|
Alex Lancaster |
d746224 |
import re
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
# define articles
|
|
Alex Lancaster |
d746224 |
_articles = {}
|
|
Alex Lancaster |
d746224 |
_articles['deu'] = ['Der ', 'Das ', 'Die ', 'Eine? '] # German
|
|
Alex Lancaster |
d746224 |
_articles['eng'] = ['Th[ae] ', 'Da ', 'An? '] # English
|
|
Alex Lancaster |
d746224 |
_articles['esp'] = ['El ', 'La ', 'L[ao]s ', 'Una? ', 'Un[ao]s '] # Spanish
|
|
Alex Lancaster |
d746224 |
_articles['fra'] = ["Les? ", "La ", "L'", "Une? ", "Des "] # French
|
|
Alex Lancaster |
d746224 |
_articles['ita'] = ["Il ", "L[aeo] ", "L'", "I ", "Gli ", "Un[ao]? ", "Un'"] # Italian
|
|
Alex Lancaster |
d746224 |
_articles['swe'] = ['De[nt]? ', 'Dom ', 'E(n|tt) '] # Swedish
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
# compile sort language regular expressions
|
|
Alex Lancaster |
d746224 |
_re_articles = {}
|
|
Alex Lancaster |
d746224 |
_regmul = ''
|
|
Alex Lancaster |
d746224 |
for lang, a in _articles.iteritems():
|
|
Alex Lancaster |
d746224 |
reg = ''
|
|
Alex Lancaster |
d746224 |
for i in range(len(a)):
|
|
Alex Lancaster |
d746224 |
reg = '|^' + _articles[lang][i] + reg
|
|
Alex Lancaster |
d746224 |
_re_articles[lang] = re.compile(reg[1:])
|
|
Alex Lancaster |
d746224 |
_regmul = _regmul + reg
|
|
Alex Lancaster |
d746224 |
# all articles are collected and used for "multiple languages"
|
|
Alex Lancaster |
d746224 |
_re_articles['mul'] = re.compile(_regmul[1:])
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
def make_sorttitle(title, lang):
|
|
Alex Lancaster |
d746224 |
if lang not in _re_articles:
|
|
Alex Lancaster |
d746224 |
lang = "mul"
|
|
Alex Lancaster |
d746224 |
sort_re = _re_articles[lang]
|
|
Alex Lancaster |
d746224 |
match = sort_re.match(title)
|
|
Alex Lancaster |
d746224 |
titlesort = title
|
|
Alex Lancaster |
d746224 |
if match:
|
|
Alex Lancaster |
d746224 |
sort_prefix = match.group().strip()
|
|
Alex Lancaster |
d746224 |
titlesort = sort_re.sub("", title).strip() + ", " + sort_prefix
|
|
Alex Lancaster |
d746224 |
titlesort = titlesort[0].upper() + titlesort[1:] # capitalize first letter
|
|
Alex Lancaster |
d746224 |
return titlesort
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
def add_titlesort(tagger, metadata, release, track):
|
|
Alex Lancaster |
d746224 |
if metadata["titlesort"]:
|
|
Alex Lancaster |
d746224 |
titlesort = metadata["titlesort"]
|
|
Alex Lancaster |
d746224 |
else:
|
|
Alex Lancaster |
d746224 |
titlesort = metadata["title"]
|
|
Alex Lancaster |
d746224 |
metadata["titlesort"] = make_sorttitle(titlesort, metadata["language"])
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
def add_albumsort(tagger, metadata, release):
|
|
Alex Lancaster |
d746224 |
if metadata["albumsort"]:
|
|
Alex Lancaster |
d746224 |
titlesort = metadata["albumsort"]
|
|
Alex Lancaster |
d746224 |
else:
|
|
Alex Lancaster |
d746224 |
titlesort = metadata["album"]
|
|
Alex Lancaster |
d746224 |
metadata["albumsort"] = make_sorttitle(titlesort, metadata["language"])
|
|
Alex Lancaster |
d746224 |
|
|
Alex Lancaster |
d746224 |
register_track_metadata_processor(add_titlesort)
|
|
Alex Lancaster |
d746224 |
register_album_metadata_processor(add_albumsort)
|