From 896d80d02ccef746ba6598534ce444da2755ae04 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:31:56 -0400 Subject: server settings converted to array instead of byte array map moved cleanup to ServerList --- src/serverinfo.cpp | 22 +++++++++++++ src/serverinfo.h | 4 +++ src/settings.cpp | 94 +++++++++++++++++++++++++++++++++++------------------- 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 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 -- cgit v1.3.1