Server Connect Remade (#2452)

* Save multiple server configurations
* Each server has its own password/port storage

Close #2452
This commit is contained in:
Zach H 2017-03-14 17:51:51 -04:00 committed by Gavin Bisesi
parent 37b43f9916
commit 4cfcca33db
9 changed files with 280 additions and 58 deletions

View file

@ -115,6 +115,7 @@ SET(cockatrice_SOURCES
src/update_downloader.cpp
src/logger.cpp
src/releasechannel.cpp
src/userconnection_information.cpp
${VERSION_STRING_CPP}
)

View file

@ -14,6 +14,7 @@
#include <QPushButton>
#include "dlg_connect.h"
#include "settingscache.h"
#include "userconnection_information.h"
DlgConnect::DlgConnect(QWidget *parent)
: QDialog(parent)
@ -22,21 +23,16 @@ DlgConnect::DlgConnect(QWidget *parent)
previousHosts = new QComboBox(this);
previousHosts->installEventFilter(new DeleteHighlightedItemWhenShiftDelPressedEventFilter);
QStringList previousHostList = settingsCache->servers().getPreviousHostList();
if (previousHostList.isEmpty()) {
previousHostList << "cockatrice.woogerworks.com";
previousHostList << "chickatrice.net";
previousHostList << "mtg.tetrarch.co";
previousHostList << "cockatric.es";
}
previousHosts->addItems(previousHostList);
previousHosts->setCurrentIndex(settingsCache->servers().getPrevioushostindex());
rebuildComboBoxList();
newHostButton = new QRadioButton(tr("New Host"), this);
saveLabel = new QLabel(tr("Name:"));
saveEdit = new QLineEdit(settingsCache->servers().getSaveName());
saveLabel->setBuddy(saveEdit);
hostLabel = new QLabel(tr("&Host:"));
hostEdit = new QLineEdit();
hostEdit->setPlaceholderText(tr("Enter host name"));
hostEdit = new QLineEdit(settingsCache->servers().getHostname());
hostLabel->setBuddy(hostEdit);
portLabel = new QLabel(tr("&Port:"));
@ -58,11 +54,13 @@ DlgConnect::DlgConnect(QWidget *parent)
autoConnectCheckBox = new QCheckBox(tr("A&uto connect"));
autoConnectCheckBox->setToolTip(tr("Automatically connect to the most recent login when Cockatrice opens"));
if(savePasswordCheckBox->isChecked())
if (savePasswordCheckBox->isChecked())
{
autoConnectCheckBox->setChecked(settingsCache->servers().getAutoConnect());
autoConnectCheckBox->setEnabled(true);
} else {
}
else
{
settingsCache->servers().setAutoConnect(0);
autoConnectCheckBox->setChecked(0);
autoConnectCheckBox->setEnabled(false);
@ -85,11 +83,13 @@ DlgConnect::DlgConnect(QWidget *parent)
connectionLayout->addWidget(previousHostButton, 0, 1);
connectionLayout->addWidget(previousHosts, 1, 1);
connectionLayout->addWidget(newHostButton, 2, 1);
connectionLayout->addWidget(hostLabel, 3, 0);
connectionLayout->addWidget(hostEdit, 3, 1);
connectionLayout->addWidget(portLabel, 4, 0);
connectionLayout->addWidget(portEdit, 4, 1);
connectionLayout->addWidget(autoConnectCheckBox, 5, 1);
connectionLayout->addWidget(saveLabel, 3, 0);
connectionLayout->addWidget(saveEdit, 3, 1);
connectionLayout->addWidget(hostLabel, 4, 0);
connectionLayout->addWidget(hostEdit, 4, 1);
connectionLayout->addWidget(portLabel, 5, 0);
connectionLayout->addWidget(portEdit, 5, 1);
connectionLayout->addWidget(autoConnectCheckBox, 6, 1);
QGridLayout *buttons = new QGridLayout;
buttons->addWidget(btnOk, 0, 0);
@ -132,24 +132,85 @@ DlgConnect::DlgConnect(QWidget *parent)
previousHostButton->setChecked(true);
else
newHostButton->setChecked(true);
connect(previousHosts, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(updateDisplayInfo(const QString &)));
playernameEdit->setFocus();
}
void DlgConnect::actSaveConfig()
{
if (!settingsCache->servers().updateExistingServer(saveEdit->text(), hostEdit->text(), portEdit->text(), playernameEdit->text(), passwordEdit->text(), savePasswordCheckBox->isChecked()))
settingsCache->servers().addNewServer(saveEdit->text(), hostEdit->text(), portEdit->text(), playernameEdit->text(), passwordEdit->text(), savePasswordCheckBox->isChecked());
rebuildComboBoxList();
}
void DlgConnect::rebuildComboBoxList()
{
previousHosts->clear();
UserConnection_Information uci;
savedHostList = uci.getServerInfo();
if (savedHostList.size() == 1)
{
settingsCache->servers().addNewServer("Woogerworks Cockatrice", "cockatrice.woogerworks.com", "4747", "", "", false);
settingsCache->servers().addNewServer("Chickatrice Cockatrice", "chickatrice.net", "4747", "", "", false);
settingsCache->servers().addNewServer("Cockatric.es Cockatrice", "cockatric.es", "4747", "", "", false);
settingsCache->servers().addNewServer("Tetrarch Cockatrice", "mtg.tetrarch.co", "4747", "", "", false);
}
savedHostList = uci.getServerInfo();
int i = 0;
foreach (UserConnection_Information tmp, savedHostList)
{
QString saveName = tmp.getSaveName();
if (saveName.size())
{
previousHosts->addItem(saveName);
if (settingsCache->servers().getPrevioushostName() == saveName)
previousHosts->setCurrentIndex(i);
i++;
}
}
}
void DlgConnect::previousHostSelected(bool state) {
if (state) {
hostLabel->setDisabled(true);
hostEdit->setDisabled(true);
previousHosts->setDisabled(false);
}
}
void DlgConnect::updateDisplayInfo(const QString &saveName)
{
UserConnection_Information uci;
QStringList data = uci.getServerInfo(saveName);
if (saveEdit == nullptr)
return;
saveEdit->setText(data.at(0));
hostEdit->setText(data.at(1));
portEdit->setText(data.at(2));
playernameEdit->setText(data.at(3));
passwordEdit->setText(data.at(4));
savePasswordCheckBox->setChecked(data.at(5) == "1" ? true : false);
}
void DlgConnect::newHostSelected(bool state) {
if (state) {
hostEdit->setDisabled(false);
hostLabel->setDisabled(false);
if (state)
{
previousHosts->setDisabled(true);
saveEdit->clear();
saveEdit->setPlaceholderText("New Menu Name");
}
else
{
rebuildComboBoxList();
}
}
@ -167,26 +228,15 @@ void DlgConnect::passwordSaved(int state)
void DlgConnect::actOk()
{
settingsCache->servers().setPort(portEdit->text());
settingsCache->servers().setPlayerName(playernameEdit->text());
settingsCache->servers().setPassword(savePasswordCheckBox->isChecked() ? passwordEdit->text() : QString());
settingsCache->servers().setSavePassword(savePasswordCheckBox->isChecked() ? 1 : 0);
settingsCache->servers().setAutoConnect(autoConnectCheckBox->isChecked() ? 1 : 0);
settingsCache->servers().setPreviousHostLogin(previousHostButton->isChecked() ? 1 : 0);
QStringList hostList;
if (newHostButton->isChecked())
if (!hostEdit->text().trimmed().isEmpty())
hostList << hostEdit->text();
for (int i = 0; i < previousHosts->count(); i++)
if(!previousHosts->itemText(i).trimmed().isEmpty())
hostList << previousHosts->itemText(i);
settingsCache->servers().setPreviousHostList(hostList);
settingsCache->servers().setPrevioushostindex(previousHosts->currentIndex());
settingsCache->servers().addNewServer(saveEdit->text(), hostEdit->text(), portEdit->text(), playernameEdit->text(), passwordEdit->text(), savePasswordCheckBox->isChecked());
else
settingsCache->servers().updateExistingServer(saveEdit->text(), hostEdit->text(), portEdit->text(), playernameEdit->text(), passwordEdit->text(), savePasswordCheckBox->isChecked());
if(playernameEdit->text().isEmpty())
settingsCache->servers().setPrevioushostName(saveEdit->text());
settingsCache->servers().setAutoConnect(autoConnectCheckBox->isChecked() ? 1 : 0);
if (playernameEdit->text().isEmpty())
{
QMessageBox::critical(this, tr("Connect Warning"), tr("The player name can't be empty."));
return;
@ -197,7 +247,7 @@ void DlgConnect::actOk()
QString DlgConnect::getHost() const {
return previousHostButton->isChecked() ? previousHosts->currentText() : hostEdit->text();
return hostEdit->text();
}
void DlgConnect::actCancel()
@ -225,4 +275,5 @@ void DlgConnect::actForgotPassword()
{
emit sigStartForgotPasswordRequest();
reject();
}
}

View file

@ -1,6 +1,7 @@
#ifndef DLG_CONNECT_H
#define DLG_CONNECT_H
#include "userconnection_information.h"
#include <QDialog>
#include <QLineEdit>
@ -31,17 +32,21 @@ public:
private slots:
void actOk();
void actCancel();
void actSaveConfig();
void passwordSaved(int state);
void previousHostSelected(bool state);
void newHostSelected(bool state);
void actForgotPassword();
void updateDisplayInfo(const QString &saveName);
void rebuildComboBoxList();
private:
QLabel *hostLabel, *portLabel, *playernameLabel, *passwordLabel;
QLineEdit *hostEdit, *portEdit, *playernameEdit, *passwordEdit;
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;
};
#endif

View file

@ -1,4 +1,5 @@
#include "serverssettings.h"
#include <QDebug>
ServersSettings::ServersSettings(QString settingPath, QObject *parent)
: SettingsManager(settingPath+"servers.ini", parent)
@ -26,14 +27,32 @@ QStringList ServersSettings::getPreviousHostList()
return getValue("previoushosts", "server").toStringList();
}
void ServersSettings::setPrevioushostindex(int index)
void ServersSettings::setPrevioushostName(const QString &name)
{
setValue(index, "previoushostindex", "server");
setValue(name, "previoushostName", "server");
}
int ServersSettings::getPrevioushostindex()
QString ServersSettings::getSaveName(QString defaultname)
{
return getValue("previoushostindex", "server").toInt();
int index = getPrevioushostindex(getPrevioushostName());
QVariant saveName = getValue(QString("saveName%1").arg(index), "server", "server_details");
return saveName == QVariant() ? defaultname : saveName.toString();
}
QString ServersSettings::getPrevioushostName()
{
return getValue("previoushostName", "server").toString();
}
int ServersSettings::getPrevioushostindex(const QString &saveName)
{
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())
return i;
return -1;
}
void ServersSettings::setHostName(QString hostname)
@ -43,7 +62,8 @@ void ServersSettings::setHostName(QString hostname)
QString ServersSettings::getHostname(QString defaultHost)
{
QVariant hostname = getValue("hostname","server");
int index = getPrevioushostindex(getPrevioushostName());
QVariant hostname = getValue(QString("server%1").arg(index), "server", "server_details");
return hostname == QVariant() ? defaultHost : hostname.toString();
}
@ -54,7 +74,9 @@ void ServersSettings::setPort(QString port)
QString ServersSettings::getPort(QString defaultPort)
{
QVariant port = getValue("port","server");
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();
}
@ -65,7 +87,9 @@ void ServersSettings::setPlayerName(QString playerName)
QString ServersSettings::getPlayerName(QString defaultName)
{
QVariant name = getValue("playername", "server");
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();
}
@ -76,7 +100,8 @@ void ServersSettings::setPassword(QString password)
QString ServersSettings::getPassword()
{
return getValue("password", "server").toString();
int index = getPrevioushostindex(getPrevioushostName());
return getValue(QString("password%1").arg(index), "server", "server_details").toString();
}
void ServersSettings::setSavePassword(int save)
@ -86,7 +111,8 @@ void ServersSettings::setSavePassword(int save)
int ServersSettings::getSavePassword()
{
QVariant save = getValue("save_password", "server");
int index = getPrevioushostindex(getPrevioushostName());
QVariant save = getValue(QString("savePassword%1").arg(index), "server", "server_details");
return save == QVariant() ? 1 : save.toInt();
}
@ -133,3 +159,39 @@ QString ServersSettings::getFPPlayerName(QString defaultName)
QVariant name = getValue("fpplayername", "server");
return name == QVariant() ? defaultName : name.toString();
}
void ServersSettings::addNewServer(QString saveName, QString serv, QString port, QString username, QString password, bool savePassword)
{
if (updateExistingServer(saveName, serv, port, username, password, savePassword))
return;
int index = getValue("totalServers", "server", "server_details").toInt() + 1;
setValue(saveName, QString("saveName%1").arg(index), "server", "server_details");
setValue(serv, QString("server%1").arg(index), "server", "server_details");
setValue(port, QString("port%1").arg(index), "server", "server_details");
setValue(username, QString("username%1").arg(index), "server", "server_details");
setValue(password, QString("password%1").arg(index), "server", "server_details");
setValue(savePassword, QString("savePassword%1").arg(index), "server", "server_details");
setValue(index, "totalServers", "server", "server_details");
}
bool ServersSettings::updateExistingServer(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 (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(password, QString("password%1").arg(i), "server", "server_details");
setValue(savePassword, QString("savePassword%1").arg(i), "server", "server_details");
return true;
}
}
return false;
}

