Server List from JSON (#3165)

This commit is contained in:
Zach H 2018-04-09 22:38:21 -04:00 committed by GitHub
parent 0c10b66a2d
commit 61e509585f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 376 additions and 161 deletions

View file

@ -119,6 +119,7 @@ SET(cockatrice_SOURCES
src/releasechannel.cpp src/releasechannel.cpp
src/userconnection_information.cpp src/userconnection_information.cpp
src/spoilerbackgroundupdater.cpp src/spoilerbackgroundupdater.cpp
src/handle_public_servers.cpp
${VERSION_STRING_CPP} ${VERSION_STRING_CPP}
) )

View file

@ -3,6 +3,7 @@
#include "userconnection_information.h" #include "userconnection_information.h"
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QDebug>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QEvent> #include <QEvent>
#include <QGridLayout> #include <QGridLayout>
@ -21,7 +22,18 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
previousHosts = new QComboBox(this); previousHosts = new QComboBox(this);
previousHosts->installEventFilter(new DeleteHighlightedItemWhenShiftDelPressedEventFilter); previousHosts->installEventFilter(new DeleteHighlightedItemWhenShiftDelPressedEventFilter);
rebuildComboBoxList(); hps = new HandlePublicServers(this);
btnRefreshServers = new QPushButton(this);
btnRefreshServers->setIcon(QPixmap("theme:icons/update"));
btnRefreshServers->setToolTip(tr("Refresh the server list with known public servers"));
btnRefreshServers->setFixedWidth(50);
connect(hps, SIGNAL(sigPublicServersDownloadedSuccessfully()), this, SLOT(rebuildComboBoxList()));
connect(hps, SIGNAL(sigPublicServersDownloadedUnsuccessfully(int)), this, SLOT(rebuildComboBoxList(int)));
connect(btnRefreshServers, SIGNAL(released()), this, SLOT(downloadThePublicServers()));
connect(this, SIGNAL(sigPublicServersDownloaded()), this, SLOT(rebuildComboBoxList()));
preRebuildComboBoxList();
newHostButton = new QRadioButton(tr("New Host"), this); newHostButton = new QRadioButton(tr("New Host"), this);
@ -52,15 +64,6 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
autoConnectCheckBox = new QCheckBox(tr("A&uto connect")); autoConnectCheckBox = new QCheckBox(tr("A&uto connect"));
autoConnectCheckBox->setToolTip(tr("Automatically connect to the most recent login when Cockatrice opens")); autoConnectCheckBox->setToolTip(tr("Automatically connect to the most recent login when Cockatrice opens"));
publicServersLabel =
new QLabel(QString("(<a href=\"%1\">%2</a>)").arg(PUBLIC_SERVERS_URL).arg(tr("Public Servers")));
publicServersLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
publicServersLabel->setWordWrap(true);
publicServersLabel->setTextFormat(Qt::RichText);
publicServersLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
publicServersLabel->setOpenExternalLinks(true);
publicServersLabel->setAlignment(Qt::AlignCenter);
if (savePasswordCheckBox->isChecked()) { if (savePasswordCheckBox->isChecked()) {
autoConnectCheckBox->setChecked(static_cast<bool>(settingsCache->servers().getAutoConnect())); autoConnectCheckBox->setChecked(static_cast<bool>(settingsCache->servers().getAutoConnect()));
autoConnectCheckBox->setEnabled(true); autoConnectCheckBox->setEnabled(true);
@ -83,14 +86,14 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
btnCancel->setFixedWidth(100); btnCancel->setFixedWidth(100);
connect(btnCancel, SIGNAL(released()), this, SLOT(actCancel())); connect(btnCancel, SIGNAL(released()), this, SLOT(actCancel()));
auto *newHostLayout = new QGridLayout; newHolderLayout = new QHBoxLayout;
newHostLayout->addWidget(newHostButton, 0, 1); newHolderLayout->addWidget(previousHosts);
newHostLayout->addWidget(publicServersLabel, 0, 2); newHolderLayout->addWidget(btnRefreshServers);
auto *connectionLayout = new QGridLayout; connectionLayout = new QGridLayout;
connectionLayout->addWidget(previousHostButton, 0, 1); connectionLayout->addWidget(previousHostButton, 0, 1);
connectionLayout->addWidget(previousHosts, 1, 1); connectionLayout->addLayout(newHolderLayout, 1, 1, 1, 2);
connectionLayout->addLayout(newHostLayout, 2, 1, 1, 2); connectionLayout->addWidget(newHostButton, 2, 1);
connectionLayout->addWidget(saveLabel, 3, 0); connectionLayout->addWidget(saveLabel, 3, 0);
connectionLayout->addWidget(saveEdit, 3, 1); connectionLayout->addWidget(saveEdit, 3, 1);
connectionLayout->addWidget(hostLabel, 4, 0); connectionLayout->addWidget(hostLabel, 4, 0);
@ -99,33 +102,33 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
connectionLayout->addWidget(portEdit, 5, 1); connectionLayout->addWidget(portEdit, 5, 1);
connectionLayout->addWidget(autoConnectCheckBox, 6, 1); connectionLayout->addWidget(autoConnectCheckBox, 6, 1);
auto *buttons = new QGridLayout; buttons = new QGridLayout;
buttons->addWidget(btnOk, 0, 0); buttons->addWidget(btnOk, 0, 0);
buttons->addWidget(btnForgotPassword, 0, 1); buttons->addWidget(btnForgotPassword, 0, 1);
buttons->addWidget(btnCancel, 0, 2); buttons->addWidget(btnCancel, 0, 2);
QGroupBox *restrictionsGroupBox = new QGroupBox(tr("Server")); restrictionsGroupBox = new QGroupBox(tr("Server"));
restrictionsGroupBox->setLayout(connectionLayout); restrictionsGroupBox->setLayout(connectionLayout);
auto *loginLayout = new QGridLayout; loginLayout = new QGridLayout;
loginLayout->addWidget(playernameLabel, 0, 0); loginLayout->addWidget(playernameLabel, 0, 0);
loginLayout->addWidget(playernameEdit, 0, 1); loginLayout->addWidget(playernameEdit, 0, 1);
loginLayout->addWidget(passwordLabel, 1, 0); loginLayout->addWidget(passwordLabel, 1, 0);
loginLayout->addWidget(passwordEdit, 1, 1); loginLayout->addWidget(passwordEdit, 1, 1);
loginLayout->addWidget(savePasswordCheckBox, 2, 1); loginLayout->addWidget(savePasswordCheckBox, 2, 1);
QGroupBox *loginGroupBox = new QGroupBox(tr("Login")); loginGroupBox = new QGroupBox(tr("Login"));
loginGroupBox->setLayout(loginLayout); loginGroupBox->setLayout(loginLayout);
QGroupBox *btnGroupBox = new QGroupBox(tr("")); btnGroupBox = new QGroupBox(tr(""));
btnGroupBox->setLayout(buttons); btnGroupBox->setLayout(buttons);
auto *grid = new QGridLayout; grid = new QGridLayout;
grid->addWidget(restrictionsGroupBox, 0, 0); grid->addWidget(restrictionsGroupBox, 0, 0);
grid->addWidget(loginGroupBox, 1, 0); grid->addWidget(loginGroupBox, 1, 0);
grid->addWidget(btnGroupBox, 2, 0); grid->addWidget(btnGroupBox, 2, 0);
auto *mainLayout = new QVBoxLayout; mainLayout = new QVBoxLayout;
mainLayout->addLayout(grid); mainLayout->addLayout(grid);
setLayout(mainLayout); setLayout(mainLayout);
@ -144,6 +147,8 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
playernameEdit->setFocus(); playernameEdit->setFocus();
} }
DlgConnect::~DlgConnect() = default;
void DlgConnect::actSaveConfig() void DlgConnect::actSaveConfig()
{ {
bool updateSuccess = settingsCache->servers().updateExistingServer( bool updateSuccess = settingsCache->servers().updateExistingServer(
@ -156,30 +161,41 @@ void DlgConnect::actSaveConfig()
passwordEdit->text(), savePasswordCheckBox->isChecked()); passwordEdit->text(), savePasswordCheckBox->isChecked());
} }
rebuildComboBoxList(); preRebuildComboBoxList();
} }
void DlgConnect::rebuildComboBoxList() void DlgConnect::downloadThePublicServers()
{ {
btnRefreshServers->setDisabled(true);
previousHosts->clear();
previousHosts->addItem(placeHolderText);
hps->downloadPublicServers();
}
void DlgConnect::preRebuildComboBoxList()
{
UserConnection_Information uci;
savedHostList = uci.getServerInfo();
if (savedHostList.size() == 1) {
downloadThePublicServers();
} else {
rebuildComboBoxList();
}
}
void DlgConnect::rebuildComboBoxList(int failure)
{
Q_UNUSED(failure);
previousHosts->clear(); previousHosts->clear();
UserConnection_Information uci; UserConnection_Information uci;
savedHostList = uci.getServerInfo(); savedHostList = uci.getServerInfo();
if (savedHostList.size() == 1) {
settingsCache->servers().addNewServer("Rooster Ranges", "server.cockatrice.us", "4747", "", "", false);
settingsCache->servers().addNewServer("Chickatrice", "chickatrice.net", "4747", "", "", false);
settingsCache->servers().addNewServer("dr4ft", "cockatrice.dr4ft.com", "4747", "", "", false);
settingsCache->servers().addNewServer("Tetrarch", "mtg.tetrarch.co", "4747", "", "", false);
} else if (!savedHostList.contains("Rooster Ranges")) {
settingsCache->servers().addNewServer("Rooster Ranges", "server.cockatrice.us", "4747", "", "", false);
settingsCache->servers().removeServer("Woogerworks");
}
savedHostList = uci.getServerInfo();
int i = 0; int i = 0;
for (UserConnection_Information tmp : savedHostList) { for (auto pair : savedHostList) {
auto tmp = pair.second;
QString saveName = tmp.getSaveName(); QString saveName = tmp.getSaveName();
if (saveName.size()) { if (saveName.size()) {
previousHosts->addItem(saveName); previousHosts->addItem(saveName);
@ -191,6 +207,8 @@ void DlgConnect::rebuildComboBoxList()
i++; i++;
} }
} }
btnRefreshServers->setDisabled(false);
} }
void DlgConnect::previousHostSelected(bool state) void DlgConnect::previousHostSelected(bool state)
@ -198,12 +216,13 @@ void DlgConnect::previousHostSelected(bool state)
if (state) { if (state) {
saveEdit->setDisabled(true); saveEdit->setDisabled(true);
previousHosts->setDisabled(false); previousHosts->setDisabled(false);
btnRefreshServers->setDisabled(false);
} }
} }
void DlgConnect::updateDisplayInfo(const QString &saveName) void DlgConnect::updateDisplayInfo(const QString &saveName)
{ {
if (saveEdit == nullptr) { if (saveEdit == nullptr || saveName == placeHolderText) {
return; return;
} }
@ -227,6 +246,7 @@ void DlgConnect::newHostSelected(bool state)
{ {
if (state) { if (state) {
previousHosts->setDisabled(true); previousHosts->setDisabled(true);
btnRefreshServers->setDisabled(true);
hostEdit->clear(); hostEdit->clear();
portEdit->clear(); portEdit->clear();
playernameEdit->clear(); playernameEdit->clear();
@ -236,7 +256,7 @@ void DlgConnect::newHostSelected(bool state)
saveEdit->setPlaceholderText("New Menu Name"); saveEdit->setPlaceholderText("New Menu Name");
saveEdit->setDisabled(false); saveEdit->setDisabled(false);
} else { } else {
rebuildComboBoxList(); preRebuildComboBoxList();
} }
} }
@ -310,4 +330,4 @@ void DlgConnect::actForgotPassword()
{ {
emit sigStartForgotPasswordRequest(); emit sigStartForgotPasswordRequest();
reject(); reject();
} }

View file

@ -1,21 +1,26 @@
#ifndef DLG_CONNECT_H #ifndef DLG_CONNECT_H
#define DLG_CONNECT_H #define DLG_CONNECT_H
#include "handle_public_servers.h"
#include "userconnection_information.h" #include "userconnection_information.h"
#include <QDialog> #include <QDialog>
#include <QLineEdit> #include <QLineEdit>
class QLabel;
class QPushButton;
class QCheckBox; class QCheckBox;
class QComboBox; class QComboBox;
class QGridLayout;
class QGroupBox;
class QHBoxLayout;
class QLabel;
class QPushButton;
class QRadioButton; class QRadioButton;
class QVBoxLayout;
class DeleteHighlightedItemWhenShiftDelPressedEventFilter : public QObject class DeleteHighlightedItemWhenShiftDelPressedEventFilter : public QObject
{ {
Q_OBJECT Q_OBJECT
protected: protected:
bool eventFilter(QObject *obj, QEvent *event); bool eventFilter(QObject *obj, QEvent *event) override;
}; };
class DlgConnect : public QDialog class DlgConnect : public QDialog
@ -23,9 +28,11 @@ class DlgConnect : public QDialog
Q_OBJECT Q_OBJECT
signals: signals:
void sigStartForgotPasswordRequest(); void sigStartForgotPasswordRequest();
void sigPublicServersDownloaded();
public: public:
DlgConnect(QWidget *parent = 0); explicit DlgConnect(QWidget *parent = nullptr);
~DlgConnect() override;
QString getHost() const; QString getHost() const;
int getPort() const int getPort() const
{ {
@ -39,6 +46,7 @@ public:
{ {
return passwordEdit->text(); return passwordEdit->text();
} }
private slots: private slots:
void actOk(); void actOk();
void actCancel(); void actCancel();
@ -48,15 +56,23 @@ private slots:
void newHostSelected(bool state); void newHostSelected(bool state);
void actForgotPassword(); void actForgotPassword();
void updateDisplayInfo(const QString &saveName); void updateDisplayInfo(const QString &saveName);
void rebuildComboBoxList(); void preRebuildComboBoxList();
void rebuildComboBoxList(int failure = -1);
void downloadThePublicServers();
private: private:
QLabel *hostLabel, *portLabel, *playernameLabel, *passwordLabel, *saveLabel, *publicServersLabel; QGridLayout *newHostLayout, *connectionLayout, *buttons, *loginLayout, *grid;
QHBoxLayout *newHolderLayout;
QGroupBox *loginGroupBox, *btnGroupBox, *restrictionsGroupBox;
QVBoxLayout *mainLayout;
QLabel *hostLabel, *portLabel, *playernameLabel, *passwordLabel, *saveLabel;
QLineEdit *hostEdit, *portEdit, *playernameEdit, *passwordEdit, *saveEdit; QLineEdit *hostEdit, *portEdit, *playernameEdit, *passwordEdit, *saveEdit;
QCheckBox *savePasswordCheckBox, *autoConnectCheckBox; QCheckBox *savePasswordCheckBox, *autoConnectCheckBox;
QComboBox *previousHosts; QComboBox *previousHosts;
QRadioButton *newHostButton, *previousHostButton; QRadioButton *newHostButton, *previousHostButton;
QPushButton *btnOk, *btnCancel, *btnForgotPassword; QPushButton *btnOk, *btnCancel, *btnForgotPassword, *btnRefreshServers;
QMap<QString, UserConnection_Information> savedHostList; QMap<QString, std::pair<QString, UserConnection_Information>> savedHostList;
HandlePublicServers *hps;
const QString placeHolderText = tr("Downloading...");
}; };
#endif #endif

View file

@ -0,0 +1,104 @@
#include "handle_public_servers.h"
#include "qt-json/json.h"
#include "settingscache.h"
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#define PUBLIC_SERVERS_JSON "https://cockatrice.github.io/public-servers.json"
HandlePublicServers::HandlePublicServers(QObject *parent)
: QObject(parent), nam(new QNetworkAccessManager(this)), reply(nullptr)
{
}
void HandlePublicServers::downloadPublicServers()
{
QUrl url(QString(PUBLIC_SERVERS_JSON));
reply = nam->get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()), this, SLOT(actFinishParsingDownloadedData()));
}
void HandlePublicServers::actFinishParsingDownloadedData()
{
reply = dynamic_cast<QNetworkReply *>(sender());
QNetworkReply::NetworkError errorCode = reply->error();
if (errorCode == QNetworkReply::NoError) {
// Get current saved hosts
UserConnection_Information uci;
savedHostList = uci.getServerInfo();
// Downloaded data from GitHub
bool jsonSuccessful;
QString jsonData = QString(reply->readAll());
auto jsonMap = QtJson::Json::parse(jsonData, jsonSuccessful).toMap();
if (jsonSuccessful) {
updateServerINISettings(jsonMap);
} else {
qDebug() << "[PUBLIC SERVER HANDLER]"
<< "JSON Parsing Error";
emit sigPublicServersDownloadedUnsuccessfully(errorCode);
}
} else {
qDebug() << "[PUBLIC SERVER HANDLER]"
<< "Error Downloading Public Servers" << errorCode;
emit sigPublicServersDownloadedUnsuccessfully(errorCode);
}
reply->deleteLater(); // After an emit() occurs, this object will be deleted
}
void HandlePublicServers::updateServerINISettings(QMap<QString, QVariant> jsonMap)
{
// Servers available
auto publicServersJSONList = jsonMap["servers"].toList();
for (const auto &server : publicServersJSONList) {
// Data inside one server at a time
// server: [{ ... }, ..., { ... }]
const auto serverMap = server.toMap();
QString serverAddress = serverMap["host"].toString();
if (serverMap["isInactive"].toBool()) {
publicServersToRemove.append(serverAddress);
continue;
}
QString serverName = serverMap["name"].toString();
QString serverPort = serverMap["port"].toString();
bool serverFound = false;
for (const auto &iter : savedHostList) {
// If the URL/IP matches
if (iter.second.getServer() == serverAddress) {
serverFound = true;
break;
}
}
if (serverFound) {
settingsCache->servers().updateExistingServerWithoutLoss(serverName, serverAddress, serverPort);
} else {
settingsCache->servers().addNewServer(serverName, serverAddress, serverPort, "", "", false);
}
}
// If a server was removed from the public list,
// we will delete it from the local system.
// Will not delete "unofficial" servers
for (const auto &pair : savedHostList) {
QString serverAddr = pair.first;
if (publicServersToRemove.indexOf(serverAddr) != -1) {
settingsCache->servers().removeServer(serverAddr);
}
}
emit sigPublicServersDownloadedSuccessfully();
}

