diff --git a/src/internet/groovesharksettingspage.cpp b/src/internet/groovesharksettingspage.cpp new file mode 100644 index 000000000..621b5c752 --- /dev/null +++ b/src/internet/groovesharksettingspage.cpp @@ -0,0 +1,122 @@ +/* This file is part of Clementine. + Copyright 2010, David Sansome + + Clementine is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Clementine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Clementine. If not, see . +*/ + +#include "groovesharksettingspage.h" + +#include "core/network.h" +#include "groovesharkservice.h" +#include "internetmodel.h" +#include "ui_groovesharksettingspage.h" +#include "ui/iconloader.h" + +#include +#include +#include +#include +#include + +GrooveSharkSettingsPage::GrooveSharkSettingsPage(SettingsDialog* dialog) + : SettingsPage(dialog), + network_(new NetworkAccessManager(this)), + ui_(new Ui_GrooveSharkSettingsPage), + service_(InternetModel::Service()), + validated_(false) +{ + ui_->setupUi(this); + + setWindowIcon(QIcon(":/providers/grooveshark.png")); + + connect(ui_->login, SIGNAL(clicked()), SLOT(Login())); + connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(Logout())); + connect(ui_->login_state, SIGNAL(LoginClicked()), SLOT(Login())); + + connect(service_, SIGNAL(LoginFinished(bool)), SLOT(LoginFinished(bool))); + + ui_->login_state->AddCredentialField(ui_->username); + ui_->login_state->AddCredentialField(ui_->password); + ui_->login_state->AddCredentialGroup(ui_->account_group); + +} + +GrooveSharkSettingsPage::~GrooveSharkSettingsPage() { + delete ui_; +} + +void GrooveSharkSettingsPage::Login() { + if (service_->IsLoggedIn()) { + return; + } + + ui_->login_state->SetLoggedIn(LoginStateWidget::LoginInProgress); + service_->Login(ui_->username->text(), ui_->password->text()); +} + +void GrooveSharkSettingsPage::Load() { + QSettings s; + s.beginGroup(GrooveSharkService::kSettingsGroup); + + original_username_ = s.value("username").toString(); + + ui_->username->setText(original_username_); + validated_ = false; + + UpdateLoginState(); +} + +void GrooveSharkSettingsPage::Save() { + QSettings s; + s.beginGroup(GrooveSharkService::kSettingsGroup); + + s.setValue("username", ui_->username->text()); + s.setValue("sessionid", service_->session_id()); +} + +void GrooveSharkSettingsPage::LoginFinished(bool success) { + validated_ = success; + + Save(); + UpdateLoginState(); +} + +void GrooveSharkSettingsPage::UpdateLoginState() { + const bool logged_in = service_->IsLoggedIn(); + + ui_->login_state->SetLoggedIn(logged_in ? LoginStateWidget::LoggedIn + : LoginStateWidget::LoggedOut, + ui_->username->text()); + ui_->login_state->SetAccountTypeVisible(!logged_in); + + switch (service_->login_state()) { + case GrooveSharkService::LoginState_NoPremium: + ui_->login_state->SetAccountTypeText(tr("You do not have a GrooveShark Anywhere account.")); + break; + + case GrooveSharkService::LoginState_AuthFailed: + ui_->login_state->SetAccountTypeText(tr("Your username or password was incorrect.")); + break; + + default: + ui_->login_state->SetAccountTypeText(tr("A GrooveShark Anywhere account is required.")); + break; + } + //ui_->login_state->SetAccountTypeText(tr("A GrooveShark Anywhere account is required.")); +} + +void GrooveSharkSettingsPage::Logout() { + service_->Logout(); + UpdateLoginState(); +} diff --git a/src/internet/groovesharksettingspage.h b/src/internet/groovesharksettingspage.h new file mode 100644 index 000000000..449656a31 --- /dev/null +++ b/src/internet/groovesharksettingspage.h @@ -0,0 +1,55 @@ +/* This file is part of Clementine. + Copyright 2010, David Sansome + + Clementine is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Clementine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Clementine. If not, see . +*/ + +#ifndef GROOVESHARKSETTINGSPAGE_H +#define GROOVESHARKSETTINGSPAGE_H + +#include "ui/settingspage.h" + +class NetworkAccessManager; +class Ui_GrooveSharkSettingsPage; +class GrooveSharkService; + +class GrooveSharkSettingsPage : public SettingsPage { + Q_OBJECT + +public: + GrooveSharkSettingsPage(SettingsDialog* dialog); + ~GrooveSharkSettingsPage(); + + void Load(); + void Save(); + +private slots: + void Login(); + void LoginFinished(bool success); + void Logout(); + +private: + void UpdateLoginState(); + +private: + NetworkAccessManager* network_; + Ui_GrooveSharkSettingsPage* ui_; + GrooveSharkService* service_; + + bool validated_; + QString original_username_; + QString original_password_; +}; + +#endif // GROOVESHARKSETTINGSPAGE_H diff --git a/src/internet/groovesharksettingspage.ui b/src/internet/groovesharksettingspage.ui new file mode 100644 index 000000000..b663e1409 --- /dev/null +++ b/src/internet/groovesharksettingspage.ui @@ -0,0 +1,99 @@ + + + GrooveSharkSettingsPage + + + + 0 + 0 + 480 + 141 + + + + GrooveShark + + + + + + + + + Account details + + + + + + true + + + + 0 + + + + + Username + + + + + + + + + + Password + + + + + + + QLineEdit::Password + + + + + + + Login + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 30 + + + + + + + + + LoginStateWidget + QWidget +
widgets/loginstatewidget.h
+ 1 +
+
+ + + + +