View file

@ -11,8 +11,9 @@ class ServersSettings : public SettingsManager
public:
int getPreviousHostLogin();
int getPrevioushostindex(const QString &);
QStringList getPreviousHostList();
int getPrevioushostindex();
QString getPrevioushostName();
QString getHostname(QString defaultHost = "");
QString getPort(QString defaultPort = "");
QString getPlayerName(QString defaultName = "");
@ -20,10 +21,12 @@ public:
QString getFPPort(QString defaultPort = "");
QString getFPPlayerName(QString defaultName = "");
QString getPassword();
QString getSaveName(QString defaultname = "");
int getSavePassword();
int getAutoConnect();
void setPreviousHostLogin(int previous);
void setPrevioushostName(const QString &);
void setPreviousHostList(QStringList list);
void setPrevioushostindex(int index);
void setHostName(QString hostname);
@ -35,6 +38,8 @@ public:
void setFPHostName(QString hostname);
void setFPPort(QString port);
void setFPPlayerName(QString playerName);
void addNewServer(QString saveName, QString serv, QString port, QString username, QString password, bool savePassword);
bool updateExistingServer(QString saveName, QString serv, QString port, QString username, QString password, bool savePassword);
signals:
public slots:

View file

@ -11,6 +11,7 @@ class SettingsManager : public QObject
Q_OBJECT
public:
SettingsManager(QString settingPath, QObject *parent = 0);
QVariant getValue(QString name, QString group = "", QString subGroup = "");
signals:
@ -18,8 +19,7 @@ public slots:
protected:
QSettings settings;
QVariant getValue(QString name, QString group = "", QString subGroup = "" );
void setValue(QVariant value, QString name, QString group = "", QString subGroup = "" );
void setValue(QVariant value, QString name, QString group = "", QString subGroup = "");
};
#endif // SETTINGSMANAGER_H

