From 16f9d98a361b3b11b45f8bd785952745eb342a96 Mon Sep 17 00:00:00 2001 From: donmerendolo Date: Thu, 29 Apr 2021 15:24:57 +0200 Subject: [PATCH] feat: user can change illegal characters in config file --- deemix/app/settings.py | 1 + deemix/utils/pathtemplates.py | 58 +++++++++++++++++------------------ 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/deemix/app/settings.py b/deemix/app/settings.py index 2390048..ea63061 100644 --- a/deemix/app/settings.py +++ b/deemix/app/settings.py @@ -62,6 +62,7 @@ DEFAULT_SETTINGS = { "createSingleFolder": False, "padTracks": True, "paddingSize": "0", + "illegalCharacters": "[\u0000\/\\:*?\"<>|]", "illegalCharacterReplacer": "_", "queueConcurrency": 3, "maxBitrate": str(TrackFormats.MP3_320), diff --git a/deemix/utils/pathtemplates.py b/deemix/utils/pathtemplates.py index 3d04dce..7326d0c 100644 --- a/deemix/utils/pathtemplates.py +++ b/deemix/utils/pathtemplates.py @@ -15,9 +15,9 @@ bitrateLabels = { TrackFormats.LOCAL : "MP3" } -def fixName(txt, char='_'): +def fixName(txt, illegals, char='_'): txt = str(txt) - txt = re.sub(r'[\0\/\\:*?"<>|]', char, txt) + txt = re.sub(illegals, char, txt) txt = normalize("NFC", txt) return txt @@ -116,30 +116,30 @@ def generateFilepath(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: - filename = filename.replace("%featartists%", fixName('('+track.featArtistsString+')', settings['illegalCharacterReplacer'])) + filename = filename.replace("%featartists%", fixName('('+track.featArtistsString+')', settings['illegalCharacters'], settings['illegalCharacterReplacer'])) else: 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("%tracktotal%", str(track.album.trackTotal)) filename = filename.replace("%discnumber%", str(track.discNumber)) filename = filename.replace("%disctotal%", str(track.album.discTotal)) if len(track.album.genre) > 0: filename = filename.replace("%genre%", - fixName(track.album.genre[0], settings['illegalCharacterReplacer'])) + fixName(track.album.genre[0], settings['illegalCharacters'], settings['illegalCharacterReplacer'])) else: filename = filename.replace("%genre%", "Unknown") filename = filename.replace("%year%", str(track.date.year)) filename = filename.replace("%date%", track.dateString) 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("%upc%", track.album.barcode) filename = filename.replace("%explicit%", "(Explicit)" if track.explicit else "") @@ -164,24 +164,24 @@ def settingsRegexAlbum(foldername, album, settings, playlist=None): else: foldername = foldername.replace("%album_id%", str(album.id)) 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: 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)) 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)) 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("%tracktotal%", str(album.trackTotal)) 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("%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("%date%", album.dateString) 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): - 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)) 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)) 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('\\', pathSep).replace('/', pathSep) return antiDot(fixLongName(foldername)) 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("%year%", str(playlist.date.year)) foldername = foldername.replace("%date%", str(playlist.dateString)) @@ -215,11 +215,11 @@ def settingsRegexPlaylist(foldername, playlist, settings): return antiDot(fixLongName(foldername)) 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("%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('\\', pathSep).replace('/', pathSep).replace(pathSep, settings['illegalCharacterReplacer']) return antiDot(fixLongName(foldername)) -- 2.25.1