summaryrefslogtreecommitdiff
path: root/tidal_dl_ng/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'tidal_dl_ng/cli.py')
-rw-r--r--tidal_dl_ng/cli.py66
1 files changed, 27 insertions, 39 deletions
diff --git a/tidal_dl_ng/cli.py b/tidal_dl_ng/cli.py
index 19d9240..5a863e6 100644
--- a/tidal_dl_ng/cli.py
+++ b/tidal_dl_ng/cli.py
@@ -3,6 +3,7 @@ from pathlib import Path
from typing import Annotated, Optional
import typer
+from helper.tidal import get_tidal_media_id, get_tidal_media_type
from rich.live import Live
from rich.panel import Panel
from rich.progress import BarColumn, Console, Progress, SpinnerColumn, TextColumn
@@ -12,8 +13,7 @@ from tidal_dl_ng import __version__
from tidal_dl_ng.config import Settings, Tidal
from tidal_dl_ng.constants import CTX_TIDAL, MediaType
from tidal_dl_ng.download import Download
-from tidal_dl_ng.helper.path import path_file_settings
-from tidal_dl_ng.helper.url import get_tidal_media_id, get_tidal_media_type
+from tidal_dl_ng.helper.path import get_format_template, path_file_settings
from tidal_dl_ng.helper.wrapper import WrapperLogger
from tidal_dl_ng.model.cfg import HelpSettings
@@ -104,7 +104,7 @@ def login(ctx: typer.Context) -> bool:
@app.command(name="dl")
def download(
ctx: typer.Context,
- urls_or_ids: Annotated[Optional[list[str]], typer.Argument()] = None,
+ urls: Annotated[Optional[list[str]], typer.Argument()] = None,
list_urls: Annotated[
Optional[Path],
typer.Option(
@@ -120,77 +120,64 @@ def download(
),
] = None,
):
- if not urls_or_ids:
+ if not urls:
+ # Read the text file provided.
if list_urls:
text = list_urls.read_text()
- urls_or_ids = text.splitlines()
+ urls = text.splitlines()
else:
print("Provide either URLs, IDs or a file containing URLs (one per line).")
raise typer.Abort()
+ # Call login method to validate the token.
ctx.invoke(login, ctx)
- dl = Download(ctx.obj[CTX_TIDAL].session, ctx.obj[CTX_TIDAL].settings.data.skip_existing)
+ # Create initial objects.
settings: Settings = Settings()
- media_type: MediaType = None
+ dl = Download(ctx.obj[CTX_TIDAL].session, ctx.obj[CTX_TIDAL].settings.data.skip_existing)
progress: Progress = Progress(
"{task.description}",
SpinnerColumn(),
BarColumn(),
TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
)
- progress_table = Table.grid()
fn_logger = WrapperLogger(progress.print)
+ progress_table = Table.grid()
+ # Style Progress display.
progress_table.add_row(Panel.fit(progress, title="Download Progress", border_style="green", padding=(2, 2)))
- for item in urls_or_ids:
+ for item in urls:
+ media_type: str | bool = False
+
+ # Extract media name and id from link.
if "http" in item:
- media_name = get_tidal_media_type(item)
- id_item = get_tidal_media_id(item)
- else:
- media_name = False
- id_item = item
+ media_type = get_tidal_media_type(item)
+ item_id = get_tidal_media_id(item)
+ file_template = get_format_template(media_type, settings)
- if not media_name:
+ # If url is invalid skip to next url in list.
+ if not media_type:
print(f"It seems like that you have supplied an invalid URL: {item}")
continue
+ # Create Live display for Progress.
with Live(progress_table, refresh_per_second=10):
- # TODO: Fix media type
- if media_name in ["track", "video"]:
- if media_name == "track":
- file_template = settings.data.format_track
- media_type = MediaType.Track
- elif media_name == "video":
- file_template = settings.data.format_video
- media_type = MediaType.Video
-
+ # Download media.
+ if media_type in [MediaType.Track, MediaType.Video]:
dl.item(
- media_id=id_item,
+ media_id=item_id,
media_type=media_type,
path_base=settings.data.download_base_path,
file_template=file_template,
progress=progress,
fn_logger=fn_logger,
)
- elif media_name in ["album", "playlist", "mix"]:
- file_template: str | bool = False
-
- if media_name == "album":
- file_template = settings.data.format_album
- media_type = MediaType.Album
- elif media_name == "playlist":
- file_template = settings.data.format_playlist
- media_type = MediaType.Playlist
- elif media_name == "mix":
- file_template = settings.data.format_mix
- media_type = MediaType.Mix
-
+ elif media_type in [MediaType.Album, MediaType.Playlist, MediaType.Mix]:
dl.items(
- media_id=id_item,
+ media_id=item_id,
media_type=media_type,
path_base=settings.data.download_base_path,
file_template=file_template,
@@ -200,6 +187,7 @@ def download(
fn_logger=fn_logger,
)
+ # Stop Progress display.
progress.stop()
return True