View file

@ -58,7 +58,6 @@ void SettingsCache::translateLegacySettings()
legacySetting.beginGroup("server");
servers().setPreviousHostLogin(legacySetting.value("previoushostlogin").toInt());
servers().setPreviousHostList(legacySetting.value("previoushosts").toStringList());
servers().setPrevioushostindex(legacySetting.value("previoushostindex").toInt());
servers().setHostName(legacySetting.value("hostname").toString());
servers().setPort(legacySetting.value("port").toString());
servers().setPlayerName(legacySetting.value("playername").toString());

View file

@ -0,0 +1,68 @@
#include "userconnection_information.h"
#include "settingscache.h"
#include <QDebug>
UserConnection_Information::UserConnection_Information()
{
}
UserConnection_Information::UserConnection_Information(QString _saveName, QString _serverName, QString _portNum, QString _userName, QString _pass, bool _savePass)
: saveName(_saveName), server(_serverName), port(_portNum), username(_userName), password(_pass), savePassword(_savePass)
{
}
QMap<QString, UserConnection_Information> UserConnection_Information::getServerInfo()
{
QMap<QString, UserConnection_Information> serverList;
int size = settingsCache->servers().getValue("totalServers", "server", "server_details").toInt() + 1;
for (int i = 0; i < size; i++)
{
QString saveName = settingsCache->servers().getValue(QString("saveName%1").arg(i), "server", "server_details").toString();
QString serverName = settingsCache->servers().getValue(QString("server%1").arg(i), "server", "server_details").toString();
QString portNum = settingsCache->servers().getValue(QString("port%1").arg(i), "server", "server_details").toString();
QString userName = settingsCache->servers().getValue(QString("username%1").arg(i), "server", "server_details").toString();
QString pass = settingsCache->servers().getValue(QString("password%1").arg(i), "server", "server_details").toString();
bool savePass =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);
}
return serverList;
}
QStringList UserConnection_Information::getServerInfo(const QString &find)
{
QStringList server;
int size = settingsCache->servers().getValue("totalServers", "server", "server_details").toInt() + 1;
for (int i = 0; i < size; i++)
{
QString saveName = settingsCache->servers().getValue(QString("saveName%1").arg(i), "server", "server_details").toString();
if (find != saveName)
continue;
QString serverName = settingsCache->servers().getValue(QString("server%1").arg(i), "server", "server_details").toString();
QString portNum = settingsCache->servers().getValue(QString("port%1").arg(i), "server", "server_details").toString();
QString userName = settingsCache->servers().getValue(QString("username%1").arg(i), "server", "server_details").toString();
QString pass = settingsCache->servers().getValue(QString("password%1").arg(i), "server", "server_details").toString();
bool savePass =settingsCache->servers().getValue(QString("savePassword%1").arg(i), "server", "server_details").toBool();
server.append(saveName);
server.append(serverName);
server.append(portNum);
server.append(userName);
server.append(pass);
server.append(savePass ? "1" : "0");
break;
}
if (!server.size())
qDebug() << "There was a problem!";
return server;
}

View file

@ -0,0 +1,31 @@
#ifndef USERCONNECTION_INFORMATION_H
#define USERCONNECTION_INFORMATION_H
#include <QSettings>
#include <QFile>
#include <QDir>
#include <QApplication>
#include <QStandardPaths>
class UserConnection_Information {
private:
QString saveName;
QString server;
QString port;
QString username;
QString password;
bool savePassword;
public:
UserConnection_Information();
UserConnection_Information(QString, QString, QString, QString, QString, bool);
QString getSaveName() { return saveName; }
QString getServer() { return server; }
QString getPort() { return port; }
QString getUsername() { return username; }
QString getPassword() { return password; }
bool getSavePassword() { return savePassword; }
QMap<QString, UserConnection_Information> getServerInfo();
QStringList getServerInfo(const QString &find);
};
#endif