diff --git a/src/main.cpp b/src/main.cpp index 16ea730a8..19cc22f11 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,8 +42,8 @@ void myMessageHandler(QtMsgType type, const QMessageLogContext& ctxt, const QStr && msg == QString("QFSFileEngine::open: No file name specified")) return; - dflt(type, ctxt, msg); // this must be thread safe, otherwise qDebug() would never ever work QMutexLocker locker(&mutex); + dflt(type, ctxt, msg); *logFile << QTime::currentTime().toString("HH:mm:ss' '") << msg << '\n'; logFile->flush(); } diff --git a/src/widget/toxsave.cpp b/src/widget/toxsave.cpp new file mode 100644 index 000000000..1b4a38fa9 --- /dev/null +++ b/src/widget/toxsave.cpp @@ -0,0 +1,78 @@ +/* + Copyright (C) 2014 by Project Tox + + This file is part of qTox, a Qt-based graphical interface for Tox. + + This program 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. + This program 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 COPYING file for more details. +*/ + +#include "toxsave.h" +#include "widget.h" +#include "src/core.h" +#include "src/misc/settings.h" +#include +#include +#include + +void toxSaveEventHandler(const QByteArray& eventData) +{ + if (!eventData.endsWith(".tox")) + return; + + handleToxSave(eventData); +} + +static bool checkContinue(const QString& title, const QString& msg) +{ + QMessageBox::StandardButton resp = QMessageBox::question(Widget::getInstance(), title, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + return resp == QMessageBox::Yes; +} + +void handleToxSave(const QString& path) +{ + Core* core = Core::getInstance(); + + while (!core) + { + core = Core::getInstance(); + qApp->processEvents(); + } + + while (!core->isReady()) + { + qApp->processEvents(); + } + + QFileInfo info(path); + if (!info.exists()) + return; + + QString profile = info.completeBaseName(); + + if (info.suffix() != "tox") + { + QMessageBox::warning(Widget::getInstance(), + QObject::tr("Ignoring non-Tox file", "popup title"), + QObject::tr("Warning: you've chosen a file that is not a Tox save file; ignoring.", "popup text")); + return; + } + + QString profilePath = QDir(Settings::getSettingsDirPath()).filePath(profile + Core::TOX_EXT); + + if (QFileInfo(profilePath).exists() && !checkContinue(QObject::tr("Profile already exists", "import confirm title"), + QObject::tr("A profile named \"%1\" already exists. Do you want to erase it?", "import confirm text").arg(profile))) + return; + + 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 + QMessageBox::information(Widget::getInstance(), QObject::tr("Profile imported"), QObject::tr("%1.tox was successfully imported").arg(profile)); +} diff --git a/src/widget/toxsave.h b/src/widget/toxsave.h new file mode 100644 index 000000000..c3a900b51 --- /dev/null +++ b/src/widget/toxsave.h @@ -0,0 +1,30 @@ +/* + Copyright (C) 2014 by Project Tox + + This file is part of qTox, a Qt-based graphical interface for Tox. + + This program 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. + This program 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 COPYING file for more details. +*/ + +#ifndef TOXSAVE_H +#define TOXSAVE_H + +class QString; +class QByteArray; + +/// Shows a dialog asking whether or not to add this tox address as a friend +/// Will wait until the core is ready first +void handleToxSave(const QString& path); + +// Internals +void toxSaveEventHandler(const QByteArray& eventData); + +#endif