1 /* This file is part of Clementine.
2 Copyright 2014, Chocobozzz <djidane14ff@hotmail.fr>
3 Copyright 2014, Krzysztof Sobiecki <sobkas@gmail.com>
4 Copyright 2014, David Sansome <me@davidsansome.com>
5
6 Clementine is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 Clementine is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Clementine. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "seafilesettingspage.h"
21
22 #include <QMessageBox>
23 #include <QNetworkReply>
24 #include <QNetworkRequest>
25 #include <QSettings>
26 #include <QtDebug>
27
28 #include "seafileservice.h"
29 #include "internet/core/internetmodel.h"
30 #include "core/logging.h"
31 #include "core/network.h"
32 #include "ui_seafilesettingspage.h"
33 #include "ui/iconloader.h"
34
SeafileSettingsPage(SettingsDialog * dialog)35 SeafileSettingsPage::SeafileSettingsPage(SettingsDialog* dialog)
36 : SettingsPage(dialog),
37 ui_(new Ui_SeafileSettingsPage),
38 service_(InternetModel::Service<SeafileService>()) {
39 ui_->setupUi(this);
40
41 setWindowIcon(IconLoader::Load("seafile", IconLoader::Provider));
42
43 connect(ui_->login_button, SIGNAL(clicked()), SLOT(Login()));
44 connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(Logout()));
45
46 ui_->login_state->AddCredentialField(ui_->server);
47 ui_->login_state->AddCredentialField(ui_->mail);
48 ui_->login_state->AddCredentialField(ui_->password);
49 ui_->login_state->AddCredentialGroup(ui_->account_group);
50
51 ui_->library_box->addItem("None", "none");
52
53 connect(service_, SIGNAL(GetLibrariesFinishedSignal(QMap<QString, QString>)),
54 this, SLOT(GetLibrariesFinished(QMap<QString, QString>)));
55 }
56
~SeafileSettingsPage()57 SeafileSettingsPage::~SeafileSettingsPage() {}
58
Load()59 void SeafileSettingsPage::Load() {
60 QSettings s;
61 s.beginGroup(SeafileService::kSettingsGroup);
62
63 ui_->server->setText(s.value("server").toString());
64 ui_->mail->setText(s.value("mail").toString());
65
66 if (service_->has_credentials()) {
67 ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn,
68 ui_->mail->text());
69
70 // If there is more than "none" library, that means that we already got the
71 // libraries
72 if (ui_->library_box->count() <= 1) {
73 service_->GetLibraries();
74 }
75 }
76 }
77
GetLibrariesFinished(const QMap<QString,QString> & libraries)78 void SeafileSettingsPage::GetLibrariesFinished(
79 const QMap<QString, QString>& libraries) {
80 ui_->library_box->clear();
81 ui_->library_box->addItem("None", "none");
82 ui_->library_box->addItem("All (could be slow)", "all");
83
84 // key : library's id, value : library's name
85 QMapIterator<QString, QString> library(libraries);
86 while (library.hasNext()) {
87 library.next();
88 ui_->library_box->addItem(library.value(), library.key());
89 }
90
91 QSettings s;
92 s.beginGroup(SeafileService::kSettingsGroup);
93 QString library_id = s.value("library").toString();
94
95 int saved_index = ui_->library_box->findData(library_id);
96 if (saved_index != -1) {
97 ui_->library_box->setCurrentIndex(saved_index);
98 }
99 }
100
Save()101 void SeafileSettingsPage::Save() {
102 QString id =
103 ui_->library_box->itemData(ui_->library_box->currentIndex()).toString();
104
105 QSettings s;
106 s.beginGroup(SeafileService::kSettingsGroup);
107
108 s.setValue("mail", ui_->mail->text());
109 s.setValue("server", ui_->server->text());
110 s.setValue("library", id);
111 // Don't need to save the password
112
113 if (service_->has_credentials()) {
114 service_->ChangeLibrary(id);
115 }
116 }
117
Login()118 void SeafileSettingsPage::Login() {
119 ui_->login_button->setEnabled(false);
120
121 if (service_->GetToken(ui_->mail->text(), ui_->password->text(),
122 ui_->server->text())) {
123 Save();
124
125 ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedIn,
126 ui_->mail->text());
127
128 service_->GetLibraries();
129 } else {
130 ui_->login_button->setEnabled(true);
131 QMessageBox::warning(this, tr("Unable to connect"),
132 tr("Unable to connect"));
133 }
134 }
135
Logout()136 void SeafileSettingsPage::Logout() {
137 // Forget the added songs by changing the library to "none"
138 service_->ChangeLibrary("none");
139 service_->ForgetCredentials();
140
141 // We choose to keep the server
142 ui_->mail->clear();
143 ui_->password->clear();
144
145 QSettings s;
146 s.beginGroup(SeafileService::kSettingsGroup);
147
148 s.remove("mail");
149 s.remove("server");
150 s.remove("library");
151
152 ui_->library_box->clear();
153 ui_->library_box->addItem("None", "none");
154
155 ui_->login_state->SetLoggedIn(LoginStateWidget::LoggedOut);
156 ui_->login_button->setEnabled(true);
157 }
158