summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-26 01:31:56 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-26 01:31:56 -0400
commit896d80d02ccef746ba6598534ce444da2755ae04 (patch)
tree90f7a878d11ecf0436d79a40b47b222d3ed4dfe0
parentaff3ee8fcf427c9ff8c554a179222eabec3a95e2 (diff)
server settings converted to array instead of byte array map
moved cleanup to ServerList
-rw-r--r--src/serverinfo.cpp22
-rw-r--r--src/serverinfo.h4
-rw-r--r--src/settings.cpp94
-rw-r--r--src/settings.h3
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