summaryrefslogtreecommitdiff
path: root/tidal_dl_ng/gui.py
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2024-02-01 07:38:01 +0100
committerRobert Honz <exislow+github@gmail.com>2024-02-01 07:38:01 +0100
commitc1bf278fd77d05425d99284d46728c2afeffb95b (patch)
treefafe8f0c31bc569d2ece769785c42deab5cafbb4 /tidal_dl_ng/gui.py
parenta994aa629ef8579819380fcd979ea2cf935125b8 (diff)
downloadtidal-dl-ng-c1bf278fd77d05425d99284d46728c2afeffb95b.tar.gz
✨ Implemented login dialog for PKCE login method. Fixes #22.
Diffstat (limited to 'tidal_dl_ng/gui.py')
-rw-r--r--tidal_dl_ng/gui.py29
1 files changed, 24 insertions, 5 deletions
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)
+ 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
- while True:
- result = self.tidal.login(logger_gui.info)
+ 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()
- if result:
- break
+ 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.