diff --git a/MIGRATION.md b/MIGRATION.md index 409f7cd..750b289 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,5 +1,11 @@ # Переход на новую версию +## -> v3.2.0b0 +- При использовании аргумента `--unsafe-path` символы `/` и `\` +заменяются на `_`. Если у вас в коллекции есть альбомы/треки/исполнители +в названии которых есть данные символы, и вы используете флаг +`--skip-existing`, эти элементы будут загружены дважды. + ## v2 -> v3 - Для авторизации используйте аргумент `--token`. Аргументы `--browser`, `--user-agent`, `--cookies-path` больше не являются валидными, diff --git a/pyproject.toml b/pyproject.toml index 9300f87..7c23917 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "yandex-music-downloader" -version = "3.1.0b0" +version = "3.2.0b0" description = "Загрузчик музыки с сервиса Яндекс.Музыка" requires-python = ">=3.9" readme = "README.md" diff --git a/ymd/core.py b/ymd/core.py index e5ee63d..74db7d1 100644 --- a/ymd/core.py +++ b/ymd/core.py @@ -27,7 +27,8 @@ from yandex_music import Client, DownloadInfo, Track, YandexMusicObject from ymd.api import get_lossless_info -FILENAME_CLEAR_RE = re.compile(r"[^\w\-\'() ]+") +UNSAFE_PATH_CLEAR_RE = re.compile(r"[/\\]+") +SAFE_PATH_CLEAR_RE = re.compile(r"[^\w\-\'() ]+") DEFAULT_PATH_PATTERN = Path("#album-artist", "#album", "#number - #title") DEFAULT_COVER_RESOLUTION = 400 @@ -82,7 +83,10 @@ def prepare_base_path( for placeholder, replacement in repl_dict.items(): replacement = str(replacement) if not unsafe_path: - replacement = FILENAME_CLEAR_RE.sub("_", replacement) + clear_re = SAFE_PATH_CLEAR_RE + else: + clear_re = UNSAFE_PATH_CLEAR_RE + replacement = clear_re.sub("_", replacement) path_str = path_str.replace(placeholder, replacement) return Path(path_str)