From 1ded562d9df2221da03959edb2523e255fc0244e Mon Sep 17 00:00:00 2001 From: tux3 Date: Fri, 5 Jun 2015 16:24:47 +0200 Subject: [PATCH] Clean Settings interface --- src/core/core.cpp | 4 +- src/core/corefile.cpp | 4 +- src/core/corestructs.h | 8 ++++ src/historykeeper.cpp | 2 +- src/main.cpp | 2 +- src/misc/settings.cpp | 10 ++-- src/misc/settings.h | 84 +++++++++++++++------------------ src/profile.cpp | 14 +++--- src/widget/form/chatform.cpp | 4 +- src/widget/form/profileform.cpp | 2 +- src/widget/toxsave.cpp | 3 +- 11 files changed, 68 insertions(+), 69 deletions(-) diff --git a/src/core/core.cpp b/src/core/core.cpp index 96b6877cd..6f09bdae2 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -419,7 +419,7 @@ bool Core::checkConnection() void Core::bootstrapDht() { const Settings& s = Settings::getInstance(); - QList dhtServerList = s.getDhtServerList(); + QList dhtServerList = s.getDhtServerList(); int listSize = dhtServerList.size(); if (listSize == 0) @@ -434,7 +434,7 @@ void Core::bootstrapDht() int i=0; while (i < 2) // i think the more we bootstrap, the more we jitter because the more we overwrite nodes { - const Settings::DhtServer& dhtServer = dhtServerList[j % listSize]; + const DhtServer& dhtServer = dhtServerList[j % listSize]; if (tox_bootstrap(tox, dhtServer.address.toLatin1().data(), dhtServer.port, CUserId(dhtServer.userId).data(), nullptr)) { diff --git a/src/core/corefile.cpp b/src/core/corefile.cpp index 33ec3a444..c8957b42e 100644 --- a/src/core/corefile.cpp +++ b/src/core/corefile.cpp @@ -243,8 +243,8 @@ void CoreFile::onFileReceiveCallback(Tox*, uint32_t friendId, uint32_t fileId, u { // Avatars of size 0 means explicitely no avatar emit core->friendAvatarRemoved(friendId); - QFile::remove(QDir(Settings::getSettingsDirPath()).filePath("avatars/"+friendAddr.left(64)+".png")); - QFile::remove(QDir(Settings::getSettingsDirPath()).filePath("avatars/"+friendAddr.left(64)+".hash")); + QFile::remove(Settings::getInstance().getSettingsDirPath()+"avatars/"+friendAddr.left(64)+".png"); + QFile::remove(Settings::getInstance().getSettingsDirPath()+"avatars/"+friendAddr.left(64)+".hash"); return; } else diff --git a/src/core/corestructs.h b/src/core/corestructs.h index 7b1901fc8..644a9dd16 100644 --- a/src/core/corestructs.h +++ b/src/core/corestructs.h @@ -11,6 +11,14 @@ class QTimer; enum class Status : int {Online = 0, Away, Busy, Offline}; +struct DhtServer +{ + QString name; + QString userId; + QString address; + quint16 port; +}; + struct ToxFile { enum FileStatus diff --git a/src/historykeeper.cpp b/src/historykeeper.cpp index 82e316aa4..f08067219 100644 --- a/src/historykeeper.cpp +++ b/src/historykeeper.cpp @@ -359,7 +359,7 @@ HistoryKeeper::ChatType HistoryKeeper::convertToChatType(int ct) QString HistoryKeeper::getHistoryPath(QString currentProfile, int encrypted) { - QDir baseDir(Settings::getSettingsDirPath()); + QDir baseDir(Settings::getInstance().getSettingsDirPath()); if (currentProfile.isEmpty()) currentProfile = Settings::getInstance().getCurrentProfile(); diff --git a/src/main.cpp b/src/main.cpp index 25f5605be..539273b74 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -144,7 +144,7 @@ int main(int argc, char *argv[]) #ifdef LOG_TO_FILE logFile = new QTextStream; - QFile logfile(Settings::getSettingsDirPath()+"qtox.log"); + QFile logfile(Settings::getInstance().getSettingsDirPath()+"qtox.log"); if (logfile.open(QIODevice::Append)) { logFile->setDevice(&logfile); diff --git a/src/misc/settings.cpp b/src/misc/settings.cpp index f478fa3da..97c683b56 100644 --- a/src/misc/settings.cpp +++ b/src/misc/settings.cpp @@ -42,10 +42,10 @@ const QString Settings::globalSettingsFile = "qtox.ini"; Settings* Settings::settings{nullptr}; -bool Settings::makeToxPortable{false}; Settings::Settings() : - loaded(false), useCustomDhtList{false}, currentProfileId(0) + loaded(false), useCustomDhtList{false}, + makeToxPortable{false}, currentProfileId(0) { load(); } @@ -420,10 +420,10 @@ QString Settings::getSettingsDirPath() // workaround for https://bugreports.qt-project.org/browse/QTBUG-38845 #ifdef Q_OS_WIN return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QDir::separator() - + "AppData" + QDir::separator() + "Roaming" + QDir::separator() + "tox" + QDir::separator()); + + "AppData" + QDir::separator() + "Roaming" + QDir::separator() + "tox")+QDir::separator(); #else return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) - + QDir::separator() + "tox" + QDir::separator()); + + QDir::separator() + "tox")+QDir::separator(); #endif } @@ -484,7 +484,7 @@ QByteArray Settings::getAvatarHash(const QString& ownerId) return out; } -const QList& Settings::getDhtServerList() const +const QList& Settings::getDhtServerList() const { return dhtServerList; } diff --git a/src/misc/settings.h b/src/misc/settings.h index d03ff27ba..89a469452 100644 --- a/src/misc/settings.h +++ b/src/misc/settings.h @@ -20,6 +20,7 @@ #include #include #include +#include "src/core/corestructs.h" class ToxId; namespace Db { enum class syncType; } @@ -32,20 +33,22 @@ class Settings : public QObject public: ~Settings() = default; static Settings& getInstance(); + QString getSettingsDirPath(); ///< The returned path ends with a directory separator + void createSettingsDir(); ///< Creates a path to the settings dir, if it doesn't already exist + void createPersonal(QString basename); ///< Write a default personnal .ini settings file for a profile - void createPersonal(QString basename); ///< Write a default personnal settings file for a profile + void save(bool writePersonal = true); + void save(QString path, bool writePersonal = true); + void load(); - static QString getSettingsDirPath(); ///< The returned path ends with a directory separator - - struct DhtServer - { - QString name; - QString userId; - QString address; - quint16 port; - }; +signals: + void dhtServerListChanged(); + void smileyPackChanged(); + void emojiFontChanged(); +public: + // Getter/setters const QList& getDhtServerList() const; void setDhtServerList(const QList& newDhtServerList); @@ -146,28 +149,6 @@ public: QSize getCamVideoRes() const; void setCamVideoRes(QSize newValue); - // Assume all widgets have unique names - // Don't use it to save every single thing you want to save, use it - // for some general purpose widgets, such as MainWindows or Splitters, - // which have widget->saveX() and widget->loadX() methods. - QByteArray getWidgetData(const QString& uniqueName) const; - void setWidgetData(const QString& uniqueName, const QByteArray& data); - - // Wrappers around getWidgetData() and setWidgetData() - // Assume widget has a unique objectName set - template - void restoreGeometryState(T* widget) const - { - widget->restoreGeometry(getWidgetData(widget->objectName() + "Geometry")); - widget->restoreState(getWidgetData(widget->objectName() + "State")); - } - template - void saveGeometryState(const T* widget) - { - setWidgetData(widget->objectName() + "Geometry", widget->saveGeometry()); - setWidgetData(widget->objectName() + "State", widget->saveState()); - } - bool isAnimationEnabled() const; void setAnimationEnabled(bool newValue); @@ -248,14 +229,29 @@ public: bool getAutoLogin() const; void setAutoLogin(bool state); -public: - void save(bool writePersonal = true); - void save(QString path, bool writePersonal = true); - void load(); + // Assume all widgets have unique names + // Don't use it to save every single thing you want to save, use it + // for some general purpose widgets, such as MainWindows or Splitters, + // which have widget->saveX() and widget->loadX() methods. + QByteArray getWidgetData(const QString& uniqueName) const; + void setWidgetData(const QString& uniqueName, const QByteArray& data); + + // Wrappers around getWidgetData() and setWidgetData() + // Assume widget has a unique objectName set + template + void restoreGeometryState(T* widget) const + { + widget->restoreGeometry(getWidgetData(widget->objectName() + "Geometry")); + widget->restoreState(getWidgetData(widget->objectName() + "State")); + } + template + void saveGeometryState(const T* widget) + { + setWidgetData(widget->objectName() + "Geometry", widget->saveGeometry()); + setWidgetData(widget->objectName() + "State", widget->saveState()); + } private: - static Settings* settings; - Settings(); Settings(Settings &settings) = delete; Settings& operator=(const Settings&) = delete; @@ -263,9 +259,7 @@ private: void saveGlobal(QString path); void savePersonal(QString path); - static const QString globalSettingsFile; - static const QString OLDFILENAME; - +private: bool loaded; bool useCustomDhtList; @@ -279,7 +273,7 @@ private: bool groupchatPosition; bool enableIPv6; QString translation; - static bool makeToxPortable; + bool makeToxPortable; bool autostartInTray; bool closeToTray; bool minimizeToTray; @@ -354,10 +348,8 @@ private: int themeColor; -signals: - void dhtServerListChanged(); - void smileyPackChanged(); - void emojiFontChanged(); + static Settings* settings; + static const QString globalSettingsFile; }; #endif // SETTINGS_HPP diff --git a/src/profile.cpp b/src/profile.cpp index 04bf4ab38..1a06c4ae8 100644 --- a/src/profile.cpp +++ b/src/profile.cpp @@ -144,7 +144,7 @@ QByteArray Profile::loadToxSave() /// TODO: Cache the data, invalidate it only when we save QByteArray data; - QString path = Settings::getSettingsDirPath() + QDir::separator() + name + ".tox"; + QString path = Settings::getInstance().getSettingsDirPath() + name + ".tox"; QFile saveFile(path); qint64 fileSize; qDebug() << "Loading tox save "<showGrabber(); // Create dir for screenshots - QDir(Settings::getSettingsDirPath()).mkdir("screenshots"); + QDir(Settings::getInstance().getSettingsDirPath()).mkdir("screenshots"); } void ChatForm::onScreenshotTaken(const QPixmap &pixmap) { - QTemporaryFile file(QDir(Settings::getSettingsDirPath() + QDir::separator() + "screenshots" + QDir::separator()).filePath("qTox-Screenshot-XXXXXXXX.png")); + QTemporaryFile file(Settings::getInstance().getSettingsDirPath()+"screenshots"+QDir::separator()+"qTox-Screenshot-XXXXXXXX.png"); if (!file.open()) { QMessageBox::warning(this, tr("Failed to open temporary file", "Temporary file for screenshot"), diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index 9788264aa..58ab70e63 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -264,7 +264,7 @@ void ProfileForm::onExportClicked() GUI::showWarning(tr("Location not writable","Title of permissions popup"), tr("You do not have permission to write that location. Choose another, or cancel the save dialog.", "text of permissions popup")); return; } - if (!QFile::copy(QDir(Settings::getSettingsDirPath()).filePath(current), path)) + if (!QFile::copy(Settings::getInstance().getSettingsDirPath()+current, path)) GUI::showWarning(tr("Failed to copy file"), tr("The file you chose could not be written to.")); } } diff --git a/src/widget/toxsave.cpp b/src/widget/toxsave.cpp index 845ed32dd..977953912 100644 --- a/src/widget/toxsave.cpp +++ b/src/widget/toxsave.cpp @@ -17,7 +17,6 @@ #include "src/core/core.h" #include "src/misc/settings.h" #include -#include #include bool toxSaveEventHandler(const QByteArray& eventData) @@ -55,7 +54,7 @@ bool handleToxSave(const QString& path) return false; } - QString profilePath = QDir(Settings::getSettingsDirPath()).filePath(profile + Core::TOX_EXT); + QString profilePath = Settings::getInstance().getSettingsDirPath()+profile+Core::TOX_EXT; if (QFileInfo(profilePath).exists() && !GUI::askQuestion(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)))