Move credentials to constants, improve docs (tidal_obj), and clean up Atmos legacy code

This commit is contained in:
Rikrdoga
2025-10-21 11:58:34 -06:00
parent 234ed80192
commit e266149684
5 changed files with 23 additions and 22 deletions
+8 -12
View File
@@ -1,4 +1,3 @@
import base64
import json import json
import os import os
import shutil import shutil
@@ -10,20 +9,17 @@ from threading import Event
from typing import Any from typing import Any
import tidalapi 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.decorator import SingletonMeta
from tidal_dl_ng.helper.path import path_config_base, path_file_settings, path_file_token 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 Settings as ModelSettings
from tidal_dl_ng.model.cfg import Token as ModelToken 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: class BaseConfig:
data: ModelSettings | ModelToken data: ModelSettings | ModelToken
@@ -177,9 +173,9 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
original_audio_quality = self.session.audio_quality original_audio_quality = self.session.audio_quality
try: try:
self.session.config.client_id = _ATMOS_CLIENT_ID self.session.config.client_id = ATMOS_CLIENT_ID
self.session.config.client_secret = _ATMOS_CLIENT_SECRET self.session.config.client_secret = ATMOS_CLIENT_SECRET
self.session.audio_quality = _ATMOS_REQUEST_QUALITY self.session.audio_quality = ATMOS_REQUEST_QUALITY
if not self.login_token(do_pkce=self.is_pkce): if not self.login_token(do_pkce=self.is_pkce):
print("Warning: Session restore failed.") print("Warning: Session restore failed.")
+11
View File
@@ -1,5 +1,8 @@
import base64
from enum import StrEnum from enum import StrEnum
from tidalapi import Quality
CTX_TIDAL: str = "tidal" CTX_TIDAL: str = "tidal"
REQUESTS_TIMEOUT_SEC: int = 45 REQUESTS_TIMEOUT_SEC: int = 45
EXTENSION_LYRICS: str = ".lrc" EXTENSION_LYRICS: str = ".lrc"
@@ -15,6 +18,14 @@ FILENAME_LENGTH_MAX: int = 255
FORMAT_TEMPLATE_EXPLICIT: str = " (Explicit)" FORMAT_TEMPLATE_EXPLICIT: str = " (Explicit)"
METADATA_EXPLICIT: str = " 🅴" 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): class QualityVideo(StrEnum):
P360 = "360" P360 = "360"
+4 -3
View File
@@ -119,7 +119,7 @@ class Download:
def __init__( def __init__(
self, self,
tidal_obj: Tidal, tidal_obj: Tidal, # Required for Atmos session context manager
path_base: str, path_base: str,
fn_logger: Callable, fn_logger: Callable,
skip_existing: bool = False, skip_existing: bool = False,
@@ -132,8 +132,9 @@ class Download:
"""Initialize the Download object and its dependencies. """Initialize the Download object and its dependencies.
Args: Args:
session (Session): TIDAL session object. tidal_obj (Tidal): TIDAL configuration object. Required for:
tidal_obj (Tidal): The TIDAL object (from config.py) - session: Main TIDAL API session
- atmos_session_context(): Dolby Atmos credential switching
path_base (str): Base path for downloads. path_base (str): Base path for downloads.
fn_logger (Callable): Logger function or object. fn_logger (Callable): Logger function or object.
skip_existing (bool, optional): Whether to skip existing files. Defaults to False. skip_existing (bool, optional): Whether to skip existing files. Defaults to False.
-2
View File
@@ -57,8 +57,6 @@ class Settings:
filename_delimiter_artist: str = ", " filename_delimiter_artist: str = ", "
filename_delimiter_album_artist: str = ", " filename_delimiter_album_artist: str = ", "
metadata_target_upc: MetadataTargetUPC = MetadataTargetUPC.UPC metadata_target_upc: MetadataTargetUPC = MetadataTargetUPC.UPC
api_key_client_id: str = ""
api_key_client_secret: str = ""
@dataclass_json @dataclass_json
-5
View File
@@ -671,11 +671,6 @@
</property> </property>
<property name="icon"> <property name="icon">
<iconset theme="QIcon::ThemeIcon::MediaPlaybackPause"/> <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> </property>
</widget> </widget>
</item> </item>