View file

@ -0,0 +1,40 @@
#ifndef COCKATRICE_HANDLE_PUBLIC_SERVERS_H
#define COCKATRICE_HANDLE_PUBLIC_SERVERS_H
#include "userconnection_information.h"
class QNetworkReply;
class QNetworkAccessManager;
/**
* This class is used to update the servers.ini file and ensure
* the list of public servers has up-to-date information.
* Servers that are added manually by users are not modified.
*/
class HandlePublicServers : public QObject
{
Q_OBJECT
signals:
void sigPublicServersDownloadedSuccessfully();
void sigPublicServersDownloadedUnsuccessfully(int);
public:
explicit HandlePublicServers(QObject *parent = nullptr);
~HandlePublicServers() override = default;
public slots:
void downloadPublicServers();
private slots:
void actFinishParsingDownloadedData();
private:
void updateServerINISettings(QMap<QString, QVariant>);
QStringList publicServersToRemove;
QMap<QString, std::pair<QString, UserConnection_Information>> savedHostList;
QNetworkAccessManager *nam;
QNetworkReply *reply;
};
#endif // COCKATRICE_HANDLE_PUBLIC_SERVERS_H

View file

@ -1,5 +1,6 @@
#include "serverssettings.h" #include "serverssettings.h"
#include <QDebug> #include <QDebug>
#include <utility>
ServersSettings::ServersSettings(QString settingPath, QObject *parent) ServersSettings::ServersSettings(QString settingPath, QObject *parent)
: SettingsManager(settingPath + "servers.ini", parent) : SettingsManager(settingPath + "servers.ini", parent)
@ -36,7 +37,7 @@ QString ServersSettings::getSaveName(QString defaultname)
{ {
int index = getPrevioushostindex(getPrevioushostName()); int index = getPrevioushostindex(getPrevioushostName());
QVariant saveName = getValue(QString("saveName%1").arg(index), "server", "server_details"); QVariant saveName = getValue(QString("saveName%1").arg(index), "server", "server_details");
return saveName == QVariant() ? defaultname : saveName.toString(); return saveName == QVariant() ? std::move(defaultname) : saveName.toString();
} }
QString ServersSettings::getPrevioushostName() QString ServersSettings::getPrevioushostName()
@ -64,7 +65,7 @@ QString ServersSettings::getHostname(QString defaultHost)
{ {
int index = getPrevioushostindex(getPrevioushostName()); int index = getPrevioushostindex(getPrevioushostName());
QVariant hostname = getValue(QString("server%1").arg(index), "server", "server_details"); QVariant hostname = getValue(QString("server%1").arg(index), "server", "server_details");
return hostname == QVariant() ? defaultHost : hostname.toString(); return hostname == QVariant() ? std::move(defaultHost) : hostname.toString();
} }
void ServersSettings::setPort(QString port) void ServersSettings::setPort(QString port)
@ -77,7 +78,7 @@ QString ServersSettings::getPort(QString defaultPort)
int index = getPrevioushostindex(getPrevioushostName()); int index = getPrevioushostindex(getPrevioushostName());
QVariant port = getValue(QString("port%1").arg(index), "server", "server_details"); QVariant port = getValue(QString("port%1").arg(index), "server", "server_details");
qDebug() << "getPort() index = " << index << " port.val = " << port.toString(); qDebug() << "getPort() index = " << index << " port.val = " << port.toString();
return port == QVariant() ? defaultPort : port.toString(); return port == QVariant() ? std::move(defaultPort) : port.toString();
} }
void ServersSettings::setPlayerName(QString playerName) void ServersSettings::setPlayerName(QString playerName)
@ -90,7 +91,7 @@ QString ServersSettings::getPlayerName(QString defaultName)
int index = getPrevioushostindex(getPrevioushostName()); int index = getPrevioushostindex(getPrevioushostName());
QVariant name = getValue(QString("username%1").arg(index), "server", "server_details"); QVariant name = getValue(QString("username%1").arg(index), "server", "server_details");
qDebug() << "getPlayerName() index = " << index << " name.val = " << name.toString(); qDebug() << "getPlayerName() index = " << index << " name.val = " << name.toString();
return name == QVariant() ? defaultName : name.toString(); return name == QVariant() ? std::move(defaultName) : name.toString();
} }
QString ServersSettings::getPassword() QString ServersSettings::getPassword()
@ -139,7 +140,7 @@ void ServersSettings::setFPHostName(QString hostname)
QString ServersSettings::getFPHostname(QString defaultHost) QString ServersSettings::getFPHostname(QString defaultHost)
{ {
QVariant hostname = getValue("fphostname", "server"); QVariant hostname = getValue("fphostname", "server");
return hostname == QVariant() ? defaultHost : hostname.toString(); return hostname == QVariant() ? std::move(defaultHost) : hostname.toString();
} }
void ServersSettings::setFPPort(QString port) void ServersSettings::setFPPort(QString port)
@ -150,7 +151,7 @@ void ServersSettings::setFPPort(QString port)
QString ServersSettings::getFPPort(QString defaultPort) QString ServersSettings::getFPPort(QString defaultPort)
{ {
QVariant port = getValue("fpport", "server"); QVariant port = getValue("fpport", "server");
return port == QVariant() ? defaultPort : port.toString(); return port == QVariant() ? std::move(defaultPort) : port.toString();
} }
void ServersSettings::setFPPlayerName(QString playerName) void ServersSettings::setFPPlayerName(QString playerName)
@ -161,7 +162,7 @@ void ServersSettings::setFPPlayerName(QString playerName)
QString ServersSettings::getFPPlayerName(QString defaultName) QString ServersSettings::getFPPlayerName(QString defaultName)
{ {
QVariant name = getValue("fpplayername", "server"); QVariant name = getValue("fpplayername", "server");
return name == QVariant() ? defaultName : name.toString(); return name == QVariant() ? std::move(defaultName) : name.toString();
} }
void ServersSettings::setClearDebugLogStatus(bool abIsChecked) void ServersSettings::setClearDebugLogStatus(bool abIsChecked)
@ -175,11 +176,11 @@ bool ServersSettings::getClearDebugLogStatus(bool abDefaultValue)
return cbFlushLog == QVariant() ? abDefaultValue : cbFlushLog.toBool(); return cbFlushLog == QVariant() ? abDefaultValue : cbFlushLog.toBool();
} }
void ServersSettings::addNewServer(QString saveName, void ServersSettings::addNewServer(const QString &saveName,
QString serv, const QString &serv,
QString port, const QString &port,
QString username, const QString &username,
QString password, const QString &password,
bool savePassword) bool savePassword)
{ {
if (updateExistingServer(saveName, serv, port, username, password, savePassword)) if (updateExistingServer(saveName, serv, port, username, password, savePassword))
@ -196,12 +197,12 @@ void ServersSettings::addNewServer(QString saveName,
setValue(password, QString("password%1").arg(index), "server", "server_details"); setValue(password, QString("password%1").arg(index), "server", "server_details");
} }
void ServersSettings::removeServer(QString saveName) void ServersSettings::removeServer(QString servAddr)
{ {
int size = getValue("totalServers", "server", "server_details").toInt() + 1; int size = getValue("totalServers", "server", "server_details").toInt() + 1;
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
if (saveName == getValue(QString("saveName%1").arg(i), "server", "server_details").toString()) { if (servAddr == getValue(QString("server%1").arg(i), "server", "server_details").toString()) {
deleteValue(QString("server%1").arg(i), "server", "server_details"); deleteValue(QString("server%1").arg(i), "server", "server_details");
deleteValue(QString("port%1").arg(i), "server", "server_details"); deleteValue(QString("port%1").arg(i), "server", "server_details");
deleteValue(QString("username%1").arg(i), "server", "server_details"); deleteValue(QString("username%1").arg(i), "server", "server_details");
@ -213,6 +214,44 @@ void ServersSettings::removeServer(QString saveName)
} }
} }
/**
* Will only update fields with new values, ignores empty values
*/
bool ServersSettings::updateExistingServerWithoutLoss(QString saveName,
QString serv,
QString port,
QString username,
QString password,
bool savePassword)
{
int size = getValue("totalServers", "server", "server_details").toInt() + 1;
for (int i = 0; i < size; i++) {
if (serv == getValue(QString("server%1").arg(i), "server", "server_details").toString()) {
if (!port.isEmpty()) {
setValue(port, QString("port%1").arg(i), "server", "server_details");
}
if (!username.isEmpty()) {
setValue(username, QString("username%1").arg(i), "server", "server_details");
}
if (savePassword && !password.isEmpty()) {
setValue(password, QString("password%1").arg(i), "server", "server_details");
} else {
setValue(QString(), QString("password%1").arg(i), "server", "server_details");
}
setValue(savePassword, QString("savePassword%1").arg(i), "server", "server_details");
setValue(saveName, QString("saveName%1").arg(i), "server", "server_details");
return true;
}
}
return false;
}
bool ServersSettings::updateExistingServer(QString saveName, bool ServersSettings::updateExistingServer(QString saveName,
QString serv, QString serv,
QString port, QString port,
@ -220,17 +259,6 @@ bool ServersSettings::updateExistingServer(QString saveName,
QString password, QString password,
bool savePassword) bool savePassword)
{ {
int size = getValue("totalServers", "server", "server_details").toInt() + 1; return updateExistingServerWithoutLoss(std::move(saveName), std::move(serv), std::move(port), std::move(username),
std::move(password), savePassword);
for (int i = 0; i < size; i++) {
if (saveName == getValue(QString("saveName%1").arg(i), "server", "server_details").toString()) {
setValue(serv, QString("server%1").arg(i), "server", "server_details");
setValue(port, QString("port%1").arg(i), "server", "server_details");
setValue(username, QString("username%1").arg(i), "server", "server_details");
setValue(savePassword, QString("savePassword%1").arg(i), "server", "server_details");
setValue(password, QString("password%1").arg(i), "server", "server_details");
return true;
}
}
return false;
} }

View file

@ -37,22 +37,29 @@ public:
void setFPPort(QString port); void setFPPort(QString port);
void setSavePassword(int save); void setSavePassword(int save);
void setFPPlayerName(QString playerName); void setFPPlayerName(QString playerName);
void void addNewServer(const QString &saveName,
addNewServer(QString saveName, QString serv, QString port, QString username, QString password, bool savePassword); const QString &serv,
void removeServer(QString saveName); const QString &port,
const QString &username,
const QString &password,
bool savePassword);
void removeServer(QString servAddr);
bool updateExistingServer(QString saveName, bool updateExistingServer(QString saveName,
QString serv, QString serv,
QString port, QString port,
QString username, QString username,
QString password, QString password,
bool savePassword); bool savePassword);
bool updateExistingServerWithoutLoss(QString saveName,
QString serv = QString(),
QString port = QString(),
QString username = QString(),
QString password = QString(),
bool savePassword = true);
void setClearDebugLogStatus(bool abIsChecked); void setClearDebugLogStatus(bool abIsChecked);
bool getClearDebugLogStatus(bool abDefaultValue); bool getClearDebugLogStatus(bool abDefaultValue);
signals:
public slots:
private: private:
explicit ServersSettings(QString settingPath, QObject *parent = nullptr); explicit ServersSettings(QString settingPath, QObject *parent = nullptr);
ServersSettings(const ServersSettings & /*other*/); ServersSettings(const ServersSettings & /*other*/);

View file

@ -7,6 +7,7 @@
#include <QFile> #include <QFile>
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
#include <utility>
QString SettingsCache::getDataPath() QString SettingsCache::getDataPath()
{ {
@ -140,7 +141,7 @@ QString SettingsCache::getSafeConfigFilePath(QString configEntry, QString defaul
// if the config settings is empty or refers to a not-existing file, // if the config settings is empty or refers to a not-existing file,
// return the default Path // return the default Path
if (!QFile::exists(tmp) || tmp.isEmpty()) if (!QFile::exists(tmp) || tmp.isEmpty())
tmp = defaultPath; tmp = std::move(defaultPath);
return tmp; return tmp;
} }
@ -182,7 +183,7 @@ SettingsCache::SettingsCache()
// tip of the day settings // tip of the day settings
showTipsOnStartup = settings->value("tipOfDay/showTips", true).toBool(); showTipsOnStartup = settings->value("tipOfDay/showTips", true).toBool();
for (auto tipNumber : settings->value("tipOfDay/seenTips").toList()) { for (const auto &tipNumber : settings->value("tipOfDay/seenTips").toList()) {
seenTips.append(tipNumber.toInt()); seenTips.append(tipNumber.toInt());
} }
@ -281,7 +282,7 @@ SettingsCache::SettingsCache()
void SettingsCache::setKnownMissingFeatures(QString _knownMissingFeatures) void SettingsCache::setKnownMissingFeatures(QString _knownMissingFeatures)
{ {
knownMissingFeatures = _knownMissingFeatures; knownMissingFeatures = std::move(_knownMissingFeatures);
settings->setValue("interface/knownmissingfeatures", knownMissingFeatures); settings->setValue("interface/knownmissingfeatures", knownMissingFeatures);
} }
@ -306,32 +307,32 @@ void SettingsCache::setMasterVolume(int _masterVolume)
void SettingsCache::setLeftJustified(const int _leftJustified) void SettingsCache::setLeftJustified(const int _leftJustified)
{ {
leftJustified = _leftJustified; leftJustified = (bool)_leftJustified;
settings->setValue("interface/leftjustified", leftJustified); settings->setValue("interface/leftjustified", leftJustified);
emit handJustificationChanged(); emit handJustificationChanged();
} }
void SettingsCache::setCardScaling(const int _scaleCards) void SettingsCache::setCardScaling(const int _scaleCards)
{ {
scaleCards = _scaleCards; scaleCards = (bool)_scaleCards;
settings->setValue("cards/scaleCards", scaleCards); settings->setValue("cards/scaleCards", scaleCards);
} }
void SettingsCache::setShowMessagePopups(const int _showMessagePopups) void SettingsCache::setShowMessagePopups(const int _showMessagePopups)
{ {
showMessagePopups = _showMessagePopups; showMessagePopups = (bool)_showMessagePopups;
settings->setValue("chat/showmessagepopups", showMessagePopups); settings->setValue("chat/showmessagepopups", showMessagePopups);
} }
void SettingsCache::setShowMentionPopups(const int _showMentionPopus) void SettingsCache::setShowMentionPopups(const int _showMentionPopus)
{ {
showMentionPopups = _showMentionPopus; showMentionPopups = (bool)_showMentionPopus;
settings->setValue("chat/showmentionpopups", showMentionPopups); settings->setValue("chat/showmentionpopups", showMentionPopups);
} }
void SettingsCache::setRoomHistory(const int _roomHistory) void SettingsCache::setRoomHistory(const int _roomHistory)
{ {
roomHistory = _roomHistory; roomHistory = (bool)_roomHistory;
settings->setValue("chat/roomhistory", roomHistory); settings->setValue("chat/roomhistory", roomHistory);
} }
@ -409,7 +410,7 @@ void SettingsCache::setThemeName(const QString &_themeName)
void SettingsCache::setPicDownload(int _picDownload) void SettingsCache::setPicDownload(int _picDownload)
{ {
picDownload = _picDownload; picDownload = static_cast<bool>(_picDownload);
settings->setValue("personal/picturedownload", picDownload); settings->setValue("personal/picturedownload", picDownload);
emit picDownloadChanged(); emit picDownloadChanged();
} }
@ -428,31 +429,31 @@ void SettingsCache::setPicUrlFallback(const QString &_picUrlFallback)
void SettingsCache::setNotificationsEnabled(int _notificationsEnabled) void SettingsCache::setNotificationsEnabled(int _notificationsEnabled)
{ {
notificationsEnabled = _notificationsEnabled; notificationsEnabled = static_cast<bool>(_notificationsEnabled);
settings->setValue("interface/notificationsenabled", notificationsEnabled); settings->setValue("interface/notificationsenabled", notificationsEnabled);
} }
void SettingsCache::setSpectatorNotificationsEnabled(int _spectatorNotificationsEnabled) void SettingsCache::setSpectatorNotificationsEnabled(int _spectatorNotificationsEnabled)
{ {
spectatorNotificationsEnabled = _spectatorNotificationsEnabled; spectatorNotificationsEnabled = static_cast<bool>(_spectatorNotificationsEnabled);
settings->setValue("interface/specnotificationsenabled", spectatorNotificationsEnabled); settings->setValue("interface/specnotificationsenabled", spectatorNotificationsEnabled);
} }
void SettingsCache::setDoubleClickToPlay(int _doubleClickToPlay) void SettingsCache::setDoubleClickToPlay(int _doubleClickToPlay)
{ {
doubleClickToPlay = _doubleClickToPlay; doubleClickToPlay = static_cast<bool>(_doubleClickToPlay);
settings->setValue("interface/doubleclicktoplay", doubleClickToPlay); settings->setValue("interface/doubleclicktoplay", doubleClickToPlay);
} }
void SettingsCache::setPlayToStack(int _playToStack) void SettingsCache::setPlayToStack(int _playToStack)
{ {
playToStack = _playToStack; playToStack = static_cast<bool>(_playToStack);
settings->setValue("interface/playtostack", playToStack); settings->setValue("interface/playtostack", playToStack);
} }
void SettingsCache::setAnnotateTokens(int _annotateTokens) void SettingsCache::setAnnotateTokens(int _annotateTokens)
{ {
annotateTokens = _annotateTokens; annotateTokens = static_cast<bool>(_annotateTokens);
settings->setValue("interface/annotatetokens", annotateTokens); settings->setValue("interface/annotatetokens", annotateTokens);
} }
@ -464,21 +465,21 @@ void SettingsCache::setTabGameSplitterSizes(const QByteArray &_tabGameSplitterSi
void SettingsCache::setDisplayCardNames(int _displayCardNames) void SettingsCache::setDisplayCardNames(int _displayCardNames)
{ {
displayCardNames = _displayCardNames; displayCardNames = static_cast<bool>(_displayCardNames);
settings->setValue("cards/displaycardnames", displayCardNames); settings->setValue("cards/displaycardnames", displayCardNames);
emit displayCardNamesChanged(); emit displayCardNamesChanged();
} }
void SettingsCache::setHorizontalHand(int _horizontalHand) void SettingsCache::setHorizontalHand(int _horizontalHand)
{ {
horizontalHand = _horizontalHand; horizontalHand = static_cast<bool>(_horizontalHand);
settings->setValue("hand/horizontal", horizontalHand); settings->setValue("hand/horizontal", horizontalHand);
emit horizontalHandChanged(); emit horizontalHandChanged();
} }
void SettingsCache::setInvertVerticalCoordinate(int _invertVerticalCoordinate) void SettingsCache::setInvertVerticalCoordinate(int _invertVerticalCoordinate)
{ {
invertVerticalCoordinate = _invertVerticalCoordinate; invertVerticalCoordinate = static_cast<bool>(_invertVerticalCoordinate);
settings->setValue("table/invert_vertical", invertVerticalCoordinate); settings->setValue("table/invert_vertical", invertVerticalCoordinate);
emit invertVerticalCoordinateChanged(); emit invertVerticalCoordinateChanged();
} }
@ -492,32 +493,32 @@ void SettingsCache::setMinPlayersForMultiColumnLayout(int _minPlayersForMultiCol
void SettingsCache::setTapAnimation(int _tapAnimation) void SettingsCache::setTapAnimation(int _tapAnimation)
{ {
tapAnimation = _tapAnimation; tapAnimation = static_cast<bool>(_tapAnimation);
settings->setValue("cards/tapanimation", tapAnimation); settings->setValue("cards/tapanimation", tapAnimation);
} }
void SettingsCache::setChatMention(int _chatMention) void SettingsCache::setChatMention(int _chatMention)
{ {
chatMention = _chatMention; chatMention = static_cast<bool>(_chatMention);
settings->setValue("chat/mention", chatMention); settings->setValue("chat/mention", chatMention);
} }
void SettingsCache::setChatMentionCompleter(const int _enableMentionCompleter) void SettingsCache::setChatMentionCompleter(const int _enableMentionCompleter)
{ {
chatMentionCompleter = _enableMentionCompleter; chatMentionCompleter = (bool)_enableMentionCompleter;
settings->setValue("chat/mentioncompleter", chatMentionCompleter); settings->setValue("chat/mentioncompleter", chatMentionCompleter);
emit chatMentionCompleterChanged(); emit chatMentionCompleterChanged();
} }
void SettingsCache::setChatMentionForeground(int _chatMentionForeground) void SettingsCache::setChatMentionForeground(int _chatMentionForeground)
{ {
chatMentionForeground = _chatMentionForeground; chatMentionForeground = static_cast<bool>(_chatMentionForeground);
settings->setValue("chat/mentionforeground", chatMentionForeground); settings->setValue("chat/mentionforeground", chatMentionForeground);
} }
void SettingsCache::setChatHighlightForeground(int _chatHighlightForeground) void SettingsCache::setChatHighlightForeground(int _chatHighlightForeground)
{ {
chatHighlightForeground = _chatHighlightForeground; chatHighlightForeground = static_cast<bool>(_chatHighlightForeground);
settings->setValue("chat/highlightforeground", chatHighlightForeground); settings->setValue("chat/highlightforeground", chatHighlightForeground);
} }
@ -535,25 +536,25 @@ void SettingsCache::setChatHighlightColor(const QString &_chatHighlightColor)
void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName) void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName)
{ {
zoneViewSortByName = _zoneViewSortByName; zoneViewSortByName = static_cast<bool>(_zoneViewSortByName);
settings->setValue("zoneview/sortbyname", zoneViewSortByName); settings->setValue("zoneview/sortbyname", zoneViewSortByName);
} }
void SettingsCache::setZoneViewSortByType(int _zoneViewSortByType) void SettingsCache::setZoneViewSortByType(int _zoneViewSortByType)
{ {
zoneViewSortByType = _zoneViewSortByType; zoneViewSortByType = static_cast<bool>(_zoneViewSortByType);
settings->setValue("zoneview/sortbytype", zoneViewSortByType); settings->setValue("zoneview/sortbytype", zoneViewSortByType);
} }
void SettingsCache::setZoneViewPileView(int _zoneViewPileView) void SettingsCache::setZoneViewPileView(int _zoneViewPileView)
{ {
zoneViewPileView = _zoneViewPileView; zoneViewPileView = static_cast<bool>(_zoneViewPileView);
settings->setValue("zoneview/pileview", zoneViewPileView); settings->setValue("zoneview/pileview", zoneViewPileView);
} }
void SettingsCache::setSoundEnabled(int _soundEnabled) void SettingsCache::setSoundEnabled(int _soundEnabled)
{ {
soundEnabled = _soundEnabled; soundEnabled = static_cast<bool>(_soundEnabled);
settings->setValue("sound/enabled", soundEnabled); settings->setValue("sound/enabled", soundEnabled);
emit soundEnabledChanged(); emit soundEnabledChanged();
} }
@ -567,13 +568,13 @@ void SettingsCache::setSoundThemeName(const QString &_soundThemeName)
void SettingsCache::setIgnoreUnregisteredUsers(int _ignoreUnregisteredUsers) void SettingsCache::setIgnoreUnregisteredUsers(int _ignoreUnregisteredUsers)
{ {
ignoreUnregisteredUsers = _ignoreUnregisteredUsers; ignoreUnregisteredUsers = static_cast<bool>(_ignoreUnregisteredUsers);
settings->setValue("chat/ignore_unregistered", ignoreUnregisteredUsers); settings->setValue("chat/ignore_unregistered", ignoreUnregisteredUsers);
} }
void SettingsCache::setIgnoreUnregisteredUserMessages(int _ignoreUnregisteredUserMessages) void SettingsCache::setIgnoreUnregisteredUserMessages(int _ignoreUnregisteredUserMessages)
{ {
ignoreUnregisteredUserMessages = _ignoreUnregisteredUserMessages; ignoreUnregisteredUserMessages = static_cast<bool>(_ignoreUnregisteredUserMessages);
settings->setValue("chat/ignore_unregistered_messages", ignoreUnregisteredUserMessages); settings->setValue("chat/ignore_unregistered_messages", ignoreUnregisteredUserMessages);
} }
@ -598,7 +599,7 @@ void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize)
void SettingsCache::setClientID(QString _clientID) void SettingsCache::setClientID(QString _clientID)
{ {
clientID = _clientID; clientID = std::move(_clientID);
settings->setValue("personal/clientid", clientID); settings->setValue("personal/clientid", clientID);
} }

View file

@ -150,10 +150,7 @@ bool ShortcutsSettings::isKeyAllowed(QString name, QString Sequences)
<< "Shift+S" << "Shift+S"
<< "Shift+Left" << "Shift+Left"
<< "Shift+Right"); << "Shift+Right");
if (forbiddenKeys.contains(checkSequence)) { return !forbiddenKeys.contains(checkSequence);
return false;
}
return true;
} }
bool ShortcutsSettings::isValid(QString name, QString Sequences) bool ShortcutsSettings::isValid(QString name, QString Sequences)

