X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fnetworkssettingspage.cpp;h=c2785a0eda92120afe10f673d8f3a377cc76f252;hp=713cfa1af630558329fd8411f044883e070411bc;hb=eb5efce4b040e37a4d8fbabae37c63528b253744;hpb=6f99a6e2f39aaacabe8bb51a7bb1ff53c1b2082f diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index 713cfa1a..c2785a0e 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -28,7 +28,7 @@ #include "iconloader.h" #include "identity.h" #include "network.h" - +#include "util.h" NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) { ui.setupUi(this); @@ -508,7 +508,7 @@ void NetworksSettingsPage::on_networkList_itemSelectionChanged() { void NetworksSettingsPage::on_addNetwork_clicked() { QStringList existing; for(int i = 0; i < ui.networkList->count(); i++) existing << ui.networkList->item(i)->text(); - NetworkEditDlg dlg(QString(), existing, this); + NetworkAddDlg dlg(existing, this); if(dlg.exec() == QDialog::Accepted) { NetworkId id; for(id = 1; id <= networkInfos.count(); id++) { @@ -516,9 +516,11 @@ void NetworksSettingsPage::on_addNetwork_clicked() { if(!networkInfos.keys().contains(-id.toInt())) break; } id = -id.toInt(); - NetworkInfo info; + + NetworkInfo info = dlg.networkInfo(); + if(info.networkName.isEmpty()) + return; // sanity check info.networkId = id; - info.networkName = dlg.networkName(); info.identity = 1; // defaults @@ -634,6 +636,76 @@ void NetworksSettingsPage::on_downServer_clicked() { widgetHasChanged(); } +/************************************************************************** +* NetworkAddDlg +*************************************************************************/ + +NetworkAddDlg::NetworkAddDlg(const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist) { + ui.setupUi(this); + ui.useSSL->setIcon(SmallIcon("document-encrypt")); + + // read preset networks + networksFilePath = findDataFilePath("networks.ini"); + if(!networksFilePath.isEmpty()) { + QSettings s(networksFilePath, QSettings::IniFormat); + QStringList networks = s.childGroups(); + foreach(QString s, existing) + networks.removeAll(s); + if(!networks.isEmpty()) + networks.sort(); + ui.presetList->addItems(networks); + } + if(!ui.presetList->count()) { + ui.useManual->setChecked(true); + ui.usePreset->setEnabled(false); + } + connect(ui.networkName, SIGNAL(textChanged(const QString &)), SLOT(setButtonStates())); + connect(ui.serverAddress, SIGNAL(textChanged(const QString &)), SLOT(setButtonStates())); + setButtonStates(); +} + +NetworkInfo NetworkAddDlg::networkInfo() const { + NetworkInfo info; + + if(ui.useManual->isChecked()) { + info.networkName = ui.networkName->text().trimmed(); + info.serverList << Network::Server(ui.serverAddress->text().trimmed(), ui.port->value(), ui.serverPassword->text(), ui.useSSL->isChecked()); + } else { + info.networkName = ui.presetList->currentText(); + QSettings s(networksFilePath, QSettings::IniFormat); + s.beginGroup(info.networkName); + foreach(QString server, s.value("Servers").toStringList()) { + bool ssl = false; + QStringList splitserver = server.split(':', QString::SkipEmptyParts); + if(splitserver.count() != 2) { + qWarning() << "Invalid server entry in networks.conf:" << server; + continue; + } + if(splitserver[1].at(0) == '+') + ssl = true; + uint port = splitserver[1].toUInt(); + if(!port) { + qWarning() << "Invalid port entry in networks.conf:" << server; + continue; + } + info.serverList << Network::Server(splitserver[0].trimmed(), port, QString(), ssl); + } + } + + return info; +} + +void NetworkAddDlg::setButtonStates() { + bool ok = false; + if(ui.usePreset->isChecked() && ui.presetList->count()) + ok = true; + else if(ui.useManual->isChecked()) { + ok = !ui.networkName->text().trimmed().isEmpty() && !existing.contains(ui.networkName->text().trimmed()) + && !ui.serverAddress->text().isEmpty(); + } + ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok); +} + /************************************************************************** * NetworkEditDlg *************************************************************************/ @@ -657,7 +729,6 @@ void NetworkEditDlg::on_networkEdit_textChanged(const QString &text) { ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text.trimmed())); } - /************************************************************************** * ServerEditDlg *************************************************************************/