diff --git a/src/settings/tidalsettingspage.cpp b/src/settings/tidalsettingspage.cpp index c2ce346a..b6fd4ca2 100644 --- a/src/settings/tidalsettingspage.cpp +++ b/src/settings/tidalsettingspage.cpp @@ -45,6 +45,8 @@ TidalSettingsPage::TidalSettingsPage(SettingsDialog *parent) connect(ui_->button_login, SIGNAL(clicked()), SLOT(LoginClicked())); connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(LogoutClicked())); + connect(this, SIGNAL(Login(QString, QString, int)), service_, SLOT(SendLogin(QString, QString, int))); + connect(service_, SIGNAL(LoginFailure(QString)), SLOT(LoginFailure(QString))); connect(service_, SIGNAL(LoginSuccess()), SLOT(LoginSuccess())); @@ -109,7 +111,7 @@ void TidalSettingsPage::Save() { } void TidalSettingsPage::LoginClicked() { - service_->Login(ui_->username->text(), ui_->password->text()); + emit Login(ui_->username->text(), ui_->password->text()); ui_->button_login->setEnabled(false); } diff --git a/src/settings/tidalsettingspage.h b/src/settings/tidalsettingspage.h index 567f10ca..949047e1 100644 --- a/src/settings/tidalsettingspage.h +++ b/src/settings/tidalsettingspage.h @@ -48,6 +48,9 @@ class TidalSettingsPage : public SettingsPage { bool eventFilter(QObject *object, QEvent *event); +signals: + void Login(const QString &username, const QString &password, const int search_id = 0); + private slots: void LoginClicked(); void LogoutClicked(); diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index 2aca35de..3923790b 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -78,6 +78,9 @@ TidalService::TidalService(Application *app, InternetModel *parent) timer_searchdelay_->setSingleShot(true); connect(timer_searchdelay_, SIGNAL(timeout()), SLOT(StartSearch())); + connect(this, SIGNAL(Login(int)), SLOT(SendLogin(int))); + connect(this, SIGNAL(Login(QString, QString, int)), SLOT(SendLogin(QString, QString, int))); + ReloadSettings(); LoadSessionID(); @@ -117,7 +120,11 @@ void TidalService::LoadSessionID() { } -void TidalService::Login(const QString &username, const QString &password, int search_id) { +void TidalService::SendLogin(const int search_id) { + SendLogin(username_, password_, search_id); +} + +void TidalService::SendLogin(const QString &username, const QString &password, const int search_id) { if (search_id != 0) emit UpdateStatus("Authenticating..."); @@ -296,7 +303,7 @@ QNetworkReply *TidalService::CreateRequest(const QString &ressource_name, const } -QJsonObject TidalService::ExtractJsonObj(QNetworkReply *reply) { +QJsonObject TidalService::ExtractJsonObj(QNetworkReply *reply, bool sendlogin) { QByteArray data; @@ -331,11 +338,11 @@ QJsonObject TidalService::ExtractJsonObj(QNetworkReply *reply) { if (reply->error() == QNetworkReply::ContentAccessDenied || reply->error() == QNetworkReply::ContentOperationNotPermittedError || reply->error() == QNetworkReply::AuthenticationRequiredError) { // Session is probably expired, attempt to login once Logout(); - if (login_attempts_ < 1 && !username_.isEmpty() && !password_.isEmpty()) { + if (sendlogin && login_attempts_ < 1 && !username_.isEmpty() && !password_.isEmpty()) { qLog(Error) << "Tidal:" << failure_reason; qLog(Error) << "Tidal:" << QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()); qLog(Error) << "Tidal:" << "Attempting to login."; - Login(username_, password_); + emit Login(search_id_); } else { Error(failure_reason); @@ -381,9 +388,9 @@ QJsonObject TidalService::ExtractJsonObj(QNetworkReply *reply) { } -QJsonArray TidalService::ExtractItems(QNetworkReply *reply) { +QJsonArray TidalService::ExtractItems(QNetworkReply *reply, bool sendlogin) { - QJsonObject json_obj = ExtractJsonObj(reply); + QJsonObject json_obj = ExtractJsonObj(reply, sendlogin); if (json_obj.isEmpty()) return QJsonArray(); if (!json_obj.contains("items")) { @@ -485,7 +492,7 @@ void TidalService::SearchFinished(QNetworkReply *reply, int id) { if (id != search_id_) return; - QJsonArray json_items = ExtractItems(reply); + QJsonArray json_items = ExtractItems(reply, true); if (json_items.isEmpty()) { CheckFinish(); return; diff --git a/src/tidal/tidalservice.h b/src/tidal/tidalservice.h index a880af56..67625ca9 100644 --- a/src/tidal/tidalservice.h +++ b/src/tidal/tidalservice.h @@ -52,7 +52,6 @@ class TidalService : public InternetService { void ReloadSettings(); - void Login(const QString &username, const QString &password, int search_id = 0); void Logout(); int Search(const QString &query, TidalSettingsPage::SearchBy searchby); void CancelSearch(); @@ -61,6 +60,8 @@ class TidalService : public InternetService { const bool authenticated() { return (!session_id_.isEmpty() && !country_code_.isEmpty()); } signals: + void Login(const int search_id = 0); + void Login(const QString &username, const QString &password, const int search_id = 0); void LoginSuccess(); void LoginFailure(QString failure_reason); void SearchResults(int id, SongList songs); @@ -71,8 +72,10 @@ class TidalService : public InternetService { public slots: void ShowConfig(); + void SendLogin(const QString &username, const QString &password, const int search_id = 0); private slots: + void SendLogin(const int search_id = 0); void HandleAuthReply(QNetworkReply *reply, int search_id); void StartSearch(); void SearchFinished(QNetworkReply *reply, int search_id); @@ -83,8 +86,8 @@ class TidalService : public InternetService { void ClearSearch(); void LoadSessionID(); QNetworkReply *CreateRequest(const QString &ressource_name, const QList> ¶ms); - QJsonObject ExtractJsonObj(QNetworkReply *reply); - QJsonArray ExtractItems(QNetworkReply *reply); + QJsonObject ExtractJsonObj(QNetworkReply *reply, bool sendlogin = false); + QJsonArray ExtractItems(QNetworkReply *reply, bool sendlogin = false); void SendSearch(); void GetAlbum(const int album_id); Song ParseSong(const int album_id_requested, const QJsonValue &value);