View file

@ -1,10 +1,9 @@
#include "userconnection_information.h" #include "userconnection_information.h"
#include "settingscache.h" #include "settingscache.h"
#include <QDebug> #include <QDebug>
#include <utility>
UserConnection_Information::UserConnection_Information() UserConnection_Information::UserConnection_Information() = default;
{
}
UserConnection_Information::UserConnection_Information(QString _saveName, UserConnection_Information::UserConnection_Information(QString _saveName,
QString _serverName, QString _serverName,
@ -12,14 +11,14 @@ UserConnection_Information::UserConnection_Information(QString _saveName,
QString _userName, QString _userName,
QString _pass, QString _pass,
bool _savePass) bool _savePass)
: saveName(_saveName), server(_serverName), port(_portNum), username(_userName), password(_pass), : saveName(std::move(_saveName)), server(std::move(_serverName)), port(std::move(_portNum)),
savePassword(_savePass) username(std::move(_userName)), password(std::move(_pass)), savePassword(_savePass)
{ {
} }
QMap<QString, UserConnection_Information> UserConnection_Information::getServerInfo() QMap<QString, std::pair<QString, UserConnection_Information>> UserConnection_Information::getServerInfo()
{ {
QMap<QString, UserConnection_Information> serverList; QMap<QString, std::pair<QString, UserConnection_Information>> serverList;
int size = settingsCache->servers().getValue("totalServers", "server", "server_details").toInt() + 1; int size = settingsCache->servers().getValue("totalServers", "server", "server_details").toInt() + 1;
@ -38,7 +37,7 @@ QMap<QString, UserConnection_Information> UserConnection_Information::getServerI
settingsCache->servers().getValue(QString("savePassword%1").arg(i), "server", "server_details").toBool(); settingsCache->servers().getValue(QString("savePassword%1").arg(i), "server", "server_details").toBool();
UserConnection_Information userInfo(saveName, serverName, portNum, userName, pass, savePass); UserConnection_Information userInfo(saveName, serverName, portNum, userName, pass, savePass);
serverList.insert(saveName, userInfo); serverList.insert(saveName, std::make_pair(serverName, userInfo));
} }
return serverList; return serverList;
@ -76,7 +75,7 @@ QStringList UserConnection_Information::getServerInfo(const QString &find)
break; break;
} }
if (!server.size()) if (server.empty())
qDebug() << "There was a problem!"; qDebug() << "There was a problem!";
return server; return server;

