♻️ Renaming done to avoid confusion.
🛠️ Fixed config persisting error after read, if config file did not exist before (fixes #20). ✨ Implemented PKCE authorization to enable HiRes FLAC downloads. Fixes #9.
This commit is contained in:
+10
-6
@@ -8,7 +8,7 @@ import tidalapi
|
|||||||
from requests import HTTPError
|
from requests import HTTPError
|
||||||
|
|
||||||
from tidal_dl_ng.helper.decorator import SingletonMeta
|
from tidal_dl_ng.helper.decorator import SingletonMeta
|
||||||
from tidal_dl_ng.helper.path import path_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
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ class BaseConfig:
|
|||||||
data: ModelSettings | ModelToken = None
|
data: ModelSettings | ModelToken = None
|
||||||
file_path: str = None
|
file_path: str = None
|
||||||
cls_model: object = None
|
cls_model: object = None
|
||||||
path_base: str = path_base()
|
path_base: str = path_config_base()
|
||||||
|
|
||||||
def save(self, config_to_compare: str = None) -> None:
|
def save(self, config_to_compare: str = None) -> None:
|
||||||
data_json = self.data.to_json()
|
data_json = self.data.to_json()
|
||||||
@@ -36,7 +36,8 @@ class BaseConfig:
|
|||||||
setattr(self.data, key, value)
|
setattr(self.data, key, value)
|
||||||
|
|
||||||
def read(self, path: str) -> bool:
|
def read(self, path: str) -> bool:
|
||||||
result = False
|
result: bool = False
|
||||||
|
settings_json: str = ""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(path, encoding="utf-8") as f:
|
with open(path, encoding="utf-8") as f:
|
||||||
@@ -122,7 +123,7 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
|
|||||||
def login_oauth_start(self, function=print) -> None:
|
def login_oauth_start(self, function=print) -> None:
|
||||||
self.session.login_oauth_simple(function)
|
self.session.login_oauth_simple(function)
|
||||||
|
|
||||||
def login_oauth_finish(self) -> bool:
|
def login_finish(self) -> bool:
|
||||||
result = self.session.check_login()
|
result = self.session.check_login()
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
@@ -148,9 +149,9 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
|
|||||||
elif not is_token:
|
elif not is_token:
|
||||||
fn_print("You either do not have a token or your token is invalid.")
|
fn_print("You either do not have a token or your token is invalid.")
|
||||||
fn_print("No worries, we will handle this...")
|
fn_print("No worries, we will handle this...")
|
||||||
self.login_oauth_start(fn_print)
|
self.login_pkce(fn_print)
|
||||||
|
|
||||||
is_login = self.login_oauth_finish()
|
is_login = self.login_finish()
|
||||||
|
|
||||||
if is_login:
|
if is_login:
|
||||||
fn_print("The login was successful. I have stored your credentials (token).")
|
fn_print("The login was successful. I have stored your credentials (token).")
|
||||||
@@ -160,3 +161,6 @@ class Tidal(BaseConfig, metaclass=SingletonMeta):
|
|||||||
fn_print("Something went wrong. Did you login using your browser correctly? May try again...")
|
fn_print("Something went wrong. Did you login using your browser correctly? May try again...")
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def login_pkce(self, fn_print: Callable) -> None:
|
||||||
|
self.session.login_pkce(fn_print)
|
||||||
|
|||||||
+10
-10
@@ -23,7 +23,7 @@ def path_home() -> str:
|
|||||||
return os.path.abspath("./")
|
return os.path.abspath("./")
|
||||||
|
|
||||||
|
|
||||||
def path_base() -> str:
|
def path_config_base() -> str:
|
||||||
path_config: str = ".config"
|
path_config: str = ".config"
|
||||||
path_base: str = os.path.join(path_home(), path_config, __name_display__)
|
path_base: str = os.path.join(path_home(), path_config, __name_display__)
|
||||||
|
|
||||||
@@ -34,30 +34,30 @@ def path_file_log() -> str:
|
|||||||
# TODO: Remove this soon. Only for migration to new dir.
|
# TODO: Remove this soon. Only for migration to new dir.
|
||||||
old = os.path.join(path_home(), ".tidal-dl-ng.log")
|
old = os.path.join(path_home(), ".tidal-dl-ng.log")
|
||||||
if os.path.isfile(old):
|
if os.path.isfile(old):
|
||||||
os.makedirs(path_base(), exist_ok=True)
|
os.makedirs(path_config_base(), exist_ok=True)
|
||||||
os.rename(old, os.path.join(path_base(), "app.log"))
|
os.rename(old, os.path.join(path_config_base(), "app.log"))
|
||||||
|
|
||||||
return os.path.join(path_base(), "app.log")
|
return os.path.join(path_config_base(), "app.log")
|
||||||
|
|
||||||
|
|
||||||
def path_file_token() -> str:
|
def path_file_token() -> str:
|
||||||
# TODO: Remove this soon. Only for migration to new dir.
|
# TODO: Remove this soon. Only for migration to new dir.
|
||||||
old = os.path.join(path_home(), ".tidal-dl-ng_token.json")
|
old = os.path.join(path_home(), ".tidal-dl-ng_token.json")
|
||||||
if os.path.isfile(old):
|
if os.path.isfile(old):
|
||||||
os.makedirs(path_base(), exist_ok=True)
|
os.makedirs(path_config_base(), exist_ok=True)
|
||||||
os.rename(old, os.path.join(path_base(), "token.json"))
|
os.rename(old, os.path.join(path_config_base(), "token.json"))
|
||||||
|
|
||||||
return os.path.join(path_base(), "token.json")
|
return os.path.join(path_config_base(), "token.json")
|
||||||
|
|
||||||
|
|
||||||
def path_file_settings() -> str:
|
def path_file_settings() -> str:
|
||||||
# TODO: Remove this soon. Only for migration to new dir.
|
# TODO: Remove this soon. Only for migration to new dir.
|
||||||
old = os.path.join(path_home(), ".tidal-dl-ng_settings.json")
|
old = os.path.join(path_home(), ".tidal-dl-ng_settings.json")
|
||||||
if os.path.isfile(old):
|
if os.path.isfile(old):
|
||||||
os.makedirs(path_base(), exist_ok=True)
|
os.makedirs(path_config_base(), exist_ok=True)
|
||||||
os.rename(old, os.path.join(path_base(), "settings.json"))
|
os.rename(old, os.path.join(path_config_base(), "settings.json"))
|
||||||
|
|
||||||
return os.path.join(path_base(), "settings.json")
|
return os.path.join(path_config_base(), "settings.json")
|
||||||
|
|
||||||
|
|
||||||
def format_path_media(fmt_template: str, media: Track | Album | Playlist | UserPlaylist | Video | Mix) -> str:
|
def format_path_media(fmt_template: str, media: Track | Album | Playlist | UserPlaylist | Video | Mix) -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user