diff options
| author | Robert Honz <exislow+github@gmail.com> | 2024-01-14 23:09:43 +0100 |
|---|---|---|
| committer | Robert Honz <exislow+github@gmail.com> | 2024-01-14 23:09:43 +0100 |
| commit | ec728d4dcd4741d307cf3c052c1b9ba3d4a7eb92 (patch) | |
| tree | 74ed3d5c341392a703d984a4e052ddb62e153ca6 /tidal_dl_ng/helper | |
| parent | affaae101e67fd2ee1aebc04b2ea1b551fe05d2f (diff) | |
| download | tidal-dl-ng-ec728d4dcd4741d307cf3c052c1b9ba3d4a7eb92.tar.gz | |
♻️ Refactored `download` for CLI.
Diffstat (limited to 'tidal_dl_ng/helper')
| -rw-r--r-- | tidal_dl_ng/helper/path.py | 65 | ||||
| -rw-r--r-- | tidal_dl_ng/helper/tidal.py | 30 | ||||
| -rw-r--r-- | tidal_dl_ng/helper/url.py | 15 |
3 files changed, 86 insertions, 24 deletions
diff --git a/tidal_dl_ng/helper/path.py b/tidal_dl_ng/helper/path.py index 708b569..06ccdb1 100644 --- a/tidal_dl_ng/helper/path.py +++ b/tidal_dl_ng/helper/path.py @@ -8,8 +8,11 @@ from pathvalidate import sanitize_filename, sanitize_filepath from pathvalidate.error import ValidationError from tidalapi import Album, Mix, Playlist, Track, UserPlaylist, Video +from tidal_dl_ng import __name_display__ +from tidal_dl_ng.constants import MediaType -def path_base(): + +def path_home() -> str: if "XDG_CONFIG_HOME" in os.environ: return os.environ["XDG_CONFIG_HOME"] elif "HOME" in os.environ: @@ -20,16 +23,41 @@ def path_base(): return os.path.abspath("./") -def path_file_log(): - return os.path.join(path_base(), ".tidal-dl-ng.log") +def path_base() -> str: + path_config: str = ".config" + path_base: str = os.path.join(path_home(), path_config, __name_display__) + + return path_base + + +def path_file_log() -> str: + # TODO: Remove this soon. Only for migration to new dir. + old = os.path.join(path_home(), ".tidal-dl-ng.log") + if os.path.isfile(old): + os.makedirs(path_base(), exist_ok=True) + os.rename(old, os.path.join(path_base(), "app.log")) + + return os.path.join(path_base(), "app.log") + +def path_file_token() -> str: + # TODO: Remove this soon. Only for migration to new dir. + old = os.path.join(path_home(), ".tidal-dl-ng_token.json") + if os.path.isfile(old): + os.makedirs(path_base(), exist_ok=True) + os.rename(old, os.path.join(path_base(), "token.json")) -def path_file_token(): - return os.path.join(path_base(), ".tidal-dl-ng_token.json") + return os.path.join(path_base(), "token.json") -def path_file_settings(): - return os.path.join(path_base(), ".tidal-dl-ng_settings.json") +def path_file_settings() -> str: + # TODO: Remove this soon. Only for migration to new dir. + old = os.path.join(path_home(), ".tidal-dl-ng_settings.json") + if os.path.isfile(old): + os.makedirs(path_base(), exist_ok=True) + os.rename(old, os.path.join(path_base(), "settings.json")) + + return os.path.join(path_base(), "settings.json") def format_path_media(fmt_template: str, media: Track | Album | Playlist | UserPlaylist | Video | Mix) -> str: @@ -38,7 +66,7 @@ def format_path_media(fmt_template: str, media: Track | Album | Playlist | UserP # Search track format template for placeholder. regex = r"\{(.+?)\}" matches = re.finditer(regex, fmt_template, re.MULTILINE) - fn_format = get_fn_format(media) + fn_format = get_format_fn(media) for _matchNum, match in enumerate(matches, start=1): template_str = match.group() @@ -104,7 +132,7 @@ def format_str_video(name: str, media: Video) -> str | bool: return result -def get_fn_format(media: Track | Album | Playlist | UserPlaylist | Video | Mix) -> Callable: +def get_format_fn(media: Track | Album | Playlist | UserPlaylist | Video | Mix) -> Callable: result = None if isinstance(media, Track): @@ -121,6 +149,25 @@ def get_fn_format(media: Track | Album | Playlist | UserPlaylist | Video | Mix) return result +def get_format_template( + media: Track | Album | Playlist | UserPlaylist | Video | Mix | MediaType, settings +) -> str | bool: + result = False + + if isinstance(media, Track) or media == MediaType.Track: + result = settings.data.format_track + elif isinstance(media, Album) or media == MediaType.Album: + result = settings.data.format_album + elif isinstance(media, Playlist | UserPlaylist) or media == MediaType.Playlist: + result = settings.data.format_playlist + elif isinstance(media, Mix) or media == MediaType.Mix: + result = settings.data.format_mix + elif isinstance(media, Video) or media == MediaType.Video: + result = settings.data.format_video + + return result + + def path_file_sanitize(path_file: str, adapt: bool = False) -> (bool, str): # Split into path and filename pathname, filename = os.path.split(path_file) diff --git a/tidal_dl_ng/helper/tidal.py b/tidal_dl_ng/helper/tidal.py index 78434b6..a48abcd 100644 --- a/tidal_dl_ng/helper/tidal.py +++ b/tidal_dl_ng/helper/tidal.py @@ -1,5 +1,7 @@ from tidalapi import Track +from tidal_dl_ng.constants import MediaType + def name_builder_artist(media: Track) -> str: return ", ".join(artist.name for artist in media.artists) @@ -11,3 +13,31 @@ def name_builder_title(media: Track) -> str: def name_builder_item(media: Track) -> str: return f"{name_builder_artist(media)} - {name_builder_title(media)}" + + +def get_tidal_media_id(url_or_id_media: str) -> str: + id_dirty = url_or_id_media.rsplit("/", 1)[-1] + id_media = id_dirty.rsplit("?", 1)[0] + + return id_media + + +def get_tidal_media_type(url_media: str) -> MediaType | bool: + result: MediaType | bool = False + url_split = url_media.split("/")[-2] + + if len(url_split) > 1: + media_name = url_media.split("/")[-2] + + if media_name == "track": + result = MediaType.Track + elif media_name == "video": + result = MediaType.Video + elif media_name == "album": + result = MediaType.Album + elif media_name == "playlist": + result = MediaType.Playlist + elif media_name == "mix": + result = MediaType.Mix + + return result diff --git a/tidal_dl_ng/helper/url.py b/tidal_dl_ng/helper/url.py deleted file mode 100644 index 1e05474..0000000 --- a/tidal_dl_ng/helper/url.py +++ /dev/null @@ -1,15 +0,0 @@ -def get_tidal_media_id(url_or_id_media: str) -> str: - id_dirty = url_or_id_media.rsplit("/", 1)[-1] - id_media = id_dirty.rsplit("?", 1)[0] - - return id_media - - -def get_tidal_media_type(url_media: str) -> str | bool: - result = False - url_split = url_media.split("/")[-2] - - if len(url_split) > 1: - result = url_media.split("/")[-2] - - return result |