View file

@ -16,35 +16,36 @@ private:
QString username; QString username;
QString password; QString password;
bool savePassword; bool savePassword;
bool isCustom;
public: public:
UserConnection_Information(); UserConnection_Information();
UserConnection_Information(QString, QString, QString, QString, QString, bool); UserConnection_Information(QString, QString, QString, QString, QString, bool);
QString getSaveName() QString getSaveName() const
{ {
return saveName; return saveName;
} }
QString getServer() QString getServer() const
{ {
return server; return server;
} }
QString getPort() QString getPort() const
{ {
return port; return port;
} }
QString getUsername() QString getUsername() const
{ {
return username; return username;
} }
QString getPassword() QString getPassword() const
{ {
return password; return password;
} }
bool getSavePassword() bool getSavePassword() const
{ {
return savePassword; return savePassword;
} }
QMap<QString, UserConnection_Information> getServerInfo(); QMap<QString, std::pair<QString, UserConnection_Information>> getServerInfo();
QStringList getServerInfo(const QString &find); QStringList getServerInfo(const QString &find);
}; };
#endif #endif

View file

@ -183,11 +183,13 @@ void MainWindow::activateAccepted()
void MainWindow::actConnect() void MainWindow::actConnect()
{ {
auto *dlg = new DlgConnect(this); dlgConnect = new DlgConnect(this);
connect(dlg, SIGNAL(sigStartForgotPasswordRequest()), this, SLOT(actForgotPasswordRequest())); connect(dlgConnect, SIGNAL(sigStartForgotPasswordRequest()), this, SLOT(actForgotPasswordRequest()));
if (dlg->exec())
client->connectToServer(dlg->getHost(), static_cast<unsigned int>(dlg->getPort()), dlg->getPlayerName(), if (dlgConnect->exec()) {
dlg->getPassword()); client->connectToServer(dlgConnect->getHost(), static_cast<unsigned int>(dlgConnect->getPort()),
dlgConnect->getPlayerName(), dlgConnect->getPassword());
}
} }
void MainWindow::actRegister() void MainWindow::actRegister()
@ -233,7 +235,7 @@ void MainWindow::actSinglePlayer()
Command_CreateGame createCommand; Command_CreateGame createCommand;
createCommand.set_max_players(static_cast<google::protobuf::uint32>(numberPlayers)); createCommand.set_max_players(static_cast<google::protobuf::uint32>(numberPlayers));
mainClient->sendCommand(mainClient->prepareRoomCommand(createCommand, 0)); mainClient->sendCommand(LocalClient::prepareRoomCommand(createCommand, 0));
} }
void MainWindow::actWatchReplay() void MainWindow::actWatchReplay()
@ -251,7 +253,7 @@ void MainWindow::actWatchReplay()
QByteArray buf = file.readAll(); QByteArray buf = file.readAll();
file.close(); file.close();
auto *replay = new GameReplay; replay = new GameReplay;
replay->ParseFromArray(buf.data(), buf.size()); replay->ParseFromArray(buf.data(), buf.size());
tabSupervisor->openReplay(replay); tabSupervisor->openReplay(replay);
@ -832,7 +834,7 @@ MainWindow::~MainWindow()
void MainWindow::createTrayIcon() void MainWindow::createTrayIcon()
{ {
auto *trayIconMenu = new QMenu(this); trayIconMenu = new QMenu(this);
trayIconMenu->addAction(closeAction); trayIconMenu->addAction(closeAction);
trayIcon = new QSystemTrayIcon(this); trayIcon = new QSystemTrayIcon(this);
@ -1205,9 +1207,9 @@ int MainWindow::getNextCustomSetPrefix(QDir dataDir)
void MainWindow::actManageSets() void MainWindow::actManageSets()
{ {
auto *w = new WndSets; wndSets = new WndSets;
w->setWindowModality(Qt::WindowModal); wndSets->setWindowModality(Qt::WindowModal);
w->show(); wndSets->show();
} }
void MainWindow::actEditTokens() void MainWindow::actEditTokens()

View file

@ -30,13 +30,17 @@
#include "abstractclient.h" #include "abstractclient.h"
#include "pb/response.pb.h" #include "pb/response.pb.h"
class TabSupervisor; class DlgConnect;
class RemoteClient; class DlgViewLog;
class GameReplay;
class HandlePublicServers;
class LocalClient; class LocalClient;
class LocalServer; class LocalServer;
class ServerInfo_User;
class QThread; class QThread;
class DlgViewLog; class RemoteClient;
class ServerInfo_User;
class TabSupervisor;
class WndSets;
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
@ -114,34 +118,29 @@ private:
}; };
QList<QMenu *> tabMenus; QList<QMenu *> tabMenus;
QMenu *cockatriceMenu, *dbMenu, *helpMenu; QMenu *cockatriceMenu, *dbMenu, *helpMenu, *trayIconMenu;
QAction *aConnect, *aDisconnect, *aSinglePlayer, *aWatchReplay, *aDeckEditor, *aFullScreen, *aSettings, *aExit, QAction *aConnect, *aDisconnect, *aSinglePlayer, *aWatchReplay, *aDeckEditor, *aFullScreen, *aSettings, *aExit,
*aAbout, *aTips, *aCheckCardUpdates, *aRegister, *aUpdate, *aViewLog; *aAbout, *aTips, *aCheckCardUpdates, *aRegister, *aUpdate, *aViewLog, *closeAction;
QAction *aManageSets, *aEditTokens, *aOpenCustomFolder, *aOpenCustomsetsFolder, *aAddCustomSet; QAction *aManageSets, *aEditTokens, *aOpenCustomFolder, *aOpenCustomsetsFolder, *aAddCustomSet;
TabSupervisor *tabSupervisor; TabSupervisor *tabSupervisor;
WndSets *wndSets;
QMenu *trayIconMenu;
QAction *closeAction;
RemoteClient *client; RemoteClient *client;
QThread *clientThread; QThread *clientThread;
LocalServer *localServer; LocalServer *localServer;
bool bHasActivated; bool bHasActivated;
QMessageBox serverShutdownMessageBox; QMessageBox serverShutdownMessageBox;
QProcess *cardUpdateProcess; QProcess *cardUpdateProcess;
DlgViewLog *logviewDialog; DlgViewLog *logviewDialog;
DlgConnect *dlgConnect;
GameReplay *replay;
public: public:
MainWindow(QWidget *parent = 0); explicit MainWindow(QWidget *parent = nullptr);
~MainWindow(); ~MainWindow() override;
protected: protected:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event) override;
void changeEvent(QEvent *event); void changeEvent(QEvent *event) override;
QString extractInvalidUsernameMessage(QString &in); QString extractInvalidUsernameMessage(QString &in);
}; };