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/userconnection_information.cpp
src/spoilerbackgroundupdater.cpp
src/handle_public_servers.cpp
${VERSION_STRING_CPP}
)

View file

@ -3,6 +3,7 @@
#include "userconnection_information.h"
#include <QCheckBox>
#include <QComboBox>
#include <QDebug>
#include <QDialogButtonBox>
#include <QEvent>
#include <QGridLayout>
@ -21,7 +22,18 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
previousHosts = new QComboBox(this);
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);
@ -52,15 +64,6 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
autoConnectCheckBox = new QCheckBox(tr("A&uto connect"));
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()) {
autoConnectCheckBox->setChecked(static_cast<bool>(settingsCache->servers().getAutoConnect()));
autoConnectCheckBox->setEnabled(true);
@ -83,14 +86,14 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
btnCancel->setFixedWidth(100);
connect(btnCancel, SIGNAL(released()), this, SLOT(actCancel()));
auto *newHostLayout = new QGridLayout;
newHostLayout->addWidget(newHostButton, 0, 1);
newHostLayout->addWidget(publicServersLabel, 0, 2);
newHolderLayout = new QHBoxLayout;
newHolderLayout->addWidget(previousHosts);
newHolderLayout->addWidget(btnRefreshServers);
auto *connectionLayout = new QGridLayout;
connectionLayout = new QGridLayout;
connectionLayout->addWidget(previousHostButton, 0, 1);
connectionLayout->addWidget(previousHosts, 1, 1);
connectionLayout->addLayout(newHostLayout, 2, 1, 1, 2);
connectionLayout->addLayout(newHolderLayout, 1, 1, 1, 2);
connectionLayout->addWidget(newHostButton, 2, 1);
connectionLayout->addWidget(saveLabel, 3, 0);
connectionLayout->addWidget(saveEdit, 3, 1);
connectionLayout->addWidget(hostLabel, 4, 0);
@ -99,33 +102,33 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
connectionLayout->addWidget(portEdit, 5, 1);
connectionLayout->addWidget(autoConnectCheckBox, 6, 1);
auto *buttons = new QGridLayout;
buttons = new QGridLayout;
buttons->addWidget(btnOk, 0, 0);
buttons->addWidget(btnForgotPassword, 0, 1);
buttons->addWidget(btnCancel, 0, 2);
QGroupBox *restrictionsGroupBox = new QGroupBox(tr("Server"));
restrictionsGroupBox = new QGroupBox(tr("Server"));
restrictionsGroupBox->setLayout(connectionLayout);
auto *loginLayout = new QGridLayout;
loginLayout = new QGridLayout;
loginLayout->addWidget(playernameLabel, 0, 0);
loginLayout->addWidget(playernameEdit, 0, 1);
loginLayout->addWidget(passwordLabel, 1, 0);
loginLayout->addWidget(passwordEdit, 1, 1);
loginLayout->addWidget(savePasswordCheckBox, 2, 1);
QGroupBox *loginGroupBox = new QGroupBox(tr("Login"));
loginGroupBox = new QGroupBox(tr("Login"));
loginGroupBox->setLayout(loginLayout);
QGroupBox *btnGroupBox = new QGroupBox(tr(""));
btnGroupBox = new QGroupBox(tr(""));
btnGroupBox->setLayout(buttons);
auto *grid = new QGridLayout;
grid = new QGridLayout;
grid->addWidget(restrictionsGroupBox, 0, 0);
grid->addWidget(loginGroupBox, 1, 0);
grid->addWidget(btnGroupBox, 2, 0);
auto *mainLayout = new QVBoxLayout;
mainLayout = new QVBoxLayout;
mainLayout->addLayout(grid);
setLayout(mainLayout);
@ -144,6 +147,8 @@ DlgConnect::DlgConnect(QWidget *parent) : QDialog(parent)
playernameEdit->setFocus();
}
DlgConnect::~DlgConnect() = default;
void DlgConnect::actSaveConfig()
{
bool updateSuccess = settingsCache->servers().updateExistingServer(
@ -156,30 +161,41 @@ void DlgConnect::actSaveConfig()
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();
UserConnection_Information uci;
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;
for (UserConnection_Information tmp : savedHostList) {
for (auto pair : savedHostList) {
auto tmp = pair.second;
QString saveName = tmp.getSaveName();
if (saveName.size()) {
previousHosts->addItem(saveName);
@ -191,6 +207,8 @@ void DlgConnect::rebuildComboBoxList()
i++;
}
}
btnRefreshServers->setDisabled(false);
}
void DlgConnect::previousHostSelected(bool state)
@ -198,12 +216,13 @@ void DlgConnect::previousHostSelected(bool state)
if (state) {
saveEdit->setDisabled(true);
previousHosts->setDisabled(false);
btnRefreshServers->setDisabled(false);
}
}
void DlgConnect::updateDisplayInfo(const QString &saveName)
{
if (saveEdit == nullptr) {
if (saveEdit == nullptr || saveName == placeHolderText) {
return;
}
@ -227,6 +246,7 @@ void DlgConnect::newHostSelected(bool state)
{
if (state) {
previousHosts->setDisabled(true);
btnRefreshServers->setDisabled(true);
hostEdit->clear();
portEdit->clear();
playernameEdit->clear();
@ -236,7 +256,7 @@ void DlgConnect::newHostSelected(bool state)
saveEdit->setPlaceholderText("New Menu Name");
saveEdit->setDisabled(false);
} else {
rebuildComboBoxList();
preRebuildComboBoxList();
}
}
@ -310,4 +330,4 @@ void DlgConnect::actForgotPassword()
{
emit sigStartForgotPasswordRequest();
reject();
}
}

View file

@ -1,21 +1,26 @@
#ifndef DLG_CONNECT_H
#define DLG_CONNECT_H
#include "handle_public_servers.h"
#include "userconnection_information.h"
#include <QDialog>
#include <QLineEdit>
class QLabel;
class QPushButton;
class QCheckBox;
class QComboBox;
class QGridLayout;
class QGroupBox;
class QHBoxLayout;
class QLabel;
class QPushButton;
class QRadioButton;
class QVBoxLayout;
class DeleteHighlightedItemWhenShiftDelPressedEventFilter : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event);
bool eventFilter(QObject *obj, QEvent *event) override;
};
class DlgConnect : public QDialog
@ -23,9 +28,11 @@ class DlgConnect : public QDialog
Q_OBJECT
signals:
void sigStartForgotPasswordRequest();
void sigPublicServersDownloaded();
public:
DlgConnect(QWidget *parent = 0);
explicit DlgConnect(QWidget *parent = nullptr);
~DlgConnect() override;
QString getHost() const;
int getPort() const
{
@ -39,6 +46,7 @@ public:
{
return passwordEdit->text();
}
private slots:
void actOk();
void actCancel();
@ -48,15 +56,23 @@ private slots:
void newHostSelected(bool state);
void actForgotPassword();
void updateDisplayInfo(const QString &saveName);
void rebuildComboBoxList();
void preRebuildComboBoxList();
void rebuildComboBoxList(int failure = -1);
void downloadThePublicServers();
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;
QCheckBox *savePasswordCheckBox, *autoConnectCheckBox;
QComboBox *previousHosts;
QRadioButton *newHostButton, *previousHostButton;
QPushButton *btnOk, *btnCancel, *btnForgotPassword;
QMap<QString, UserConnection_Information> savedHostList;
QPushButton *btnOk, *btnCancel, *btnForgotPassword, *btnRefreshServers;
QMap<QString, std::pair<QString, UserConnection_Information>> savedHostList;
HandlePublicServers *hps;
const QString placeHolderText = tr("Downloading...");
};
#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 <QDebug>
#include <utility>
ServersSettings::ServersSettings(QString settingPath, QObject *parent)
: SettingsManager(settingPath + "servers.ini", parent)
@ -36,7 +37,7 @@ QString ServersSettings::getSaveName(QString defaultname)
{
int index = getPrevioushostindex(getPrevioushostName());
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()
@ -64,7 +65,7 @@ QString ServersSettings::getHostname(QString defaultHost)
{
int index = getPrevioushostindex(getPrevioushostName());
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)
@ -77,7 +78,7 @@ QString ServersSettings::getPort(QString defaultPort)
int index = getPrevioushostindex(getPrevioushostName());
QVariant port = getValue(QString("port%1").arg(index), "server", "server_details");
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)
@ -90,7 +91,7 @@ QString ServersSettings::getPlayerName(QString defaultName)
int index = getPrevioushostindex(getPrevioushostName());
QVariant name = getValue(QString("username%1").arg(index), "server", "server_details");
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()
@ -139,7 +140,7 @@ void ServersSettings::setFPHostName(QString hostname)
QString ServersSettings::getFPHostname(QString defaultHost)
{
QVariant hostname = getValue("fphostname", "server");
return hostname == QVariant() ? defaultHost : hostname.toString();
return hostname == QVariant() ? std::move(defaultHost) : hostname.toString();
}
void ServersSettings::setFPPort(QString port)
@ -150,7 +151,7 @@ void ServersSettings::setFPPort(QString port)
QString ServersSettings::getFPPort(QString defaultPort)
{
QVariant port = getValue("fpport", "server");
return port == QVariant() ? defaultPort : port.toString();
return port == QVariant() ? std::move(defaultPort) : port.toString();
}
void ServersSettings::setFPPlayerName(QString playerName)
@ -161,7 +162,7 @@ void ServersSettings::setFPPlayerName(QString playerName)
QString ServersSettings::getFPPlayerName(QString defaultName)
{
QVariant name = getValue("fpplayername", "server");
return name == QVariant() ? defaultName : name.toString();
return name == QVariant() ? std::move(defaultName) : name.toString();
}
void ServersSettings::setClearDebugLogStatus(bool abIsChecked)
@ -175,11 +176,11 @@ bool ServersSettings::getClearDebugLogStatus(bool abDefaultValue)
return cbFlushLog == QVariant() ? abDefaultValue : cbFlushLog.toBool();
}
void ServersSettings::addNewServer(QString saveName,
QString serv,
QString port,
QString username,
QString password,
void ServersSettings::addNewServer(const QString &saveName,
const QString &serv,
const QString &port,
const QString &username,
const QString &password,
bool 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");
}
void ServersSettings::removeServer(QString saveName)
void ServersSettings::removeServer(QString servAddr)
{
int size = getValue("totalServers", "server", "server_details").toInt() + 1;
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("port%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,
QString serv,
QString port,
@ -220,17 +259,6 @@ bool ServersSettings::updateExistingServer(QString saveName,
QString password,
bool savePassword)
{
int size = getValue("totalServers", "server", "server_details").toInt() + 1;
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;
return updateExistingServerWithoutLoss(std::move(saveName), std::move(serv), std::move(port), std::move(username),
std::move(password), savePassword);
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -30,13 +30,17 @@
#include "abstractclient.h"
#include "pb/response.pb.h"
class TabSupervisor;
class RemoteClient;
class DlgConnect;
class DlgViewLog;
class GameReplay;
class HandlePublicServers;
class LocalClient;
class LocalServer;
class ServerInfo_User;
class QThread;
class DlgViewLog;
class RemoteClient;
class ServerInfo_User;
class TabSupervisor;
class WndSets;
class MainWindow : public QMainWindow
{
@ -114,34 +118,29 @@ private:
};
QList<QMenu *> tabMenus;
QMenu *cockatriceMenu, *dbMenu, *helpMenu;
QMenu *cockatriceMenu, *dbMenu, *helpMenu, *trayIconMenu;
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;
TabSupervisor *tabSupervisor;
QMenu *trayIconMenu;
QAction *closeAction;
WndSets *wndSets;
RemoteClient *client;
QThread *clientThread;
LocalServer *localServer;
bool bHasActivated;
QMessageBox serverShutdownMessageBox;
QProcess *cardUpdateProcess;
DlgViewLog *logviewDialog;
DlgConnect *dlgConnect;
GameReplay *replay;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
protected:
void closeEvent(QCloseEvent *event);
void changeEvent(QEvent *event);
void closeEvent(QCloseEvent *event) override;
void changeEvent(QEvent *event) override;
QString extractInvalidUsernameMessage(QString &in);
};