diff options
| author | Robert Honz <exislow+github@gmail.com> | 2024-01-13 11:57:11 +0100 |
|---|---|---|
| committer | Robert Honz <exislow+github@gmail.com> | 2024-01-13 11:57:11 +0100 |
| commit | 14483a162949dcdffc1fe36b5c4962f1926beaa3 (patch) | |
| tree | 7902058e3218d5b05eb1a5c14f8ae726bd429edf /tidal_dl_ng/helper | |
| parent | 0cba5d83b1bfa212d3bdb7719f90740f513f01c2 (diff) | |
| download | tidal-dl-ng-14483a162949dcdffc1fe36b5c4962f1926beaa3.tar.gz | |
♻️ Some refactoring started within download.py.
✨ Track extension can be ignored while skipping files. Closes #11.
✨ Started to implement MPEG DASH download support.
Diffstat (limited to 'tidal_dl_ng/helper')
| -rw-r--r-- | tidal_dl_ng/helper/exceptions.py | 8 | ||||
| -rw-r--r-- | tidal_dl_ng/helper/format.py | 18 | ||||
| -rw-r--r-- | tidal_dl_ng/helper/path.py | 78 | ||||
| -rw-r--r-- | tidal_dl_ng/helper/tidal.py | 13 |
4 files changed, 70 insertions, 47 deletions
diff --git a/tidal_dl_ng/helper/exceptions.py b/tidal_dl_ng/helper/exceptions.py index 9ef6ddc..be1bdee 100644 --- a/tidal_dl_ng/helper/exceptions.py +++ b/tidal_dl_ng/helper/exceptions.py @@ -4,3 +4,11 @@ class LoginError(Exception): class MediaUnknown(Exception): pass + + +class UnknownManifestFormat(Exception): + pass + + +class MediaMissing(Exception): + pass diff --git a/tidal_dl_ng/helper/format.py b/tidal_dl_ng/helper/format.py new file mode 100644 index 0000000..ab62a69 --- /dev/null +++ b/tidal_dl_ng/helper/format.py @@ -0,0 +1,18 @@ +def is_xml(value: str) -> bool: + result = False + + if value: + if value.startswith("<?xml"): + result = True + + return result + + +def is_json(value: str) -> bool: + result = False + + if value: + if value.startswith("{"): + result = True + + return result diff --git a/tidal_dl_ng/helper/path.py b/tidal_dl_ng/helper/path.py index 3061160..a907985 100644 --- a/tidal_dl_ng/helper/path.py +++ b/tidal_dl_ng/helper/path.py @@ -1,11 +1,11 @@ +import glob import os -import pathlib -import platform import re from collections.abc import Callable from pathlib import Path -from pathvalidate import sanitize_filename +from pathvalidate import sanitize_filename, sanitize_filepath +from pathvalidate.error import ValidationError from tidalapi import Album, Mix, Playlist, Track, UserPlaylist, Video @@ -121,59 +121,43 @@ def get_fn_format(media: Track | Album | Playlist | UserPlaylist | Video | Mix) return result -def length_max_name_file() -> int: - system = platform.system() - result: int = 255 +def path_file_sanitize(path_file: str, adapt: bool = False) -> (bool, str): + # Split into path and filename + pathname, filename = os.path.split(path_file) + # Sanitize path try: - if system in ["Darwin", "Linux"]: - result: int = os.pathconf("/", "PC_NAME_MAX") - except Exception as e: - # TODO: Implement propper logging. - print(e) - - return result - - -def length_max_name_path() -> int: - system = platform.system() - result: int = 255 + pathname_sanitized = sanitize_filepath(pathname, replacement_text=" ", validate_after_sanitize=True) + except ValidationError as e: + # If adaption of path is allowed in case of an error set path to HOME. + if adapt: + pathname_sanitized = Path.home() + else: + raise e + # Sanitize filename try: - if system in ["Darwin", "Linux"]: - result: int = os.pathconf("/", "PC_PATH_MAX") - except Exception as e: - # TODO: Implement propper logging. - print(e) - - return result + filename_sanitized = sanitize_filename(path_file, replacement_text=" ", validate_after_sanitize=True) + filename_sanitized_extension = Path(filename_sanitized).suffix + # Check if the file extension was removed by shortening the filename length + if filename_sanitized_extension == "": + # Add the original file extension + file_extension = "_" + Path(path_file).suffix + filename_sanitized = filename_sanitized[: -len(file_extension)] + file_extension + except ValidationError as e: + raise e -def path_validate(path_file: str, adapt: bool = False) -> (bool, str): - result: bool = False - length_max_path: int = length_max_name_path() - length_max_file: int = length_max_name_file() - path, file = os.path.split(path_file) - filename, extension = os.path.splitext(file) + # Join path and filename + result = os.path.join(pathname_sanitized, filename_sanitized) - if len(path) >= length_max_path: - result = False - - if adapt: - path = Path.home() - - if len(file) >= length_max_file: - result = False - - if adapt: - file = f'{filename[:length_max_file - len(extension + "_")]}_{extension}' - - path_file = os.path.join(path, file) + return result - return result, path_file +def check_file_exists(path_file: str, extension_ignore: bool = False): + if extension_ignore: + path_file = Path(path_file).stem + ".*" -def check_file_exists(path_file: str): - result = pathlib.Path(path_file).is_file() + result = True if glob.glob(path_file) else False return result diff --git a/tidal_dl_ng/helper/tidal.py b/tidal_dl_ng/helper/tidal.py new file mode 100644 index 0000000..78434b6 --- /dev/null +++ b/tidal_dl_ng/helper/tidal.py @@ -0,0 +1,13 @@ +from tidalapi import Track + + +def name_builder_artist(media: Track) -> str: + return ", ".join(artist.name for artist in media.artists) + + +def name_builder_title(media: Track) -> str: + return media.name + + +def name_builder_item(media: Track) -> str: + return f"{name_builder_artist(media)} - {name_builder_title(media)}" |
