From 2eee72da6815f9d5c643b58c95f633e69da5150a Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Mon, 26 Aug 2019 04:21:06 -0400
Subject: moved code for byte sizes and speed to uibase added scoped classes
for QSettings groups and arrays servers logged on startup
---
src/settings.cpp | 270 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 177 insertions(+), 93 deletions(-)
(limited to 'src/settings.cpp')
diff --git a/src/settings.cpp b/src/settings.cpp
index b11bc61c..406544f7 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -27,6 +27,78 @@ along with Mod Organizer. If not, see .
using namespace MOBase;
+class ScopedGroup
+{
+public:
+ ScopedGroup(QSettings& s, const QString& name)
+ : m_settings(s)
+ {
+ m_settings.beginGroup(name);
+ }
+
+ ~ScopedGroup()
+ {
+ m_settings.endGroup();
+ }
+
+ ScopedGroup(const ScopedGroup&) = delete;
+ ScopedGroup& operator=(const ScopedGroup&) = delete;
+
+private:
+ QSettings& m_settings;
+};
+
+
+class ScopedReadArray
+{
+public:
+ ScopedReadArray(QSettings& s, const QString& name)
+ : m_settings(s), m_count(0)
+ {
+ m_count = m_settings.beginReadArray(name);
+ }
+
+ ~ScopedReadArray()
+ {
+ m_settings.endArray();
+ }
+
+ ScopedReadArray(const ScopedReadArray&) = delete;
+ ScopedReadArray& operator=(const ScopedReadArray&) = delete;
+
+ int count() const
+ {
+ return m_count;
+ }
+
+private:
+ QSettings& m_settings;
+ int m_count;
+};
+
+
+class ScopedWriteArray
+{
+public:
+ ScopedWriteArray(QSettings& s, const QString& name)
+ : m_settings(s)
+ {
+ m_settings.beginWriteArray(name);
+ }
+
+ ~ScopedWriteArray()
+ {
+ m_settings.endArray();
+ }
+
+ ScopedWriteArray(const ScopedWriteArray&) = delete;
+ ScopedWriteArray& operator=(const ScopedWriteArray&) = delete;
+
+private:
+ QSettings& m_settings;
+};
+
+
template
std::optional getOptional(
const QSettings& s, const QString& name, std::optional def={})
@@ -206,19 +278,21 @@ void Settings::processUpdates(
}
if (lastVersion < QVersionNumber(2, 2, 0)) {
- m_Settings.beginGroup("Settings");
- m_Settings.remove("steam_password");
- m_Settings.remove("nexus_username");
- m_Settings.remove("nexus_password");
- m_Settings.remove("nexus_login");
- m_Settings.remove("nexus_api_key");
- m_Settings.remove("ask_for_nexuspw");
- m_Settings.remove("nmm_version");
- m_Settings.endGroup();
-
- m_Settings.beginGroup("Servers");
- m_Settings.remove("");
- m_Settings.endGroup();
+ {
+ ScopedGroup sg(m_Settings, "Settings");
+ m_Settings.remove("steam_password");
+ m_Settings.remove("nexus_username");
+ m_Settings.remove("nexus_password");
+ m_Settings.remove("nexus_login");
+ m_Settings.remove("nexus_api_key");
+ m_Settings.remove("ask_for_nexuspw");
+ m_Settings.remove("nmm_version");
+ }
+
+ {
+ ScopedGroup sg(m_Settings, "Servers");
+ m_Settings.remove("");
+ }
}
if (lastVersion < QVersionNumber(2, 2, 1)) {
@@ -251,12 +325,12 @@ void Settings::clearPlugins()
m_PluginSettings.clear();
m_PluginBlacklist.clear();
- int count = m_Settings.beginReadArray("pluginBlacklist");
- for (int i = 0; i < count; ++i) {
+
+ ScopedReadArray sra(m_Settings, "pluginBlacklist");
+ for (int i = 0; i < sra.count(); ++i) {
m_Settings.setArrayIndex(i);
m_PluginBlacklist.insert(m_Settings.value("name").toString());
}
- m_Settings.endArray();
}
bool Settings::pluginBlacklisted(const QString &fileName) const
@@ -876,46 +950,50 @@ ServerList Settings::getServers() const
// in 2.2.1, one key per server is returned
// getting the keys
- m_Settings.beginGroup("Servers");
- const auto keys = m_Settings.childKeys();
- m_Settings.endGroup();
+ QStringList keys;
+
+ {
+ ScopedGroup sg(m_Settings, "Servers");
+ keys = m_Settings.childKeys();
+ }
if (!keys.empty() && keys[0] != "size") {
// old format
return getServersFromOldMap();
}
+
// post 2.2.1 format, array of values
ServerList list;
- const int size = m_Settings.beginReadArray("Servers");
+ {
+ ScopedReadArray sra(m_Settings, "Servers");
- for (int i=0; i 0) {
- lastDownloads.push_back(bytesPerSecond);
+ const auto lastDownloadsString = m_Settings.value("lastDownloads").toString();
+ for (const auto& s : lastDownloadsString.split(" ")) {
+ const auto bytesPerSecond = s.toInt();
+ if (bytesPerSecond > 0) {
+ lastDownloads.push_back(bytesPerSecond);
+ }
}
- }
- ServerInfo server(
- m_Settings.value("name").toString(),
- m_Settings.value("premium").toBool(),
- QDate::fromString(m_Settings.value("lastSeen").toString(), Qt::ISODate),
- m_Settings.value("preferred").toInt(),
- lastDownloads);
+ ServerInfo server(
+ m_Settings.value("name").toString(),
+ m_Settings.value("premium").toBool(),
+ QDate::fromString(m_Settings.value("lastSeen").toString(), Qt::ISODate),
+ m_Settings.value("preferred").toInt(),
+ lastDownloads);
- list.add(std::move(server));
+ list.add(std::move(server));
+ }
}
- m_Settings.endArray();
-
return list;
}
@@ -924,8 +1002,7 @@ ServerList Settings::getServersFromOldMap() const
// for 2.2.1 and before
ServerList list;
-
- m_Settings.beginGroup("Servers");
+ ScopedGroup sg(m_Settings, "Servers");
for (const QString &serverKey : m_Settings.childKeys()) {
QVariantMap data = m_Settings.value(serverKey).toMap();
@@ -943,8 +1020,6 @@ ServerList Settings::getServersFromOldMap() const
list.add(std::move(server));
}
- m_Settings.endGroup();
-
return list;
}
@@ -953,34 +1028,35 @@ void Settings::updateServers(ServerList servers)
// clean up unavailable servers
servers.cleanup();
- m_Settings.beginGroup("Servers");
- m_Settings.remove("");
- m_Settings.endGroup();
-
- m_Settings.beginWriteArray("Servers");
-
- int i=0;
- for (const auto& server : servers) {
- m_Settings.setArrayIndex(i);
-
- m_Settings.setValue("name", server.name());
- m_Settings.setValue("premium", server.isPremium());
- m_Settings.setValue("lastSeen", server.lastSeen().toString(Qt::ISODate));
- m_Settings.setValue("preferred", server.preferred());
+ {
+ ScopedGroup sg(m_Settings, "Servers");
+ m_Settings.remove("");
+ }
- QString lastDownloads;
- for (const auto& speed : server.lastDownloads()) {
- if (speed > 0) {
- lastDownloads += QString("%1 ").arg(speed);
+ {
+ ScopedWriteArray swa(m_Settings, "Servers");
+
+ int i=0;
+ for (const auto& server : servers) {
+ m_Settings.setArrayIndex(i);
+
+ m_Settings.setValue("name", server.name());
+ m_Settings.setValue("premium", server.isPremium());
+ m_Settings.setValue("lastSeen", server.lastSeen().toString(Qt::ISODate));
+ m_Settings.setValue("preferred", server.preferred());
+
+ QString lastDownloads;
+ for (const auto& speed : server.lastDownloads()) {
+ if (speed > 0) {
+ lastDownloads += QString("%1 ").arg(speed);
+ }
}
- }
- m_Settings.setValue("lastDownloads", lastDownloads.trimmed());
+ m_Settings.setValue("lastDownloads", lastDownloads.trimmed());
- ++i;
+ ++i;
+ }
}
-
- m_Settings.endArray();
}
void Settings::addBlacklistPlugin(const QString &fileName)
@@ -992,23 +1068,22 @@ void Settings::addBlacklistPlugin(const QString &fileName)
void Settings::writePluginBlacklist()
{
m_Settings.remove("pluginBlacklist");
- m_Settings.beginWriteArray("pluginBlacklist");
+
+ ScopedWriteArray swa(m_Settings, "pluginBlacklist");
int idx = 0;
for (const QString &plugin : m_PluginBlacklist) {
m_Settings.setArrayIndex(idx++);
m_Settings.setValue("name", plugin);
}
-
- m_Settings.endArray();
}
std::map Settings::getRecentDirectories() const
{
std::map map;
- const int size = m_Settings.beginReadArray("recentDirectories");
+ ScopedReadArray sra(m_Settings, "recentDirectories");
- for (int i=0; i Settings::getRecentDirectories() const
}
}
- m_Settings.endArray();
-
return map;
}
void Settings::setRecentDirectories(const std::map& map)
{
m_Settings.remove("recentDirectories");
- m_Settings.beginWriteArray("recentDirectories");
+
+ ScopedWriteArray swa(m_Settings, "recentDirectories");
int index = 0;
for (auto&& p : map) {
@@ -1037,16 +1111,14 @@ void Settings::setRecentDirectories(const std::map& map)
++index;
}
-
- m_Settings.endArray();
}
std::vector> Settings::getExecutables() const
{
- const int count = m_Settings.beginReadArray("customExecutables");
+ ScopedReadArray sra(m_Settings, "customExecutables");
std::vector> v;
- for (int i=0; i map;
@@ -1059,15 +1131,14 @@ std::vector> Settings::getExecutables() const
v.push_back(map);
}
- m_Settings.endArray();
-
return v;
}
void Settings::setExecutables(const std::vector>& v)
{
m_Settings.remove("customExecutables");
- m_Settings.beginWriteArray("customExecutables");
+
+ ScopedWriteArray swa(m_Settings, "customExecutables");
int i = 0;
@@ -1080,8 +1151,6 @@ void Settings::setExecutables(const std::vector>& v)
++i;
}
-
- m_Settings.endArray();
}
bool Settings::isTutorialCompleted(const QString& windowName) const
@@ -1154,9 +1223,8 @@ void Settings::setQuestionFileButton(
void Settings::resetQuestionButtons()
{
- m_Settings.beginGroup("DialogChoices");
+ ScopedGroup sg(m_Settings, "DialogChoices");
m_Settings.remove("");
- m_Settings.endGroup();
}
std::optional Settings::getIndex(const QComboBox* cb) const
@@ -1248,17 +1316,34 @@ void Settings::dump() const
log::debug("settings:");
- m_Settings.beginGroup("Settings");
+ {
+ ScopedGroup sg(m_Settings, "Settings");
- for (auto k : m_Settings.allKeys()) {
- if (ignore.contains(k, Qt::CaseInsensitive)) {
- continue;
- }
+ for (auto k : m_Settings.allKeys()) {
+ if (ignore.contains(k, Qt::CaseInsensitive)) {
+ continue;
+ }
- log::debug(" . {}={}", k, m_Settings.value(k).toString());
+ log::debug(" . {}={}", k, m_Settings.value(k).toString());
+ }
}
- m_Settings.endGroup();
+ log::debug("servers:");
+
+ for (const auto& server : getServers()) {
+ QString lastDownloads;
+ for (auto speed : server.lastDownloads()) {
+ lastDownloads += QString("%1 ").arg(speed);
+ }
+
+ log::debug(
+ " . {} premium={} lastSeen={} preferred={} lastDownloads={}",
+ server.name(),
+ server.isPremium() ? "yes" : "no",
+ server.lastSeen().toString(Qt::ISODate),
+ server.preferred(),
+ lastDownloads.trimmed());
+ }
}
@@ -1278,9 +1363,8 @@ void GeometrySettings::resetIfNeeded()
return;
}
- m_Settings.beginGroup("geometry");
+ ScopedGroup sg(m_Settings, "geometry");
m_Settings.remove("");
- m_Settings.endGroup();
}
void GeometrySettings::saveGeometry(const QWidget* w)
--
cgit v1.3.1