|
|
@ -15,9 +15,9 @@ bitrateLabels = { |
|
|
TrackFormats.LOCAL : "MP3" |
|
|
TrackFormats.LOCAL : "MP3" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
def fixName(txt, char='_'): |
|
|
|
|
|
|
|
|
def fixName(txt, illegals, char='_'): |
|
|
txt = str(txt) |
|
|
txt = str(txt) |
|
|
txt = re.sub(r'[\0\/\\:*?"<>|]', char, txt) |
|
|
|
|
|
|
|
|
txt = re.sub(illegals, char, txt) |
|
|
txt = normalize("NFC", txt) |
|
|
txt = normalize("NFC", txt) |
|
|
return txt |
|
|
return txt |
|
|
|
|
|
|
|
|
@ -116,30 +116,30 @@ def generateFilepath(track, settings): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def settingsRegex(filename, track, settings): |
|
|
def settingsRegex(filename, track, settings): |
|
|
filename = filename.replace("%title%", fixName(track.title, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%artist%", fixName(track.mainArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%artists%", fixName(", ".join(track.artists), settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%allartists%", fixName(track.artistsString, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%mainartists%", fixName(track.mainArtistsString, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
filename = filename.replace("%title%", fixName(track.title, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%artist%", fixName(track.mainArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%artists%", fixName(", ".join(track.artists), settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%allartists%", fixName(track.artistsString, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%mainartists%", fixName(track.mainArtistsString, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
if track.featArtistsString: |
|
|
if track.featArtistsString: |
|
|
filename = filename.replace("%featartists%", fixName('('+track.featArtistsString+')', settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
filename = filename.replace("%featartists%", fixName('('+track.featArtistsString+')', settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
else: |
|
|
else: |
|
|
filename = filename.replace("%featartists%", '') |
|
|
filename = filename.replace("%featartists%", '') |
|
|
filename = filename.replace("%album%", fixName(track.album.title, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%albumartist%", fixName(track.album.mainArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
filename = filename.replace("%album%", fixName(track.album.title, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
filename = filename.replace("%albumartist%", fixName(track.album.mainArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
filename = filename.replace("%tracknumber%", pad(track.trackNumber, track.album.trackTotal, settings)) |
|
|
filename = filename.replace("%tracknumber%", pad(track.trackNumber, track.album.trackTotal, settings)) |
|
|
filename = filename.replace("%tracktotal%", str(track.album.trackTotal)) |
|
|
filename = filename.replace("%tracktotal%", str(track.album.trackTotal)) |
|
|
filename = filename.replace("%discnumber%", str(track.discNumber)) |
|
|
filename = filename.replace("%discnumber%", str(track.discNumber)) |
|
|
filename = filename.replace("%disctotal%", str(track.album.discTotal)) |
|
|
filename = filename.replace("%disctotal%", str(track.album.discTotal)) |
|
|
if len(track.album.genre) > 0: |
|
|
if len(track.album.genre) > 0: |
|
|
filename = filename.replace("%genre%", |
|
|
filename = filename.replace("%genre%", |
|
|
fixName(track.album.genre[0], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
fixName(track.album.genre[0], settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
else: |
|
|
else: |
|
|
filename = filename.replace("%genre%", "Unknown") |
|
|
filename = filename.replace("%genre%", "Unknown") |
|
|
filename = filename.replace("%year%", str(track.date.year)) |
|
|
filename = filename.replace("%year%", str(track.date.year)) |
|
|
filename = filename.replace("%date%", track.dateString) |
|
|
filename = filename.replace("%date%", track.dateString) |
|
|
filename = filename.replace("%bpm%", str(track.bpm)) |
|
|
filename = filename.replace("%bpm%", str(track.bpm)) |
|
|
filename = filename.replace("%label%", fixName(track.album.label, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
filename = filename.replace("%label%", fixName(track.album.label, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
filename = filename.replace("%isrc%", track.ISRC) |
|
|
filename = filename.replace("%isrc%", track.ISRC) |
|
|
filename = filename.replace("%upc%", track.album.barcode) |
|
|
filename = filename.replace("%upc%", track.album.barcode) |
|
|
filename = filename.replace("%explicit%", "(Explicit)" if track.explicit else "") |
|
|
filename = filename.replace("%explicit%", "(Explicit)" if track.explicit else "") |
|
|
@ -164,24 +164,24 @@ def settingsRegexAlbum(foldername, album, settings, playlist=None): |
|
|
else: |
|
|
else: |
|
|
foldername = foldername.replace("%album_id%", str(album.id)) |
|
|
foldername = foldername.replace("%album_id%", str(album.id)) |
|
|
if len(album.genre) > 0: |
|
|
if len(album.genre) > 0: |
|
|
foldername = foldername.replace("%genre%", fixName(album.genre[0], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%genre%", fixName(album.genre[0], settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
else: |
|
|
else: |
|
|
foldername = foldername.replace("%genre%", "Unknown") |
|
|
foldername = foldername.replace("%genre%", "Unknown") |
|
|
foldername = foldername.replace("%album%", fixName(album.title, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%artist%", fixName(album.mainArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%album%", fixName(album.title, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%artist%", fixName(album.mainArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%artist_id%", str(album.mainArtist.id)) |
|
|
foldername = foldername.replace("%artist_id%", str(album.mainArtist.id)) |
|
|
if album.rootArtist: |
|
|
if album.rootArtist: |
|
|
foldername = foldername.replace("%root_artist%", fixName(album.rootArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%root_artist%", fixName(album.rootArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%root_artist_id%", str(album.rootArtist.id)) |
|
|
foldername = foldername.replace("%root_artist_id%", str(album.rootArtist.id)) |
|
|
else: |
|
|
else: |
|
|
foldername = foldername.replace("%root_artist%", fixName(album.mainArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%root_artist%", fixName(album.mainArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%root_artist_id%", str(album.mainArtist.id)) |
|
|
foldername = foldername.replace("%root_artist_id%", str(album.mainArtist.id)) |
|
|
foldername = foldername.replace("%tracktotal%", str(album.trackTotal)) |
|
|
foldername = foldername.replace("%tracktotal%", str(album.trackTotal)) |
|
|
foldername = foldername.replace("%disctotal%", str(album.discTotal)) |
|
|
foldername = foldername.replace("%disctotal%", str(album.discTotal)) |
|
|
foldername = foldername.replace("%type%", fixName(album.recordType.capitalize(), settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%type%", fixName(album.recordType.capitalize(), settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%upc%", album.barcode) |
|
|
foldername = foldername.replace("%upc%", album.barcode) |
|
|
foldername = foldername.replace("%explicit%", "(Explicit)" if album.explicit else "") |
|
|
foldername = foldername.replace("%explicit%", "(Explicit)" if album.explicit else "") |
|
|
foldername = foldername.replace("%label%", fixName(album.label, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%label%", fixName(album.label, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%year%", str(album.date.year)) |
|
|
foldername = foldername.replace("%year%", str(album.date.year)) |
|
|
foldername = foldername.replace("%date%", album.dateString) |
|
|
foldername = foldername.replace("%date%", album.dateString) |
|
|
foldername = foldername.replace("%bitrate%", bitrateLabels[int(album.bitrate)]) |
|
|
foldername = foldername.replace("%bitrate%", bitrateLabels[int(album.bitrate)]) |
|
|
@ -191,22 +191,22 @@ def settingsRegexAlbum(foldername, album, settings, playlist=None): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def settingsRegexArtist(foldername, artist, settings, rootArtist=None): |
|
|
def settingsRegexArtist(foldername, artist, settings, rootArtist=None): |
|
|
foldername = foldername.replace("%artist%", fixName(artist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%artist%", fixName(artist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%artist_id%", str(artist.id)) |
|
|
foldername = foldername.replace("%artist_id%", str(artist.id)) |
|
|
if rootArtist: |
|
|
if rootArtist: |
|
|
foldername = foldername.replace("%root_artist%", fixName(rootArtist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%root_artist%", fixName(rootArtist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%root_artist_id%", str(rootArtist.id)) |
|
|
foldername = foldername.replace("%root_artist_id%", str(rootArtist.id)) |
|
|
else: |
|
|
else: |
|
|
foldername = foldername.replace("%root_artist%", fixName(artist.name, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%root_artist%", fixName(artist.name, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%root_artist_id%", str(artist.id)) |
|
|
foldername = foldername.replace("%root_artist_id%", str(artist.id)) |
|
|
foldername = foldername.replace('\\', pathSep).replace('/', pathSep) |
|
|
foldername = foldername.replace('\\', pathSep).replace('/', pathSep) |
|
|
return antiDot(fixLongName(foldername)) |
|
|
return antiDot(fixLongName(foldername)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def settingsRegexPlaylist(foldername, playlist, settings): |
|
|
def settingsRegexPlaylist(foldername, playlist, settings): |
|
|
foldername = foldername.replace("%playlist%", fixName(playlist.title, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%playlist_id%", fixName(playlist.playlistId, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%owner%", fixName(playlist.owner['name'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%playlist%", fixName(playlist.title, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%playlist_id%", fixName(playlist.playlistId, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%owner%", fixName(playlist.owner['name'], settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%owner_id%", str(playlist.owner['id'])) |
|
|
foldername = foldername.replace("%owner_id%", str(playlist.owner['id'])) |
|
|
foldername = foldername.replace("%year%", str(playlist.date.year)) |
|
|
foldername = foldername.replace("%year%", str(playlist.date.year)) |
|
|
foldername = foldername.replace("%date%", str(playlist.dateString)) |
|
|
foldername = foldername.replace("%date%", str(playlist.dateString)) |
|
|
@ -215,11 +215,11 @@ def settingsRegexPlaylist(foldername, playlist, settings): |
|
|
return antiDot(fixLongName(foldername)) |
|
|
return antiDot(fixLongName(foldername)) |
|
|
|
|
|
|
|
|
def settingsRegexPlaylistFile(foldername, queueItem, settings): |
|
|
def settingsRegexPlaylistFile(foldername, queueItem, settings): |
|
|
foldername = foldername.replace("%title%", fixName(queueItem.title, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%artist%", fixName(queueItem.artist, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%title%", fixName(queueItem.title, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%artist%", fixName(queueItem.artist, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%size%", str(queueItem.size)) |
|
|
foldername = foldername.replace("%size%", str(queueItem.size)) |
|
|
foldername = foldername.replace("%type%", fixName(queueItem.type, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%id%", fixName(queueItem.id, settings['illegalCharacterReplacer'])) |
|
|
|
|
|
|
|
|
foldername = foldername.replace("%type%", fixName(queueItem.type, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
|
|
|
foldername = foldername.replace("%id%", fixName(queueItem.id, settings['illegalCharacters'], settings['illegalCharacterReplacer'])) |
|
|
foldername = foldername.replace("%bitrate%", bitrateLabels[int(queueItem.bitrate)]) |
|
|
foldername = foldername.replace("%bitrate%", bitrateLabels[int(queueItem.bitrate)]) |
|
|
foldername = foldername.replace('\\', pathSep).replace('/', pathSep).replace(pathSep, settings['illegalCharacterReplacer']) |
|
|
foldername = foldername.replace('\\', pathSep).replace('/', pathSep).replace(pathSep, settings['illegalCharacterReplacer']) |
|
|
return antiDot(fixLongName(foldername)) |
|
|
return antiDot(fixLongName(foldername)) |