From c1bf278fd77d05425d99284d46728c2afeffb95b Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Thu, 1 Feb 2024 07:38:01 +0100 Subject: ✨ Implemented login dialog for PKCE login method. Fixes #22. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tidal_dl_ng/gui.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'tidal_dl_ng/gui.py') diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py index dec6e4e..a16609b 100644 --- a/tidal_dl_ng/gui.py +++ b/tidal_dl_ng/gui.py @@ -2,8 +2,10 @@ import math import sys from collections.abc import Callable +from requests.exceptions import HTTPError + from tidal_dl_ng import __version__ -from tidal_dl_ng.dialog import DialogVersion +from tidal_dl_ng.dialog import DialogLogin, DialogVersion from tidal_dl_ng.helper.path import get_format_template from tidal_dl_ng.helper.tidal import items_results_all, search_results_all, user_media_lists @@ -85,12 +87,29 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): result = True else: self.tidal = Tidal(self.settings) - - while True: - result = self.tidal.login(logger_gui.info) - - if result: - break + result = self.tidal.login_token() + + if not result: + hint: str = "Watiting for user input." + while not result: + url_login = self.tidal.session.pkce_login_url() + d_login: DialogLogin = DialogLogin(url_login=url_login, hint=hint, parent=self) + url_redirect: str = d_login.url_redirect + + if d_login.return_code == 1: + try: + token: dict[str, str | int] = self.tidal.session.pkce_get_auth_token(url_redirect) + self.tidal.session.process_auth_token(token) + self.tidal.login_finalize() + + result = True + logger_gui.info("Login not successful. Have fun!") + except (HTTPError, Exception): + hint = "Something was wrong with your redirect url. Please try again!" + logger_gui.warning("Login not successful. Try again...") + else: + # If user has pressed cancel. + sys.exit(1) if result: # Init `Download` object. -- cgit v1.3.1