Dependency Injection for SettingsCache

* Turn SettingsCache into a QSharedPointer.
* Implement interfaces for settings that need it

Took 2 hours 38 minutes
This commit is contained in:
Lukas Brübach 2025-11-06 18:47:12 +01:00
parent b773909dfd
commit 35d18b5fa9
127 changed files with 1012 additions and 803 deletions

View file

@ -1,9 +1,9 @@
#include "remote_client.h"
#include "../../../../cockatrice/src/main.h"
#include "../../interfaces/INetworkSettingsProvider.h"
#include "version_string.h"
#include <../../../../../cockatrice/src/client/settings/cache_settings.h>
#include <QCryptographicHash>
#include <QDebug>
#include <QHostAddress>
@ -26,14 +26,14 @@
static const unsigned int protocolVersion = 14;
RemoteClient::RemoteClient(QObject *parent)
: AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false),
usingWebSocket(false), messageLength(0), hashedPassword()
RemoteClient::RemoteClient(QObject *parent, QSharedPointer<INetworkSettingsProvider> _networkSettingsProvider)
: AbstractClient(parent), networkSettingsProvider(_networkSettingsProvider), timeRunning(0), lastDataReceived(0),
messageInProgress(false), handshakeStarted(false), usingWebSocket(false), messageLength(0), hashedPassword()
{
clearNewClientFeatures();
maxTimeout = SettingsCache::instance().getTimeOut();
int keepalive = SettingsCache::instance().getKeepAlive();
maxTimeout = networkSettingsProvider->getTimeOut();
int keepalive = networkSettingsProvider->getKeepAlive();
timer = new QTimer(this);
timer->setInterval(keepalive * 1000);
connect(timer, &QTimer::timeout, this, &RemoteClient::ping);
@ -308,8 +308,8 @@ void RemoteClient::loginResponse(const Response &response)
emit ignoreListReceived(ignoreList);
if (newMissingFeatureFound(possibleMissingFeatures) && resp.missing_features_size() > 0 &&
SettingsCache::instance().getNotifyAboutUpdates()) {
SettingsCache::instance().setKnownMissingFeatures(possibleMissingFeatures);
networkSettingsProvider->getNotifyAboutUpdates()) {
networkSettingsProvider->setKnownMissingFeatures(possibleMissingFeatures);
emit notifyUserAboutUpdate();
}
@ -586,7 +586,7 @@ void RemoteClient::disconnectFromServer()
QString RemoteClient::getSrvClientID(const QString &_hostname)
{
QString srvClientID = SettingsCache::instance().getClientID();
QString srvClientID = networkSettingsProvider->getClientID();
QHostInfo hostInfo = QHostInfo::fromName(_hostname);
if (!hostInfo.error()) {
QHostAddress hostAddress = hostInfo.addresses().first();
@ -606,7 +606,7 @@ bool RemoteClient::newMissingFeatureFound(const QString &_serversMissingFeatures
QStringList serversMissingFeaturesList = _serversMissingFeatures.split(",");
for (const QString &feature : serversMissingFeaturesList) {
if (!feature.isEmpty()) {
if (!SettingsCache::instance().getKnownMissingFeatures().contains(feature))
if (!networkSettingsProvider->getKnownMissingFeatures().contains(feature))
return true;
}
}
@ -616,14 +616,14 @@ bool RemoteClient::newMissingFeatureFound(const QString &_serversMissingFeatures
void RemoteClient::clearNewClientFeatures()
{
QString newKnownMissingFeatures;
QStringList existingKnownMissingFeatures = SettingsCache::instance().getKnownMissingFeatures().split(",");
QStringList existingKnownMissingFeatures = networkSettingsProvider->getKnownMissingFeatures().split(",");
for (const QString &existingKnownFeature : existingKnownMissingFeatures) {
if (!existingKnownFeature.isEmpty()) {
if (!clientFeatures.contains(existingKnownFeature))
newKnownMissingFeatures.append("," + existingKnownFeature);
}
}
SettingsCache::instance().setKnownMissingFeatures(newKnownMissingFeatures);
networkSettingsProvider->setKnownMissingFeatures(newKnownMissingFeatures);
}
void RemoteClient::requestForgotPasswordToServer(const QString &hostname, unsigned int port, const QString &_userName)

View file

@ -7,6 +7,7 @@
#ifndef REMOTECLIENT_H
#define REMOTECLIENT_H
#include "../../interfaces/INetworkSettingsProvider.h"
#include "../abstract/abstract_client.h"
#include <QLoggingCategory>
@ -97,6 +98,7 @@ private slots:
void submitForgotPasswordChallengeResponse(const Response &response);
private:
QSharedPointer<INetworkSettingsProvider> networkSettingsProvider;
int maxTimeout;
int timeRunning, lastDataReceived;
QByteArray inputBuffer;
@ -120,7 +122,8 @@ protected slots:
void sendCommandContainer(const CommandContainer &cont) override;
public:
explicit RemoteClient(QObject *parent = nullptr);
explicit RemoteClient(QObject *parent = nullptr,
QSharedPointer<INetworkSettingsProvider> networkSettingsProvider = nullptr);
~RemoteClient() override;
QString peerName() const
{

View file

@ -0,0 +1,20 @@
#ifndef COCKATRICE_INETWORKSETTINGSPROVIDER_H
#define COCKATRICE_INETWORKSETTINGSPROVIDER_H
#include <QString>
class INetworkSettingsProvider
{
public:
virtual ~INetworkSettingsProvider() = default;
virtual QString getClientID() = 0;
virtual int getTimeOut() const = 0;
virtual int getKeepAlive() const = 0;
virtual bool getNotifyAboutUpdates() const = 0;
virtual void setKnownMissingFeatures(const QString &_knownMissingFeatures) = 0;
virtual QString getKnownMissingFeatures() = 0;
};
#endif // COCKATRICE_INETWORKSETTINGSPROVIDER_H