diff --git a/qtox.pro b/qtox.pro index dbe17ce62..5f6ec00b6 100644 --- a/qtox.pro +++ b/qtox.pro @@ -483,7 +483,8 @@ SOURCES += \ src/widget/about/aboutuser.cpp \ src/persistence/db/rawdatabase.cpp \ src/persistence/history.cpp \ - src/widget/form/groupinviteform.cpp + src/widget/form/groupinviteform.cpp \ + src/widget/tool/profileimporter.cpp HEADERS += \ src/audio/audio.h \ @@ -540,4 +541,5 @@ HEADERS += \ src/widget/about/aboutuser.h \ src/persistence/db/rawdatabase.h \ src/persistence/history.h \ - src/widget/form/groupinviteform.h + src/widget/form/groupinviteform.h \ + src/widget/tool/profileimporter.h diff --git a/src/loginscreen.ui b/src/loginscreen.ui index 722e6d387..37f4850bf 100644 --- a/src/loginscreen.ui +++ b/src/loginscreen.ui @@ -42,7 +42,7 @@ true - 0 + 1 @@ -333,6 +333,13 @@ + + + + Import + + + diff --git a/src/widget/loginscreen.cpp b/src/widget/loginscreen.cpp index 7dfa65f21..474b4c551 100644 --- a/src/widget/loginscreen.cpp +++ b/src/widget/loginscreen.cpp @@ -27,6 +27,7 @@ #include "src/widget/form/setpassworddialog.h" #include "src/widget/translator.h" #include "src/widget/style.h" +#include "src/widget/tool/profileimporter.h" #include #include @@ -54,6 +55,7 @@ LoginScreen::LoginScreen(QWidget *parent) : connect(ui->newPass, &QLineEdit::textChanged, this, &LoginScreen::onPasswordEdited); connect(ui->newPassConfirm, &QLineEdit::textChanged, this, &LoginScreen::onPasswordEdited); connect(ui->autoLoginCB, &QCheckBox::stateChanged, this, &LoginScreen::onAutoLoginToggled); + connect(ui->importButton, &QPushButton::clicked, this, &LoginScreen::onImportProfile); reset(); this->setStyleSheet(Style::getStylesheet(":/ui/loginScreen/loginScreen.css")); @@ -255,3 +257,13 @@ void LoginScreen::retranslateUi() { ui->retranslateUi(this); } + +void LoginScreen::onImportProfile() +{ + ProfileImporter *pi = new ProfileImporter(this); + if(pi->importProfile() == true) + { + reset(); + } + delete pi; +} diff --git a/src/widget/loginscreen.h b/src/widget/loginscreen.h index 66e027d34..0a8361a09 100644 --- a/src/widget/loginscreen.h +++ b/src/widget/loginscreen.h @@ -54,6 +54,7 @@ private slots: // Buttons to submit form void onCreateNewProfile(); void onLogin(); + void onImportProfile(); private: void retranslateUi(); diff --git a/src/widget/tool/profileimporter.cpp b/src/widget/tool/profileimporter.cpp new file mode 100644 index 000000000..41513379a --- /dev/null +++ b/src/widget/tool/profileimporter.cpp @@ -0,0 +1,85 @@ +/* + Copyright © 2015-2016 by The qTox Project + + This file is part of qTox, a Qt-based graphical interface for Tox. + + qTox is libre 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. + + qTox 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 qTox. If not, see . +*/ + +#include "profileimporter.h" +#include +#include +#include +#include +#include +#include "src/persistence/settings.h" +#include "src/core/core.h" +#include "src/widget/gui.h" +#include +#include + +ProfileImporter::ProfileImporter(QWidget *parent) : QWidget(parent) +{ + +} + +bool ProfileImporter::importProfile() +{ + QString path = QFileDialog::getOpenFileName( this, + tr("Import profile", "import dialog title"), + QDir::homePath(), + tr("Tox save file (*.tox)", "import dialog filter") ); + + if (path.isEmpty()) + return false; + + QFileInfo info(path); + QString profile = info.completeBaseName(); + + if (info.suffix() != "tox") + { + QMessageBox::warning( this, + tr("Ignoring non-Tox file", "popup title"), + tr("Warning: You have chosen a file that is not a Tox save file; ignoring.", "popup text"), + QMessageBox::Ok); + return false; //ingore importing non-tox file + } + + QString profilePath = QDir(Settings::getInstance().getSettingsDirPath()).filePath(profile + Core::TOX_EXT); + + if (QFileInfo(profilePath).exists()) + { + QMessageBox::StandardButton reply; + reply = QMessageBox::warning( this, + tr("Profile already exists", "import confirm title"), + tr("A profile named \"%1\" already exists. Do you want to erase it?", "import confirm text").arg(profile), + QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) + { + QFile::copy(path, profilePath); + return true; //import successfull + } + else + { + return false; //import canelled + } + } + else + { + QFile::copy(path, profilePath); + return true; //import successfull + } + +} diff --git a/src/widget/tool/profileimporter.h b/src/widget/tool/profileimporter.h new file mode 100644 index 000000000..5ec3040e6 --- /dev/null +++ b/src/widget/tool/profileimporter.h @@ -0,0 +1,38 @@ +/* + Copyright © 2015-2016 by The qTox Project + + This file is part of qTox, a Qt-based graphical interface for Tox. + + qTox is libre 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. + + qTox 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 qTox. If not, see . +*/ + +#ifndef PROFILEIMPORTER_H +#define PROFILEIMPORTER_H + +#include + +class ProfileImporter : public QWidget +{ + Q_OBJECT + +public: + explicit ProfileImporter(QWidget *parent = 0); + bool importProfile(); + +signals: + +public slots: +}; + +#endif // PROFILEIMPORTER_H diff --git a/ui/loginScreen/loginScreen.css b/ui/loginScreen/loginScreen.css index d742cbdd1..a67052122 100644 --- a/ui/loginScreen/loginScreen.css +++ b/ui/loginScreen/loginScreen.css @@ -36,6 +36,7 @@ QStackedWidget QPushButton } #loginButton, +#importButton, #createAccountButton { border-radius:5px; padding:5px; @@ -43,6 +44,7 @@ QStackedWidget QPushButton } #loginButton:hover, +#importButton:hover, #createAccountButton:hover { background: #0c530d; }