Hooked up LoginStateWidget for Subsonic settings
This commit is contained in:
parent
ebc97e03c5
commit
76b0ffb1f2
|
@ -44,7 +44,6 @@ void SubsonicService::ReloadSettings()
|
|||
username_ = s.value("username").toString();
|
||||
password_ = s.value("password").toString();
|
||||
|
||||
// TODO: Move this?
|
||||
Login();
|
||||
}
|
||||
|
||||
|
@ -52,7 +51,9 @@ void SubsonicService::Login()
|
|||
{
|
||||
// Forget session ID
|
||||
network_->setCookieJar(new QNetworkCookieJar(network_));
|
||||
// Ping is enough to authenticate
|
||||
// Forget login state whilst waiting
|
||||
login_state_ = LoginState_Unknown;
|
||||
// Ping is enough to check credentials
|
||||
Ping();
|
||||
}
|
||||
|
||||
|
@ -82,7 +83,6 @@ QUrl SubsonicService::BuildRequestUrl(const QString &view, const RequestOptions
|
|||
QUrl url(server_ + "rest/" + view + ".view");
|
||||
url.addQueryItem("v", kApiVersion);
|
||||
url.addQueryItem("c", kApiClientName);
|
||||
// TODO: only send username/password for login
|
||||
url.addQueryItem("u", username_);
|
||||
url.addQueryItem("p", password_);
|
||||
if (options)
|
||||
|
@ -119,6 +119,8 @@ void SubsonicService::onPingFinished()
|
|||
int error = reader.attributes().value("code").toString().toInt();
|
||||
switch (error)
|
||||
{
|
||||
// "Parameter missing" for "ping" is always blank username or password
|
||||
case ApiError_ParameterMissing:
|
||||
case ApiError_BadCredentials:
|
||||
login_state_ = LoginState_BadCredentials;
|
||||
break;
|
||||
|
@ -132,5 +134,5 @@ void SubsonicService::onPingFinished()
|
|||
}
|
||||
}
|
||||
qLog(Debug) << "Login state changed: " << login_state_;
|
||||
emit LoginStateChanged();
|
||||
emit LoginStateChanged(login_state_);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ class SubsonicService : public InternetService
|
|||
LoginState_BadCredentials,
|
||||
LoginState_Unlicensed,
|
||||
LoginState_OtherError,
|
||||
LoginState_Unknown,
|
||||
};
|
||||
|
||||
typedef QMap<QString, QString> RequestOptions;
|
||||
|
@ -40,7 +41,7 @@ class SubsonicService : public InternetService
|
|||
static const char* kApiClientName;
|
||||
|
||||
signals:
|
||||
void LoginStateChanged();
|
||||
void LoginStateChanged(SubsonicService::LoginState newstate);
|
||||
|
||||
protected:
|
||||
QModelIndex GetCurrentIndex();
|
||||
|
|
|
@ -1,16 +1,26 @@
|
|||
#include "subsonicsettingspage.h"
|
||||
#include "ui_subsonicsettingspage.h"
|
||||
#include "subsonicservice.h"
|
||||
#include "internetmodel.h"
|
||||
|
||||
#include <QSettings>
|
||||
|
||||
SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog *dialog)
|
||||
: SettingsPage(dialog),
|
||||
ui_(new Ui_SubsonicSettingsPage)
|
||||
ui_(new Ui_SubsonicSettingsPage),
|
||||
service_(InternetModel::Service<SubsonicService>())
|
||||
{
|
||||
ui_->setupUi(this);
|
||||
|
||||
setWindowIcon(QIcon(":/providers/subsonic-32.png"));
|
||||
|
||||
connect(ui_->login, SIGNAL(clicked()), SLOT(Login()));
|
||||
connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(Logout()));
|
||||
connect(service_, SIGNAL(LoginStateChanged(SubsonicService::LoginState)),
|
||||
SLOT(LoginStateChanged(SubsonicService::LoginState)));
|
||||
|
||||
ui_->login_state->AddCredentialField(ui_->server);
|
||||
ui_->login_state->AddCredentialField(ui_->username);
|
||||
ui_->login_state->AddCredentialField(ui_->password);
|
||||
ui_->login_state->AddCredentialGroup(ui_->server_group);
|
||||
}
|
||||
|
||||
SubsonicSettingsPage::~SubsonicSettingsPage()
|
||||
|
@ -26,6 +36,9 @@ void SubsonicSettingsPage::Load()
|
|||
ui_->server->setText(s.value("server").toString());
|
||||
ui_->username->setText(s.value("username").toString());
|
||||
ui_->password->setText(s.value("password").toString());
|
||||
|
||||
// "Login" with the existing settings to see if they work
|
||||
Login();
|
||||
}
|
||||
|
||||
void SubsonicSettingsPage::Save()
|
||||
|
@ -37,3 +50,49 @@ void SubsonicSettingsPage::Save()
|
|||
s.setValue("username", ui_->username->text());
|
||||
s.setValue("password", ui_->password->text());
|
||||
}
|
||||
|
||||
void SubsonicSettingsPage::LoginStateChanged(SubsonicService::LoginState newstate)
|
||||
{
|
||||
const bool logged_in = newstate == SubsonicService::LoginState_Loggedin;
|
||||
|
||||
ui_->login_state->SetLoggedIn(logged_in ? LoginStateWidget::LoggedIn
|
||||
: LoginStateWidget::LoggedOut,
|
||||
QString("%1 (%2)")
|
||||
.arg(ui_->username->text())
|
||||
.arg(ui_->server->text()));
|
||||
ui_->login_state->SetAccountTypeVisible(!logged_in);
|
||||
|
||||
switch (newstate)
|
||||
{
|
||||
case SubsonicService::LoginState_BadServer:
|
||||
ui_->login_state->SetAccountTypeText(tr("Unable to contact Subsonic server - check server URL."));
|
||||
break;
|
||||
|
||||
case SubsonicService::LoginState_BadCredentials:
|
||||
ui_->login_state->SetAccountTypeText(tr("Your username or password was incorrect."));
|
||||
break;
|
||||
|
||||
case SubsonicService::LoginState_Unlicensed:
|
||||
ui_->login_state->SetAccountTypeText(tr("The Subsonic API is only available on licensed servers."));
|
||||
break;
|
||||
|
||||
case SubsonicService::LoginState_OtherError:
|
||||
ui_->login_state->SetAccountTypeText(tr("An unspecified error occurred."));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SubsonicSettingsPage::Login()
|
||||
{
|
||||
ui_->login_state->SetLoggedIn(LoginStateWidget::LoginInProgress);
|
||||
service_->Login(ui_->server->text(), ui_->username->text(), ui_->password->text());
|
||||
}
|
||||
|
||||
void SubsonicSettingsPage::Logout()
|
||||
{
|
||||
ui_->username->setText("");
|
||||
ui_->password->setText("");
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
#define SUBSONICSETTINGSPAGE_H
|
||||
|
||||
#include "ui/settingspage.h"
|
||||
#include "subsonicservice.h"
|
||||
|
||||
class Ui_SubsonicSettingsPage;
|
||||
class SubsonicService;
|
||||
|
||||
class SubsonicSettingsPage : public SettingsPage
|
||||
{
|
||||
|
@ -17,6 +17,13 @@ class SubsonicSettingsPage : public SettingsPage
|
|||
void Load();
|
||||
void Save();
|
||||
|
||||
public slots:
|
||||
void LoginStateChanged(SubsonicService::LoginState newstate);
|
||||
|
||||
private slots:
|
||||
void Login();
|
||||
void Logout();
|
||||
|
||||
private:
|
||||
Ui_SubsonicSettingsPage* ui_;
|
||||
SubsonicService* service_;
|
||||
|
|
Loading…
Reference in New Issue