X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fnetworkssettingspage.cpp;h=0f252e3223fc25598b0166e2a987a21cf1be5934;hp=0a196c7afcc119639869cf7f2276c61695bd4d5e;hb=b3cf44aa5773bb6a6e0a1ba8d0c1add841281b4b;hpb=bdcba50ecf3ade497da5e7c023cdaa654a91bc1e diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index 0a196c7a..0f252e32 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -28,11 +28,19 @@ #include "iconloader.h" #include "identity.h" #include "network.h" +#include "settingspagedlg.h" #include "util.h" -NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) { +#include "settingspages/identitiessettingspage.h" + +NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) +: SettingsPage(tr("IRC"), tr("Networks"), parent) { ui.setupUi(this); + // hide SASL options for older cores + if(!(Client::coreFeatures() & Quassel::SaslAuthentication)) + ui.sasl->hide(); + // set up icons ui.renameNetwork->setIcon(SmallIcon("edit-rename")); ui.addNetwork->setIcon(SmallIcon("list-add")); @@ -74,6 +82,9 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G connect(ui.autoIdentify, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.autoIdentifyService, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); connect(ui.autoIdentifyPassword, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); + connect(ui.sasl, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.saslAccount, SIGNAL(textEdited(QString)), this, SLOT(widgetHasChanged())); + connect(ui.saslPassword, SIGNAL(textEdited(QString)), this, SLOT(widgetHasChanged())); connect(ui.useCustomEncodings, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.sendEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.recvEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); @@ -181,13 +192,13 @@ bool NetworksSettingsPage::testHasChanged() { void NetworksSettingsPage::setWidgetStates() { // network list if(ui.networkList->selectedItems().count()) { - NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); - const Network *net = 0; - if(id > 0) net = Client::network(id); ui.detailsBox->setEnabled(true); ui.renameNetwork->setEnabled(true); ui.deleteNetwork->setEnabled(true); + /* button disabled for now + NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + const Network *net = id > 0 ? Client::network(id) : 0; ui.connectNow->setEnabled(net); // && (Client::network(id)->connectionState() == Network::Initialized // || Client::network(id)->connectionState() == Network::Disconnected)); @@ -277,22 +288,17 @@ void NetworksSettingsPage::clientIdentityAdded(IdentityId id) { const Identity * identity = Client::identity(id); connect(identity, SIGNAL(updatedRemotely()), this, SLOT(clientIdentityUpdated())); - if(id == 1) { - // default identity is always the first one! - ui.identityList->insertItem(0, identity->identityName(), id.toInt()); - } else { - QString name = identity->identityName(); - for(int j = 0; j < ui.identityList->count(); j++) { - if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) { - ui.identityList->insertItem(j, name, id.toInt()); - widgetHasChanged(); - return; - } + QString name = identity->identityName(); + for(int j = 0; j < ui.identityList->count(); j++) { + if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) { + ui.identityList->insertItem(j, name, id.toInt()); + widgetHasChanged(); + return; } - // append - ui.identityList->insertItem(ui.identityList->count(), name, id.toInt()); - widgetHasChanged(); } + // append + ui.identityList->insertItem(ui.identityList->count(), name, id.toInt()); + widgetHasChanged(); } void NetworksSettingsPage::clientIdentityUpdated() { @@ -312,13 +318,13 @@ void NetworksSettingsPage::clientIdentityUpdated() { } void NetworksSettingsPage::clientIdentityRemoved(IdentityId id) { + IdentityId defaultId = defaultIdentity(); if(currentId != 0) saveToNetworkInfo(networkInfos[currentId]); - //ui.identityList->removeItem(ui.identityList->findData(id.toInt())); foreach(NetworkInfo info, networkInfos.values()) { - //qDebug() << info.networkName << info.networkId << info.identity; if(info.identity == id) { - if(info.networkId == currentId) ui.identityList->setCurrentIndex(0); - info.identity = 1; // set to default + if(info.networkId == currentId) + ui.identityList->setCurrentIndex(0); + info.identity = defaultId; networkInfos[info.networkId] = info; if(info.networkId > 0) Client::updateNetwork(info); } @@ -338,22 +344,7 @@ QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const { void NetworksSettingsPage::clientNetworkAdded(NetworkId id) { insertNetwork(id); //connect(Client::network(id), SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(identitySet(IdentityId)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(networkNameSet(const QString &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(serverListSet(QVariantList)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(useRandomServerSet(bool)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(performSet(const QStringList &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(useAutoIdentifySet(bool)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(autoIdentifyServiceSet(const QString &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(autoIdentifyPasswordSet(const QString &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(useAutoReconnectSet(bool)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(autoReconnectIntervalSet(quint32)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(autoReconnectRetriesSet(quint16)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(unlimitedReconnectRetriesSet(bool)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(rejoinChannelsSet(bool)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(codecForServerSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(codecForEncodingSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); - connect(Client::network(id), SIGNAL(codecForDecodingSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(configChanged()), this, SLOT(clientNetworkUpdated())); connect(Client::network(id), SIGNAL(connectionStateSet(Network::ConnectionState)), this, SLOT(networkConnectionStateChanged(Network::ConnectionState))); connect(Client::network(id), SIGNAL(connectionError(const QString &)), this, SLOT(networkConnectionError(const QString &))); @@ -445,6 +436,9 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { ui.autoIdentify->setChecked(info.useAutoIdentify); ui.autoIdentifyService->setText(info.autoIdentifyService); ui.autoIdentifyPassword->setText(info.autoIdentifyPassword); + ui.sasl->setChecked(info.useSasl); + ui.saslAccount->setText(info.saslAccount); + ui.saslPassword->setText(info.saslPassword); if(info.codecForEncoding.isEmpty()) { ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(Network::defaultCodecForEncoding())); ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(Network::defaultCodecForDecoding())); @@ -468,6 +462,8 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { ui.performEdit->clear(); ui.autoIdentifyService->clear(); ui.autoIdentifyPassword->clear(); + ui.saslAccount->clear(); + ui.saslPassword->clear(); setWidgetStates(); } _ignoreWidgetChanges = false; @@ -481,6 +477,9 @@ void NetworksSettingsPage::saveToNetworkInfo(NetworkInfo &info) { info.useAutoIdentify = ui.autoIdentify->isChecked(); info.autoIdentifyService = ui.autoIdentifyService->text(); info.autoIdentifyPassword = ui.autoIdentifyPassword->text(); + info.useSasl = ui.sasl->isChecked(); + info.saslAccount = ui.saslAccount->text(); + info.saslPassword = ui.saslPassword->text(); if(!ui.useCustomEncodings->isChecked()) { info.codecForEncoding.clear(); info.codecForDecoding.clear(); @@ -518,29 +517,18 @@ void NetworksSettingsPage::on_addNetwork_clicked() { for(int i = 0; i < ui.networkList->count(); i++) existing << ui.networkList->item(i)->text(); NetworkAddDlg dlg(existing, this); if(dlg.exec() == QDialog::Accepted) { + NetworkInfo info = dlg.networkInfo(); + if(info.networkName.isEmpty()) + return; // sanity check + NetworkId id; for(id = 1; id <= networkInfos.count(); id++) { widgetHasChanged(); if(!networkInfos.keys().contains(-id.toInt())) break; } id = -id.toInt(); - - NetworkInfo info = dlg.networkInfo(); - if(info.networkName.isEmpty()) - return; // sanity check info.networkId = id; - info.identity = 1; - - // defaults - info.useRandomServer = false; - info.useAutoReconnect = true; - info.autoReconnectInterval = 60; - info.autoReconnectRetries = 20; - info.unlimitedReconnectRetries = false; - info.useAutoIdentify = false; - info.autoIdentifyService = "NickServ"; - info.rejoinChannels = true; - + info.identity = defaultIdentity(); networkInfos[id] = info; QListWidgetItem *item = insertNetwork(info); ui.networkList->setCurrentItem(item); @@ -646,6 +634,21 @@ void NetworksSettingsPage::on_downServer_clicked() { widgetHasChanged(); } +void NetworksSettingsPage::on_editIdentities_clicked() { + SettingsPageDlg dlg(new IdentitiesSettingsPage(this), this); + dlg.exec(); +} + +IdentityId NetworksSettingsPage::defaultIdentity() const { + IdentityId defaultId = 0; + QList ids = Client::identityIds(); + foreach(IdentityId id, ids) { + if(defaultId == 0 || id < defaultId) + defaultId = id; + } + return defaultId; +} + /************************************************************************** * NetworkAddDlg *************************************************************************/ @@ -655,20 +658,12 @@ NetworkAddDlg::NetworkAddDlg(const QStringList &exist, QWidget *parent) : QDialo 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()) { - QMap sorted; - foreach(QString net, networks) - sorted[net.toLower()] = net; - ui.presetList->addItems(sorted.values()); - } - } - if(!ui.presetList->count()) { + QStringList networks = Network::presetNetworks(); + foreach(QString s, existing) + networks.removeAll(s); + if(networks.count()) + ui.presetList->addItems(networks); + else { ui.useManual->setChecked(true); ui.usePreset->setEnabled(false); } @@ -678,34 +673,13 @@ NetworkAddDlg::NetworkAddDlg(const QStringList &exist, QWidget *parent) : QDialo } NetworkInfo NetworkAddDlg::networkInfo() const { - NetworkInfo info; - if(ui.useManual->isChecked()) { + NetworkInfo info; 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; + return info; + } else + return Network::networkInfoFromPreset(ui.presetList->currentText()); } void NetworkAddDlg::setButtonStates() {