From 20054cfe67c72ec1e0af575a2c0c2efad349dff3 Mon Sep 17 00:00:00 2001 From: Slyyxp <11709831+Slyyxp@users.noreply.github.com> Date: Wed, 2 Sep 2020 20:06:45 +0100 Subject: [PATCH] Sanitize album directories. --- bugs.py | 6 +++--- modules/utils.py | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/bugs.py b/bugs.py index 8cfca43..ded7e72 100644 --- a/bugs.py +++ b/bugs.py @@ -55,10 +55,10 @@ def album_rip(album_id): meta['list'][0]['album_info']['result']['title'].strip()) logger_bugs.info("Album: {}.".format(album_directory_name)) if config.prefs['artist_folders']: - album_path = os.path.join(config.prefs['downloads_directory'], - meta['list'][0]['album_info']['result']['artist_disp_nm'], album_directory_name) + album_path = utils.sanitize(os.path.join(config.prefs['downloads_directory'], + meta['list'][0]['album_info']['result']['artist_disp_nm'], album_directory_name)) else: - album_path = os.path.join(config.prefs['downloads_directory'], album_directory_name) + album_path = utils.sanitize(os.path.join(config.prefs['downloads_directory'], album_directory_name)) utils.make_dir(album_path) cover_path = os.path.join(album_path, config.prefs['cover_name']) download_cover(meta['list'][0]['album_info']['result']['img_urls'], cover_path) diff --git a/modules/utils.py b/modules/utils.py index d1fa2c2..2908c9c 100644 --- a/modules/utils.py +++ b/modules/utils.py @@ -2,7 +2,7 @@ import re import logging from datetime import datetime -from platform import uname +import platform from sys import version from modules import config @@ -17,6 +17,18 @@ def get_id(url): r'https?://music\.bugs\.co\.kr/(?:(?:album|artist|playlist)/|[a-z]{2}-[a-z]{2}-?\w+(?:-\w+)*-?)(\w+)', url).group(1) +def sanitize(fn): + """ + :param fn: Filename + :return: Sanitized string + + Removes invalid characters in the filename dependant on Operating System. + """ + if _is_win(): + return re.sub(r'[\/:*?"><|]', '_', fn) + else: + return re.sub('/', '_', fn) + def determine_quality(track): if track['svc_flac_yn'] == 'Y': return 'flac' @@ -32,8 +44,12 @@ def exist_check(abs): logger_utilities.debug("{} already exists locally.".format(os.path.basename(abs))) return True +def _is_win(): + if platform.system() == 'Windows': + return True + def log_system_information(): - logger_utilities.debug("System Information: {}".format(uname())) + logger_utilities.debug("System Information: {}".format(platform.uname())) logger_utilities.debug("Python Version: {}".format(version)) logger_utilities.debug("Preferences: {}".format(config.prefs))