diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 458cdc8f..567ed668 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -115,6 +115,7 @@ SET(cockatrice_SOURCES src/update_downloader.cpp src/logger.cpp src/releasechannel.cpp + src/userconnection_information.cpp ${VERSION_STRING_CPP} ) diff --git a/cockatrice/src/dlg_connect.cpp b/cockatrice/src/dlg_connect.cpp index 0eb3bbf1..7b22f927 100644 --- a/cockatrice/src/dlg_connect.cpp +++ b/cockatrice/src/dlg_connect.cpp @@ -14,6 +14,7 @@ #include #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(); -} \ No newline at end of file +} + diff --git a/cockatrice/src/dlg_connect.h b/cockatrice/src/dlg_connect.h index 23b19c32..e3c3d393 100644 --- a/cockatrice/src/dlg_connect.h +++ b/cockatrice/src/dlg_connect.h @@ -1,6 +1,7 @@ #ifndef DLG_CONNECT_H #define DLG_CONNECT_H +#include "userconnection_information.h" #include #include @@ -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 savedHostList; }; #endif diff --git a/cockatrice/src/settings/serverssettings.cpp b/cockatrice/src/settings/serverssettings.cpp index 367c7702..a84071a3 100644 --- a/cockatrice/src/settings/serverssettings.cpp +++ b/cockatrice/src/settings/serverssettings.cpp @@ -1,4 +1,5 @@ #include "serverssettings.h" +#include 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; +} diff --git a/cockatrice/src/settings/serverssettings.h b/cockatrice/src/settings/serverssettings.h index c64cc727..9d6e89f8 100644 --- a/cockatrice/src/settings/serverssettings.h +++ b/cockatrice/src/settings/serverssettings.h @@ -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: diff --git a/cockatrice/src/settings/settingsmanager.h b/cockatrice/src/settings/settingsmanager.h index 1ff6bf65..9a94b7fb 100644 --- a/cockatrice/src/settings/settingsmanager.h +++ b/cockatrice/src/settings/settingsmanager.h @@ -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 diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index ea6320cd..ab4a608d 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -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()); diff --git a/cockatrice/src/userconnection_information.cpp b/cockatrice/src/userconnection_information.cpp new file mode 100644 index 00000000..558b8cc4 --- /dev/null +++ b/cockatrice/src/userconnection_information.cpp @@ -0,0 +1,68 @@ +#include "userconnection_information.h" +#include "settingscache.h" +#include + +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 UserConnection_Information::getServerInfo() +{ + QMap 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; +} diff --git a/cockatrice/src/userconnection_information.h b/cockatrice/src/userconnection_information.h new file mode 100644 index 00000000..d3c7331d --- /dev/null +++ b/cockatrice/src/userconnection_information.h @@ -0,0 +1,31 @@ +#ifndef USERCONNECTION_INFORMATION_H +#define USERCONNECTION_INFORMATION_H + +#include +#include +#include +#include +#include + +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 getServerInfo(); + QStringList getServerInfo(const QString &find); +}; +#endif