summaryrefslogtreecommitdiff
path: root/tidal_dl_ng
diff options
context:
space:
mode:
authorRikrdoga <ricardoga@outlook.com>2025-10-21 11:45:11 -0600
committerRikrdoga <ricardoga@outlook.com>2025-10-21 11:58:34 -0600
commite266149684baf6e49462df6d758c6a5714dbfc05 (patch)
tree111e15da9f3c34687a91f7de48ca148d9cfe2451 /tidal_dl_ng
parent234ed80192751fc3036e0473d2d9e6c9fc571bd7 (diff)
downloadtidal-dl-ng-e266149684baf6e49462df6d758c6a5714dbfc05.tar.gz
Move credentials to constants, improve docs (tidal_obj), and clean up Atmos legacy code
Diffstat (limited to 'tidal_dl_ng')
-rw-r--r--tidal_dl_ng/config.py20
-rw-r--r--tidal_dl_ng/constants.py11
-rw-r--r--tidal_dl_ng/download.py7
-rw-r--r--tidal_dl_ng/model/cfg.py2
-rw-r--r--tidal_dl_ng/ui/main.ui5
5 files changed, 23 insertions, 22 deletions
diff --git a/tidal_dl_ng/config.py b/tidal_dl_ng/config.py
index a490e7d..28ea58b 100644
--- a/tidal_dl_ng/config.py
+++ b/tidal_dl_ng/config.py
@@ -1,4 +1,3 @@
-import base64
import json
import os
import shutil
@@ -10,20 +9,17 @@ from threading import Event
from typing import Any
import tidalapi
-from tidalapi import Quality
+from tidal_dl_ng.constants import (
+ ATMOS_CLIENT_ID,
+ ATMOS_CLIENT_SECRET,
+ ATMOS_REQUEST_QUALITY,
+)
from tidal_dl_ng.helper.decorator import SingletonMeta
from tidal_dl_ng.helper.path import path_config_base, path_file_settings, path_file_token
from tidal_dl_ng.model.cfg import Settings as ModelSettings
from tidal_dl_ng.model.cfg import Token as ModelToken
-_ATMOS_ID_B64 = "N203QX" + "AwSkM5aj" + "FjT00zbg=="
-_ATMOS_SECRET_B64 = "dlJBZEEx" + "MDh0bHZrSnB" + "Uc0daUzhyR1" + "o3eFRsYkow" + "cWFaMks5c2F" + "FenNnWT0="
-
-_ATMOS_CLIENT_ID = base64.b64decode(_ATMOS_ID_B64).decode("utf-8")
-_ATMOS_CLIENT_SECRET = base64.b64decode(_ATMOS_SECRET_B64).decode("utf-8")
-_ATMOS_REQUEST_QUALITY = Quality.low_320k
-
class BaseConfig:
data: ModelSettings | ModelToken
@@ -177,9 +173,9 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
original_audio_quality = self.session.audio_quality
try:
- self.session.config.client_id = _ATMOS_CLIENT_ID
- self.session.config.client_secret = _ATMOS_CLIENT_SECRET
- self.session.audio_quality = _ATMOS_REQUEST_QUALITY
+ self.session.config.client_id = ATMOS_CLIENT_ID
+ self.session.config.client_secret = ATMOS_CLIENT_SECRET
+ self.session.audio_quality = ATMOS_REQUEST_QUALITY
if not self.login_token(do_pkce=self.is_pkce):
print("Warning: Session restore failed.")
diff --git a/tidal_dl_ng/constants.py b/tidal_dl_ng/constants.py
index f2f774b..79ae501 100644
--- a/tidal_dl_ng/constants.py
+++ b/tidal_dl_ng/constants.py
@@ -1,5 +1,8 @@
+import base64
from enum import StrEnum
+from tidalapi import Quality
+
CTX_TIDAL: str = "tidal"
REQUESTS_TIMEOUT_SEC: int = 45
EXTENSION_LYRICS: str = ".lrc"
@@ -15,6 +18,14 @@ FILENAME_LENGTH_MAX: int = 255
FORMAT_TEMPLATE_EXPLICIT: str = " (Explicit)"
METADATA_EXPLICIT: str = " 🅴"
+# Dolby Atmos API credentials (obfuscated)
+ATMOS_ID_B64 = "N203QX" + "AwSkM5aj" + "FjT00zbg=="
+ATMOS_SECRET_B64 = "dlJBZEEx" + "MDh0bHZrSnB" + "Uc0daUzhyR1" + "o3eFRsYkow" + "cWFaMks5c2F" + "FenNnWT0="
+
+ATMOS_CLIENT_ID = base64.b64decode(ATMOS_ID_B64).decode("utf-8")
+ATMOS_CLIENT_SECRET = base64.b64decode(ATMOS_SECRET_B64).decode("utf-8")
+ATMOS_REQUEST_QUALITY = Quality.low_320k
+
class QualityVideo(StrEnum):
P360 = "360"
diff --git a/tidal_dl_ng/download.py b/tidal_dl_ng/download.py
index 674041f..7d855db 100644
--- a/tidal_dl_ng/download.py
+++ b/tidal_dl_ng/download.py
@@ -119,7 +119,7 @@ class Download:
def __init__(
self,
- tidal_obj: Tidal,
+ tidal_obj: Tidal, # Required for Atmos session context manager
path_base: str,
fn_logger: Callable,
skip_existing: bool = False,
@@ -132,8 +132,9 @@ class Download:
"""Initialize the Download object and its dependencies.
Args:
- session (Session): TIDAL session object.
- tidal_obj (Tidal): The TIDAL object (from config.py)
+ tidal_obj (Tidal): TIDAL configuration object. Required for:
+ - session: Main TIDAL API session
+ - atmos_session_context(): Dolby Atmos credential switching
path_base (str): Base path for downloads.
fn_logger (Callable): Logger function or object.
skip_existing (bool, optional): Whether to skip existing files. Defaults to False.
diff --git a/tidal_dl_ng/model/cfg.py b/tidal_dl_ng/model/cfg.py
index ab72cf9..a376f2f 100644
--- a/tidal_dl_ng/model/cfg.py
+++ b/tidal_dl_ng/model/cfg.py
@@ -57,8 +57,6 @@ class Settings:
filename_delimiter_artist: str = ", "
filename_delimiter_album_artist: str = ", "
metadata_target_upc: MetadataTargetUPC = MetadataTargetUPC.UPC
- api_key_client_id: str = ""
- api_key_client_secret: str = ""
@dataclass_json
diff --git a/tidal_dl_ng/ui/main.ui b/tidal_dl_ng/ui/main.ui
index 2b6d9ac..23d98e6 100644
--- a/tidal_dl_ng/ui/main.ui
+++ b/tidal_dl_ng/ui/main.ui
@@ -671,11 +671,6 @@
</property>
<property name="icon">
<iconset theme="QIcon::ThemeIcon::MediaPlaybackPause"/>
-<<<<<<< HEAD
- <iconset theme="QIcon::ThemeIcon::MediaPlaybackStart">
- <normaloff>.</normaloff>.</iconset>
-=======
->>>>>>> 13dddc7 (Refactor Dolby Atmos feature to be internal and seamless)
</property>
</widget>
</item>