summaryrefslogtreecommitdiff
path: root/tidal_dl_ng
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2024-11-13 13:26:46 +0100
committerRobert Honz <exislow+github@gmail.com>2024-11-13 13:26:46 +0100
commit5f9cc39ba736b0e9aa87da8b6cd27b67acf250fc (patch)
tree84c32533ae4fd10194592fad03389282b5d48299 /tidal_dl_ng
parent618b16257b6f398345bac467aa2706f7385ff577 (diff)
downloadtidal-dl-ng-5f9cc39ba736b0e9aa87da8b6cd27b67acf250fc.tar.gz
✨ GUI login updated to device mode.
Diffstat (limited to 'tidal_dl_ng')
-rw-r--r--tidal_dl_ng/dialog.py2
-rw-r--r--tidal_dl_ng/gui.py17
-rw-r--r--tidal_dl_ng/ui/dialog_login.py73
3 files changed, 48 insertions, 44 deletions
diff --git a/tidal_dl_ng/dialog.py b/tidal_dl_ng/dialog.py
index f82386b..ff31633 100644
--- a/tidal_dl_ng/dialog.py
+++ b/tidal_dl_ng/dialog.py
@@ -1,7 +1,7 @@
+import datetime
import os.path
import shutil
import webbrowser
-import datetime
from enum import Enum, StrEnum
from pathlib import Path
diff --git a/tidal_dl_ng/gui.py b/tidal_dl_ng/gui.py
index 4cc3150..6c5429f 100644
--- a/tidal_dl_ng/gui.py
+++ b/tidal_dl_ng/gui.py
@@ -5,6 +5,8 @@ from collections.abc import Callable, Sequence
from PySide6.QtGui import QStandardItem
from requests.exceptions import HTTPError
+from tidalapi.session import LinkLogin
+from tidalapi.types import JsonObj
from tidal_dl_ng import __version__, update_available
from tidal_dl_ng.dialog import DialogLogin, DialogPreferences, DialogVersion
@@ -131,15 +133,18 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
hint: str = "After you have finished the TIDAL login via web browser click the 'OK' button."
while not result:
- login, future = self.tidal.session.login_oauth()
-
- d_login: DialogLogin = DialogLogin(url_login=login.verification_uri_complete, hint=hint, expires_in=login.expires_in, parent=self)
+ json_obj: JsonObj = self.tidal.session._login_with_link()
+ link_login: LinkLogin = LinkLogin(json_obj)
+ d_login: DialogLogin = DialogLogin(
+ url_login=link_login.verification_uri_complete,
+ hint=hint,
+ expires_in=link_login.expires_in,
+ parent=self,
+ )
if d_login.return_code == 1:
try:
- future.result()
- token: dict[str, str | int] = self.tidal.session.pkce_get_auth_token(url_redirect)
- self.tidal.session.process_auth_token(token)
+ self.tidal.session._process_link_login(json_obj)
self.tidal.login_finalize()
result = True
diff --git a/tidal_dl_ng/ui/dialog_login.py b/tidal_dl_ng/ui/dialog_login.py
index d30ca6c..59a78da 100644
--- a/tidal_dl_ng/ui/dialog_login.py
+++ b/tidal_dl_ng/ui/dialog_login.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
################################################################################
## Form generated from reading UI file 'dialog_login.ui'
##
@@ -8,21 +6,15 @@
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
-from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
- QMetaObject, QObject, QPoint, QRect,
- QSize, QTime, QUrl, Qt)
-from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
- QFont, QFontDatabase, QGradient, QIcon,
- QImage, QKeySequence, QLinearGradient, QPainter,
- QPalette, QPixmap, QRadialGradient, QTransform)
-from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox,
- QHBoxLayout, QLabel, QSizePolicy, QTextBrowser,
- QVBoxLayout, QWidget)
+from PySide6.QtCore import QCoreApplication, QMetaObject, QRect, Qt
+from PySide6.QtGui import QFont
+from PySide6.QtWidgets import QDialogButtonBox, QHBoxLayout, QLabel, QSizePolicy, QTextBrowser, QVBoxLayout, QWidget
+
-class Ui_DialogLogin(object):
+class Ui_DialogLogin:
def setupUi(self, DialogLogin):
if not DialogLogin.objectName():
- DialogLogin.setObjectName(u"DialogLogin")
+ DialogLogin.setObjectName("DialogLogin")
DialogLogin.resize(451, 400)
sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
@@ -30,22 +22,22 @@ class Ui_DialogLogin(object):
sizePolicy.setHeightForWidth(DialogLogin.sizePolicy().hasHeightForWidth())
DialogLogin.setSizePolicy(sizePolicy)
self.bb_dialog = QDialogButtonBox(DialogLogin)
- self.bb_dialog.setObjectName(u"bb_dialog")
+ self.bb_dialog.setObjectName("bb_dialog")
self.bb_dialog.setGeometry(QRect(20, 350, 411, 32))
sizePolicy.setHeightForWidth(self.bb_dialog.sizePolicy().hasHeightForWidth())
self.bb_dialog.setSizePolicy(sizePolicy)
self.bb_dialog.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
- self.bb_dialog.setStyleSheet(u"")
+ self.bb_dialog.setStyleSheet("")
self.bb_dialog.setOrientation(Qt.Orientation.Horizontal)
- self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
+ self.bb_dialog.setStandardButtons(QDialogButtonBox.StandardButton.Cancel | QDialogButtonBox.StandardButton.Ok)
self.verticalLayoutWidget = QWidget(DialogLogin)
- self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
+ self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayoutWidget.setGeometry(QRect(20, 20, 411, 325))
self.lv_main = QVBoxLayout(self.verticalLayoutWidget)
- self.lv_main.setObjectName(u"lv_main")
+ self.lv_main.setObjectName("lv_main")
self.lv_main.setContentsMargins(0, 0, 0, 0)
self.l_header = QLabel(self.verticalLayoutWidget)
- self.l_header.setObjectName(u"l_header")
+ self.l_header.setObjectName("l_header")
sizePolicy.setHeightForWidth(self.l_header.sizePolicy().hasHeightForWidth())
self.l_header.setSizePolicy(sizePolicy)
font = QFont()
@@ -56,7 +48,7 @@ class Ui_DialogLogin(object):
self.lv_main.addWidget(self.l_header)
self.l_description = QLabel(self.verticalLayoutWidget)
- self.l_description.setObjectName(u"l_description")
+ self.l_description.setObjectName("l_description")
sizePolicy.setHeightForWidth(self.l_description.sizePolicy().hasHeightForWidth())
self.l_description.setSizePolicy(sizePolicy)
font1 = QFont()
@@ -67,32 +59,33 @@ class Ui_DialogLogin(object):
self.lv_main.addWidget(self.l_description)
self.tb_url_login = QTextBrowser(self.verticalLayoutWidget)
- self.tb_url_login.setObjectName(u"tb_url_login")
+ self.tb_url_login.setObjectName("tb_url_login")
self.tb_url_login.setOpenExternalLinks(True)
self.lv_main.addWidget(self.tb_url_login)
self.horizontalLayout = QHBoxLayout()
- self.horizontalLayout.setObjectName(u"horizontalLayout")
+ self.horizontalLayout.setObjectName("horizontalLayout")
self.l_expires_description = QLabel(self.verticalLayoutWidget)
- self.l_expires_description.setObjectName(u"l_expires_description")
+ self.l_expires_description.setObjectName("l_expires_description")
self.horizontalLayout.addWidget(self.l_expires_description)
self.l_expires_date_time = QLabel(self.verticalLayoutWidget)
- self.l_expires_date_time.setObjectName(u"l_expires_date_time")
+ self.l_expires_date_time.setObjectName("l_expires_date_time")
font2 = QFont()
font2.setBold(True)
self.l_expires_date_time.setFont(font2)
- self.l_expires_date_time.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
+ self.l_expires_date_time.setAlignment(
+ Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTrailing | Qt.AlignmentFlag.AlignVCenter
+ )
self.horizontalLayout.addWidget(self.l_expires_date_time)
-
self.lv_main.addLayout(self.horizontalLayout)
self.l_hint = QLabel(self.verticalLayoutWidget)
- self.l_hint.setObjectName(u"l_hint")
+ self.l_hint.setObjectName("l_hint")
sizePolicy.setHeightForWidth(self.l_hint.sizePolicy().hasHeightForWidth())
self.l_hint.setSizePolicy(sizePolicy)
self.l_hint.setFont(font1)
@@ -100,21 +93,27 @@ class Ui_DialogLogin(object):
self.lv_main.addWidget(self.l_hint)
-
self.retranslateUi(DialogLogin)
self.bb_dialog.accepted.connect(DialogLogin.accept)
self.bb_dialog.rejected.connect(DialogLogin.reject)
QMetaObject.connectSlotsByName(DialogLogin)
+
# setupUi
def retranslateUi(self, DialogLogin):
- DialogLogin.setWindowTitle(QCoreApplication.translate("DialogLogin", u"Dialog", None))
- self.l_header.setText(QCoreApplication.translate("DialogLogin", u"TIDAL Login (as Device)", None))
- self.l_description.setText(QCoreApplication.translate("DialogLogin", u"Click the link below and login with your TIDAL credentials. TIDAL will ask you, if you like to add this app as a new device. You need to confirm this.", None))
- self.tb_url_login.setPlaceholderText(QCoreApplication.translate("DialogLogin", u"Copy this login URL...", None))
- self.l_expires_description.setText(QCoreApplication.translate("DialogLogin", u"This link expires at:", None))
- self.l_expires_date_time.setText(QCoreApplication.translate("DialogLogin", u"COMPUTING", None))
- self.l_hint.setText(QCoreApplication.translate("DialogLogin", u"Waiting...", None))
- # retranslateUi
+ DialogLogin.setWindowTitle(QCoreApplication.translate("DialogLogin", "Dialog", None))
+ self.l_header.setText(QCoreApplication.translate("DialogLogin", "TIDAL Login (as Device)", None))
+ self.l_description.setText(
+ QCoreApplication.translate(
+ "DialogLogin",
+ "Click the link below and login with your TIDAL credentials. TIDAL will ask you, if you like to add this app as a new device. You need to confirm this.",
+ None,
+ )
+ )
+ self.tb_url_login.setPlaceholderText(QCoreApplication.translate("DialogLogin", "Copy this login URL...", None))
+ self.l_expires_description.setText(QCoreApplication.translate("DialogLogin", "This link expires at:", None))
+ self.l_expires_date_time.setText(QCoreApplication.translate("DialogLogin", "COMPUTING", None))
+ self.l_hint.setText(QCoreApplication.translate("DialogLogin", "Waiting...", None))
+ # retranslateUi