Settings page was added

This commit is contained in:
2023-03-30 20:06:03 +02:00
parent 31cb989f67
commit 25e8a3ea79
16 changed files with 272 additions and 55 deletions

View File

@@ -7,6 +7,8 @@
#include <QFile>
#include <QDebug>
#include "settingsservice.h"
BeerService::BeerService()
: QObject{nullptr}
{
@@ -38,6 +40,13 @@ BeerService::BeerService()
sendCommand(m_commandStash.takeFirst().toMap());
}
});
connect(&m_socket, &QWebSocket::stateChanged, this, &BeerService::connectedChanged);
connect(settings(), &SettingsService::serverAddressChanged, this, &BeerService::reconnect);
connect(settings(), &SettingsService::selectedUserIdChanged, this, &BeerService::reconnect);
reconnect();
}
BeerService::~BeerService()
@@ -46,15 +55,9 @@ BeerService::~BeerService()
m_socket.close();
}
void BeerService::connectSrv(const QString &userId)
SettingsService *BeerService::settings() const
{
if (QAbstractSocket::ConnectedState == m_socket.state()) {
m_socket.close();
}
QNetworkRequest request(QUrl("ws://195.133.196.161:8000"));
request.setRawHeader("Authorization", "Basic " + QString("%1:pass").arg(userId).toLatin1().toBase64());
m_socket.open(request);
return SettingsService::instance();
}
void BeerService::sendCommand(const QString &entity, const QString &action, const QVariantMap &data)
@@ -104,12 +107,32 @@ void BeerService::restoreStash()
}
}
void BeerService::reconnect()
{
if (connected()) {
m_socket.close();
}
QString userId = settings()->selectedUserId();
QUrl serverUrl(QString("ws://%1").arg(settings()->serverAddress()));
QNetworkRequest request(serverUrl);
request.setRawHeader("Authorization", "Basic " + QString("%1:pass").arg(userId).toLatin1().toBase64());
m_socket.open(request);
}
void BeerService::sendCommand(const QVariantMap &command)
{
if (QAbstractSocket::ConnectedState == m_socket.state()) {
if (connected()) {
QJsonDocument doc = QJsonDocument::fromVariant(command);
m_socket.sendTextMessage(doc.toJson(QJsonDocument::Compact));
} else {
m_commandStash << command;
}
}
bool BeerService::connected() const
{
return QAbstractSocket::ConnectedState == m_socket.state();
}

View File

@@ -4,10 +4,13 @@
#include <QObject>
#include <QtWebSockets/QWebSocket>
class SettingsService;
class BeerService : public QObject
{
Q_OBJECT
Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
public:
static BeerService *instance()
{
@@ -15,19 +18,25 @@ public:
return &i;
}
Q_INVOKABLE void connectSrv(const QString &userId = QString());
void sendCommand(const QString &entity, const QString &action, const QVariantMap &data = QVariantMap());
void connectListener(QObject *listener);
signals:
void connectedChanged();
private:
BeerService();
~BeerService();
SettingsService *settings() const;
QString stashFileName() const;
void saveStash() const;
void restoreStash();
void reconnect();
void sendCommand(const QVariantMap &command);
bool connected() const;
QMultiMap<QString, QObject *> m_listeners;

View File

@@ -3,6 +3,14 @@
namespace Defaults {
constexpr auto GuestUserId = "2641ffe8cd4311eda27f0242ac120002";
constexpr auto ServerAddress = "195.133.196.161:8000";
}
namespace Keys {
constexpr auto ServerAddress = "server_address";
constexpr auto SelectedUser = "selected_user";
}
@@ -16,12 +24,24 @@ void SettingsService::setValue(const QString &key, const QVariant &value)
m_settings.setValue(key, value);
}
QString SettingsService::serverAddress() const
{
return m_settings.value(Keys::ServerAddress, Defaults::ServerAddress).toString();
}
void SettingsService::setServerAddress(const QString &address)
{
m_settings.setValue(Keys::ServerAddress, address);
emit serverAddressChanged();
}
QString SettingsService::selectedUserId() const
{
return m_settings.value("selected_user", Defaults::GuestUserId).toString();
return m_settings.value(Keys::SelectedUser, Defaults::GuestUserId).toString();
}
void SettingsService::setSelectedUserId(const QString &userId)
{
m_settings.setValue("selected_user", userId);
m_settings.setValue(Keys::SelectedUser, userId);
emit selectedUserIdChanged();
}

View File

@@ -1,18 +1,40 @@
#ifndef SETTINGSSERVICE_H
#define SETTINGSSERVICE_H
#include <QObject>
#include <QSettings>
class SettingsService
class SettingsService : public QObject
{
Q_OBJECT
Q_PROPERTY(QString serverAddress READ serverAddress WRITE setServerAddress NOTIFY serverAddressChanged)
Q_PROPERTY(QString selectedUserId READ selectedUserId WRITE setSelectedUserId NOTIFY selectedUserIdChanged)
public:
static SettingsService *instance()
{
static SettingsService i;
return &i;
}
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
void setValue(const QString &key, const QVariant &value);
QString serverAddress() const;
void setServerAddress(const QString &address);
QString selectedUserId() const;
void setSelectedUserId(const QString &userId);
signals:
void serverAddressChanged();
void selectedUserIdChanged();
private:
SettingsService() = default;
~SettingsService() = default;
QSettings m_settings = QSettings("DedSoft", "BeerLog");
};