1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

fix: Fixed crash on profile import

Fixed #3660. Removed using of GUI class in Profile Importer. Because, it
cannot be used before Nexus instance will be created. As result, it
provide crash in some cases.
This commit is contained in:
Diadlo 2016-08-29 23:53:31 +03:00
parent fcfac15c78
commit a130a60e9a
No known key found for this signature in database
GPG Key ID: 5AF9F2E29107C727
2 changed files with 64 additions and 25 deletions

View File

@ -18,34 +18,67 @@
*/
#include "profileimporter.h"
#include <QString>
#include <QFile>
#include <QDir>
#include <QApplication>
#include <QFileDialog>
#include <QFileInfo>
#include "src/persistence/settings.h"
#include "src/core/core.h"
#include "src/widget/gui.h"
#include <QDebug>
#include <QMessageBox>
#include <QPushButton>
#include "src/core/core.h"
#include "src/persistence/settings.h"
/**
* @class ProfileImporter
* @brief This class provides the ability to import profile.
* @note This class can be used before @a Nexus instance will be created,
* consequently it can't use @a GUI class. Therefore it should use QMessageBox
* to create dialog forms.
*/
ProfileImporter::ProfileImporter(QWidget *parent) : QWidget(parent)
{
}
/**
* @brief Show a file dialog. Selected file will be imported as Tox profile.
* @return True, if the import was succesful. False otherwise.
*/
bool ProfileImporter::importProfile()
{
QString path = QFileDialog::getOpenFileName(this,
tr("Import profile", "import dialog title"),
QDir::homePath(),
tr("Tox save file (*.tox)", "import dialog filter"),
0,
QString title = tr("Import profile", "import dialog title");
QString filter = tr("Tox save file (*.tox)", "import dialog filter");
QString dir = QDir::homePath();
QString path = QFileDialog::getOpenFileName(this, title, dir, filter, 0,
QFileDialog::DontUseNativeDialog);
return importProfile(path);
}
/**
* @brief Asks the user a question with Yes/No choices.
* @param title Title of question window.
* @param message Text in question window.
* @return True if the answer is positive, false otherwise.
*/
bool ProfileImporter::askQuestion(QString title, QString message)
{
QMessageBox::Icon icon = QMessageBox::Warning;
QMessageBox box(icon, title, message, QMessageBox::NoButton, this);
QPushButton* pushButton1 = box.addButton(QApplication::tr("Yes"), QMessageBox::AcceptRole);
QPushButton* pushButton2 = box.addButton(QApplication::tr("No"), QMessageBox::RejectRole);
box.setDefaultButton(pushButton2);
box.setEscapeButton(pushButton2);
box.exec();
return box.clickedButton() == pushButton1;
}
/**
* @brief Try to import Tox profile.
* @param path Path to Tox profile.
* @return True, if the import was succesful. False otherwise.
*/
bool ProfileImporter::importProfile(const QString &path)
{
if (path.isEmpty())
@ -54,8 +87,8 @@ bool ProfileImporter::importProfile(const QString &path)
QFileInfo info(path);
if (!info.exists())
{
GUI::showWarning(tr("File doesn't exist"),
tr("Profile doesn't exist"));
QMessageBox::warning(this, tr("File doesn't exist"),
tr("Profile doesn't exist"), QMessageBox::Ok);
return false;
}
@ -63,18 +96,23 @@ bool ProfileImporter::importProfile(const QString &path)
if (info.suffix() != "tox")
{
GUI::showWarning(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::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);
QString settingsPath = Settings::getInstance().getSettingsDirPath();
QString profilePath = QDir(settingsPath).filePath(profile + Core::TOX_EXT);
if (QFileInfo(profilePath).exists())
{
QString title = tr("Profile already exists", "import confirm title");
QString message = tr("A profile named \"%1\" already exists. Do you want to erase it?", "import confirm text").arg(profile);
bool erase = GUI::askQuestion(title, message);
QString message = tr("A profile named \"%1\" already exists. "
"Do you want to erase it?",
"import confirm text").arg(profile);
bool erase = askQuestion(title, message);
if (!erase)
return false; //import canelled
@ -85,7 +123,9 @@ bool ProfileImporter::importProfile(const QString &path)
QFile::copy(path, profilePath);
// no good way to update the ui from here... maybe we need a Widget:refreshUi() function...
// such a thing would simplify other code as well I believe
GUI::showInfo(tr("Profile imported"),
tr("%1.tox was successfully imported").arg(profile));
QMessageBox::information(this, tr("Profile imported"),
tr("%1.tox was successfully imported").arg(profile),
QMessageBox::Ok);
return true; //import successfull
}

View File

@ -31,9 +31,8 @@ public:
bool importProfile(const QString &path);
bool importProfile();
signals:
public slots:
private:
bool askQuestion(QString title, QString message);
};
#endif // PROFILEIMPORTER_H