diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-26 01:31:56 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-26 01:31:56 -0400 |
| commit | 896d80d02ccef746ba6598534ce444da2755ae04 (patch) | |
| tree | 90f7a878d11ecf0436d79a40b47b222d3ed4dfe0 /src | |
| parent | aff3ee8fcf427c9ff8c554a179222eabec3a95e2 (diff) | |
server settings converted to array instead of byte array map
moved cleanup to ServerList
Diffstat (limited to 'src')
| -rw-r--r-- | src/serverinfo.cpp | 22 | ||||
| -rw-r--r-- | src/serverinfo.h | 4 | ||||
| -rw-r--r-- | src/settings.cpp | 94 | ||||
| -rw-r--r-- | src/settings.h | 3 |
4 files changed, 90 insertions, 33 deletions
diff --git a/src/serverinfo.cpp b/src/serverinfo.cpp index 70cdec6d..16e65f52 100644 --- a/src/serverinfo.cpp +++ b/src/serverinfo.cpp @@ -1,4 +1,7 @@ #include "serverinfo.h"
+#include "log.h"
+
+using namespace MOBase;
ServerInfo::ServerInfo()
: ServerInfo({}, false, {}, 0, 0, 0.0)
@@ -100,3 +103,22 @@ ServerList::container ServerList::getPreferred() const return v;
}
+
+void ServerList::cleanup()
+{
+ QDate now = QDate::currentDate();
+
+ for (auto itor=m_servers.begin(); itor!=m_servers.end(); ) {
+ const QDate lastSeen = itor->lastSeen();
+
+ if (lastSeen.daysTo(now) > 30) {
+ log::debug(
+ "removing server {} since it hasn't been available for downloads "
+ "in over a month", itor->name());
+
+ itor = m_servers.erase(itor);
+ } else {
+ ++itor;
+ }
+ }
+}
diff --git a/src/serverinfo.h b/src/serverinfo.h index 2e5682fc..c6e3b640 100644 --- a/src/serverinfo.h +++ b/src/serverinfo.h @@ -52,6 +52,10 @@ public: container getPreferred() const;
+ // removes servers that haven't been seen in a while
+ //
+ void cleanup();
+
private:
container m_servers;
};
diff --git a/src/settings.cpp b/src/settings.cpp index c57530e4..3a7bda75 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -869,6 +869,50 @@ void Settings::setDownloadSpeed(const QString &serverName, int bytesPerSecond) ServerList Settings::getServers() const { + // servers used to be a map of byte arrays until 2.2.1, it's now an array of + // individual values instead + // + // so post 2.2.1, only one key is returned: "size", the size of the arrays; + // 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(); + + if (!keys.empty() && keys[0] != "size") { + // old format + return getServersFromOldMap(); + } + + + ServerList list; + + const int size = m_Settings.beginReadArray("Servers"); + + for (int i=0; i<size; ++i) { + m_Settings.setArrayIndex(i); + + 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(), + m_Settings.value("downloadCount").toInt(), + m_Settings.value("downloadSpeed").toDouble()); + + list.add(std::move(server)); + } + + m_Settings.endArray(); + + return list; +} + +ServerList Settings::getServersFromOldMap() const +{ + // for 2.2.1 and before + ServerList list; m_Settings.beginGroup("Servers"); @@ -892,46 +936,32 @@ ServerList Settings::getServers() const return list; } -void Settings::updateServers(const ServerList& servers) +void Settings::updateServers(ServerList servers) { + // clean up unavailable servers + servers.cleanup(); + m_Settings.beginGroup("Servers"); - QStringList oldServerKeys = m_Settings.childKeys(); + m_Settings.remove(""); + m_Settings.endGroup(); - for (const auto& server : servers) { - if (!oldServerKeys.contains(server.name())) { - // not yet known server - QVariantMap newVal; - newVal["premium"] = server.isPremium(); - newVal["preferred"] = server.preferred(); - newVal["lastSeen"] = server.lastSeen(); - newVal["downloadCount"] = 0; - newVal["downloadSpeed"] = 0.0; + m_Settings.beginWriteArray("Servers"); - m_Settings.setValue(server.name(), newVal); - } else { - QVariantMap data = m_Settings.value(server.name()).toMap(); - data["premium"] = server.isPremium(); - data["lastSeen"] = server.lastSeen(); - data["preferred"] = server.preferred(); + int i=0; + for (const auto& server : servers) { + m_Settings.setArrayIndex(i); - m_Settings.setValue(server.name(), data); - } - } + 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()); + m_Settings.setValue("downloadCount", server.downloadCount()); + m_Settings.setValue("downloadSpeed", server.downloadSpeed()); - // clean up unavailable servers - QDate now = QDate::currentDate(); - for (const QString &key : m_Settings.childKeys()) { - QVariantMap val = m_Settings.value(key).toMap(); - QDate lastSeen = val["lastSeen"].toDate(); - if (lastSeen.daysTo(now) > 30) { - log::debug("removing server {} since it hasn't been available for downloads in over a month", key); - m_Settings.remove(key); - } + ++i; } - m_Settings.endGroup(); - - m_Settings.sync(); + m_Settings.endArray(); } void Settings::addBlacklistPlugin(const QString &fileName) diff --git a/src/settings.h b/src/settings.h index e7337301..810daac2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -484,7 +484,8 @@ public: void setDownloadSpeed(const QString &serverName, int bytesPerSecond); ServerList getServers() const; - void updateServers(const ServerList& servers); + ServerList getServersFromOldMap() const; + void updateServers(ServerList servers); /** * @brief add a plugin that is to be blacklisted |
