summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-26 00:48:25 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-26 00:48:25 -0400
commit36dbb4bad74b097d44b843a2e934aa4a58ef6492 (patch)
treefc599b222b399a5f3e1b691d008970bb1db5075b /src
parent7395fbb7544740a136884e103cb0829bd10b5655 (diff)
ServerList instead of a QList of ServerInfo
changed preferred to an int moved all server settings to Settings
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp22
-rw-r--r--src/serverinfo.cpp63
-rw-r--r--src/serverinfo.h35
-rw-r--r--src/settings.cpp36
-rw-r--r--src/settings.h5
-rw-r--r--src/settingsdialognexus.cpp77
6 files changed, 193 insertions, 45 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index b6ae59a1..9921ad82 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -5904,18 +5904,22 @@ void MainWindow::nxmTrackedModsAvailable(QVariant userData, QVariant resultData,
void MainWindow::nxmDownloadURLs(QString, int, int, QVariant, QVariant resultData, int)
{
- QVariantList serverList = resultData.toList();
+ ServerList servers;
- QList<ServerInfo> servers;
- for (const QVariant &server : serverList) {
- QVariantMap serverInfo = server.toMap();
- ServerInfo info(
- serverInfo["short_name"].toString(),
- serverInfo["name"].toString().contains("Premium", Qt::CaseInsensitive),
+ for (const QVariant &var : resultData.toList()) {
+ const QVariantMap map = var.toMap();
+
+ ServerInfo server(
+ map["short_name"].toString(),
+ map["name"].toString().contains("Premium", Qt::CaseInsensitive),
QDate::currentDate(),
- serverInfo["short_name"].toString().contains("CDN", Qt::CaseInsensitive));
- servers.append(info);
+ map["short_name"].toString().contains("CDN", Qt::CaseInsensitive) ? 1 : 0,
+ map["downloadCount"].toInt(),
+ map["downloadSpeed"].toDouble());
+
+ servers.add(std::move(server));
}
+
m_OrganizerCore.settings().updateServers(servers);
}
diff --git a/src/serverinfo.cpp b/src/serverinfo.cpp
index 5912c226..67a80b9e 100644
--- a/src/serverinfo.cpp
+++ b/src/serverinfo.cpp
@@ -1,13 +1,15 @@
#include "serverinfo.h"
ServerInfo::ServerInfo()
- : ServerInfo({}, false, {}, false)
+ : ServerInfo({}, false, {}, 0, 0, 0.0)
{
}
-ServerInfo::ServerInfo(QString n, bool premium, QDate last, bool preferred) :
- m_name(std::move(n)), m_premium(premium), m_lastSeen(std::move(last)),
- m_preferred(preferred)
+ServerInfo::ServerInfo(
+ QString name, bool premium, QDate last, int preferred,
+ int count, double speed) :
+ m_name(std::move(name)), m_premium(premium), m_lastSeen(std::move(last)),
+ m_preferred(preferred), m_downloadCount(count), m_downloadSpeed(speed)
{
}
@@ -26,7 +28,58 @@ const QDate& ServerInfo::lastSeen() const
return m_lastSeen;
}
-bool ServerInfo::isPreferred() const
+int ServerInfo::preferred() const
{
return m_preferred;
}
+
+int ServerInfo::downloadCount() const
+{
+ return m_downloadCount;
+}
+
+double ServerInfo::downloadSpeed() const
+{
+ return m_downloadSpeed;
+}
+
+void ServerInfo::setPreferred(int i)
+{
+ m_preferred = i;
+}
+
+
+void ServerList::add(ServerInfo s)
+{
+ m_servers.push_back(std::move(s));
+}
+
+ServerList::iterator ServerList::begin()
+{
+ return m_servers.begin();
+}
+
+ServerList::const_iterator ServerList::begin() const
+{
+ return m_servers.begin();
+}
+
+ServerList::iterator ServerList::end()
+{
+ return m_servers.end();
+}
+
+ServerList::const_iterator ServerList::end() const
+{
+ return m_servers.end();
+}
+
+std::size_t ServerList::size() const
+{
+ return m_servers.size();
+}
+
+bool ServerList::empty() const
+{
+ return m_servers.empty();
+}
diff --git a/src/serverinfo.h b/src/serverinfo.h
index 79b90e77..0a8a5028 100644
--- a/src/serverinfo.h
+++ b/src/serverinfo.h
@@ -9,20 +9,49 @@ class ServerInfo
{
public:
ServerInfo();
- ServerInfo(QString name, bool premium, QDate lastSeen, bool preferred);
+ ServerInfo(
+ QString name, bool premium, QDate lastSeen, int preferred,
+ int downloadCount, double downloadSpeed);
const QString& name() const;
bool isPremium() const;
const QDate& lastSeen() const;
- bool isPreferred() const;
+ int preferred() const;
+ int downloadCount() const;
+ double downloadSpeed() const;
+
+ void setPreferred(int i);
private:
QString m_name;
bool m_premium;
QDate m_lastSeen;
- bool m_preferred;
+ int m_preferred;
+ int m_downloadCount;
+ double m_downloadSpeed;
};
Q_DECLARE_METATYPE(ServerInfo)
+
+class ServerList
+{
+public:
+ using container = QList<ServerInfo>;
+ using iterator = container::iterator;
+ using const_iterator = container::const_iterator;
+
+ void add(ServerInfo s);
+
+ iterator begin();
+ const_iterator begin() const;
+ iterator end();
+ const_iterator end() const;
+ std::size_t size() const;
+ bool empty() const;
+
+private:
+ container m_servers;
+};
+
#endif // SERVERINFO_H
diff --git a/src/settings.cpp b/src/settings.cpp
index 9975642b..5ddffd8f 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -884,17 +884,42 @@ std::map<QString, int> Settings::getPreferredServers()
return result;
}
-void Settings::updateServers(const QList<ServerInfo> &servers)
+ServerList Settings::getServers() const
+{
+ ServerList list;
+
+ m_Settings.beginGroup("Servers");
+
+ for (const QString &serverKey : m_Settings.childKeys()) {
+ QVariantMap data = m_Settings.value(serverKey).toMap();
+
+ ServerInfo server(
+ serverKey,
+ data["premium"].toBool(),
+ data["lastSeen"].toDate(),
+ data["preferred"].toInt(),
+ data["downloadCount"].toInt(),
+ data["downloadSpeed"].toDouble());
+
+ list.add(std::move(server));
+ }
+
+ m_Settings.endGroup();
+
+ return list;
+}
+
+void Settings::updateServers(const ServerList& servers)
{
m_Settings.beginGroup("Servers");
QStringList oldServerKeys = m_Settings.childKeys();
- for (const ServerInfo &server : servers) {
+ for (const auto& server : servers) {
if (!oldServerKeys.contains(server.name())) {
// not yet known server
QVariantMap newVal;
newVal["premium"] = server.isPremium();
- newVal["preferred"] = server.isPreferred() ? 1 : 0;
+ newVal["preferred"] = server.preferred();
newVal["lastSeen"] = server.lastSeen();
newVal["downloadCount"] = 0;
newVal["downloadSpeed"] = 0.0;
@@ -902,12 +927,13 @@ void Settings::updateServers(const QList<ServerInfo> &servers)
m_Settings.setValue(server.name(), newVal);
} else {
QVariantMap data = m_Settings.value(server.name()).toMap();
- data["lastSeen"] = server.lastSeen();
data["premium"] = server.isPremium();
+ data["lastSeen"] = server.lastSeen();
+ data["preferred"] = server.preferred();
m_Settings.setValue(server.name(), data);
- }
}
+ }
// clean up unavailable servers
QDate now = QDate::currentDate();
diff --git a/src/settings.h b/src/settings.h
index 4662ed19..31dbf85c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -34,6 +34,7 @@ class QSplitter;
class PluginContainer;
class ServerInfo;
+class ServerList;
class Settings;
class ExpanderWidget;
@@ -493,11 +494,13 @@ public:
*/
std::map<QString, int> getPreferredServers();
+ ServerList getServers() const;
+
/**
* @brief updates the list of known servers
* @param list of servers from a recent query
*/
- void updateServers(const QList<ServerInfo> &servers);
+ void updateServers(const ServerList& servers);
/**
* @brief add a plugin that is to be blacklisted
diff --git a/src/settingsdialognexus.cpp b/src/settingsdialognexus.cpp
index 4d9a18a2..926ea9a6 100644
--- a/src/settingsdialognexus.cpp
+++ b/src/settingsdialognexus.cpp
@@ -2,9 +2,11 @@
#include "ui_settingsdialog.h"
#include "ui_nexusmanualkey.h"
#include "nexusinterface.h"
+#include "serverinfo.h"
+#include "log.h"
#include <utility.h>
-namespace shell = MOBase::shell;
+using namespace MOBase;
template <typename T>
class ServerItem : public QListWidgetItem {
@@ -78,30 +80,31 @@ NexusSettingsTab::NexusSettingsTab(Settings& s, SettingsDialog& d)
ui->hideAPICounterBox->setChecked(settings().hideAPICounter());
// display server preferences
- qsettings().beginGroup("Servers");
- for (const QString &key : qsettings().childKeys()) {
- QVariantMap val = qsettings().value(key).toMap();
- QString descriptor = key;
+ for (const auto& server : s.getServers()) {
+ QString descriptor = server.name();
+
if (!descriptor.compare("CDN", Qt::CaseInsensitive)) {
descriptor += QStringLiteral(" (automatic)");
}
- if (val.contains("downloadSpeed") && val.contains("downloadCount") && (val["downloadCount"].toInt() > 0)) {
- int bps = static_cast<int>(val["downloadSpeed"].toDouble() / val["downloadCount"].toInt());
+
+ if (server.downloadSpeed() > 0 && server.downloadCount() > 0) {
+ const int bps = static_cast<int>(server.downloadSpeed() / server.downloadCount());
descriptor += QString(" (%1 kbps)").arg(bps / 1024);
}
QListWidgetItem *newItem = new ServerItem<int>(descriptor, Qt::UserRole + 1);
- newItem->setData(Qt::UserRole, key);
- newItem->setData(Qt::UserRole + 1, val["preferred"].toInt());
- if (val["preferred"].toInt() > 0) {
+ newItem->setData(Qt::UserRole, server.name());
+ newItem->setData(Qt::UserRole + 1, server.preferred());
+
+ if (server.preferred() > 0) {
ui->preferredServersList->addItem(newItem);
} else {
ui->knownServersList->addItem(newItem);
}
+
ui->preferredServersList->sortItems(Qt::DescendingOrder);
}
- qsettings().endGroup();
QObject::connect(ui->nexusConnect, &QPushButton::clicked, [&]{ on_nexusConnect_clicked(); });
QObject::connect(ui->nexusManualKey, &QPushButton::clicked, [&]{ on_nexusManualKey_clicked(); });
@@ -119,22 +122,52 @@ void NexusSettingsTab::update()
settings().setEndorsementIntegration(ui->endorsementBox->isChecked());
settings().setHideAPICounter(ui->hideAPICounterBox->isChecked());
+ auto servers = settings().getServers();
+
// store server preference
- qsettings().beginGroup("Servers");
for (int i = 0; i < ui->knownServersList->count(); ++i) {
- QString key = ui->knownServersList->item(i)->data(Qt::UserRole).toString();
- QVariantMap val = qsettings().value(key).toMap();
- val["preferred"] = 0;
- qsettings().setValue(key, val);
+ const QString key = ui->knownServersList->item(i)->data(Qt::UserRole).toString();
+
+ bool found = false;
+
+ for (auto& server : servers) {
+ if (server.name() == key) {
+ server.setPreferred(0);
+ found = true;
+ break;
+ }
}
- int count = ui->preferredServersList->count();
+
+ if (!found) {
+ log::error("while setting preferred to 0, server '{}' not found", key);
+ }
+ }
+
+ const int count = ui->preferredServersList->count();
+
for (int i = 0; i < count; ++i) {
- QString key = ui->preferredServersList->item(i)->data(Qt::UserRole).toString();
- QVariantMap val = qsettings().value(key).toMap();
- val["preferred"] = count - i;
- qsettings().setValue(key, val);
+ const QString key = ui->preferredServersList->item(i)->data(Qt::UserRole).toString();
+ const int newPreferred = count - i;
+
+ bool found = false;
+
+ for (auto& server : servers) {
+
+ if (server.name() == key) {
+ server.setPreferred(newPreferred);
+ found = true;
+ break;
}
- qsettings().endGroup();
+ }
+
+ if (!found) {
+ log::error(
+ "while setting preference to {}, server '{}' not found",
+ newPreferred, key);
+ }
+ }
+
+ settings().updateServers(servers);
}
void NexusSettingsTab::on_nexusConnect_clicked()