/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include <QHeaderView>
+#include <QIcon>
#include <QMessageBox>
#include <QTextCodec>
#include "networkssettingspage.h"
#include "client.h"
-#include "iconloader.h"
#include "identity.h"
#include "network.h"
+#include "presetnetworks.h"
#include "settingspagedlg.h"
#include "util.h"
NetworksSettingsPage::NetworksSettingsPage(QWidget *parent)
: SettingsPage(tr("IRC"), tr("Networks"), parent)
+#ifdef HAVE_SSL
+ , _cid(0)
+#endif
{
ui.setupUi(this);
// hide SASL options for older cores
if (!(Client::coreFeatures() & Quassel::SaslAuthentication))
ui.sasl->hide();
+ if (!(Client::coreFeatures() & Quassel::SaslExternal))
+ ui.saslExtInfo->hide();
+#ifndef HAVE_SSL
+ ui.saslExtInfo->hide();
+#endif
// set up icons
- ui.renameNetwork->setIcon(SmallIcon("edit-rename"));
- ui.addNetwork->setIcon(SmallIcon("list-add"));
- ui.deleteNetwork->setIcon(SmallIcon("edit-delete"));
- ui.addServer->setIcon(SmallIcon("list-add"));
- ui.deleteServer->setIcon(SmallIcon("edit-delete"));
- ui.editServer->setIcon(SmallIcon("configure"));
- ui.upServer->setIcon(SmallIcon("go-up"));
- ui.downServer->setIcon(SmallIcon("go-down"));
- ui.editIdentities->setIcon(SmallIcon("configure"));
+ ui.renameNetwork->setIcon(QIcon::fromTheme("edit-rename"));
+ ui.addNetwork->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteNetwork->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.addServer->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteServer->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.editServer->setIcon(QIcon::fromTheme("configure"));
+ ui.upServer->setIcon(QIcon::fromTheme("go-up"));
+ ui.downServer->setIcon(QIcon::fromTheme("go-down"));
+ ui.editIdentities->setIcon(QIcon::fromTheme("configure"));
_ignoreWidgetChanges = false;
- connectedIcon = SmallIcon("network-connect");
- connectingIcon = SmallIcon("network-wired"); // FIXME network-connecting
- disconnectedIcon = SmallIcon("network-disconnect");
+ connectedIcon = QIcon::fromTheme("network-connect");
+ connectingIcon = QIcon::fromTheme("network-wired"); // FIXME network-connecting
+ disconnectedIcon = QIcon::fromTheme("network-disconnect");
foreach(int mib, QTextCodec::availableMibs()) {
QByteArray codec = QTextCodec::codecForMib(mib)->name();
_ignoreWidgetChanges = true;
if (id != 0) {
NetworkInfo info = networkInfos[id];
+
+#ifdef HAVE_SSL
+ // this is only needed when the core supports SASL EXTERNAL
+ if (Client::coreFeatures() & Quassel::SaslExternal) {
+ if (_cid) {
+ disconnect(_cid, SIGNAL(sslSettingsUpdated()), this, SLOT(sslUpdated()));
+ delete _cid;
+ }
+ _cid = new CertIdentity(*Client::identity(info.identity), this);
+ _cid->enableEditSsl(true);
+ connect(_cid, SIGNAL(sslSettingsUpdated()), this, SLOT(sslUpdated()));
+ }
+#endif
+
ui.identityList->setCurrentIndex(ui.identityList->findData(info.identity.toInt()));
ui.serverList->clear();
foreach(Network::Server server, info.serverList) {
QListWidgetItem *item = new QListWidgetItem(QString("%1:%2").arg(server.host).arg(server.port));
if (server.useSsl)
- item->setIcon(SmallIcon("document-encrypt"));
+ item->setIcon(QIcon::fromTheme("document-encrypt"));
ui.serverList->addItem(item);
}
//setItemState(id);
}
else {
// just clear widgets
+#ifdef HAVE_SSL
+ if (_cid) {
+ disconnect(_cid, SIGNAL(sslSettingsUpdated()), this, SLOT(sslUpdated()));
+ delete _cid;
+ }
+#endif
ui.identityList->setCurrentIndex(-1);
ui.serverList->clear();
ui.performEdit->clear();
}
+#ifdef HAVE_SSL
+void NetworksSettingsPage::sslUpdated()
+{
+ if (_cid && !_cid->sslKey().isNull()) {
+ ui.saslAccount->setDisabled(true);
+ ui.saslAccountLabel->setDisabled(true);
+ ui.saslPassword->setDisabled(true);
+ ui.saslPasswordLabel->setDisabled(true);
+ ui.saslExtInfo->setHidden(false);
+ } else {
+ ui.saslAccount->setDisabled(false);
+ ui.saslAccountLabel->setDisabled(false);
+ ui.saslPassword->setDisabled(false);
+ ui.saslPasswordLabel->setDisabled(false);
+ ui.saslExtInfo->setHidden(true);
+ }
+}
+#endif
+
+
/*** Network list ***/
void NetworksSettingsPage::on_networkList_itemSelectionChanged()
NetworkAddDlg::NetworkAddDlg(const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist)
{
ui.setupUi(this);
- ui.useSSL->setIcon(SmallIcon("document-encrypt"));
+ ui.useSSL->setIcon(QIcon::fromTheme("document-encrypt"));
// read preset networks
- QStringList networks = Network::presetNetworks();
+ QStringList networks = PresetNetworks::names();
foreach(QString s, existing)
networks.removeAll(s);
if (networks.count())
return info;
}
else
- return Network::networkInfoFromPreset(ui.presetList->currentText());
+ return PresetNetworks::networkInfo(ui.presetList->currentText());
}
ServerEditDlg::ServerEditDlg(const Network::Server &server, QWidget *parent) : QDialog(parent)
{
ui.setupUi(this);
- ui.useSSL->setIcon(SmallIcon("document-encrypt"));
+ ui.useSSL->setIcon(QIcon::fromTheme("document-encrypt"));
ui.host->setText(server.host);
+ ui.host->setFocus();
ui.port->setValue(server.port);
ui.password->setText(server.password);
ui.useSSL->setChecked(server.useSsl);
ui.proxyPort->setValue(server.proxyPort);
ui.proxyUsername->setText(server.proxyUser);
ui.proxyPassword->setText(server.proxyPass);
+
+ // This is a dirty hack to display the core->IRC SSL protocol dropdown
+ // only if the core won't use autonegotiation to determine the best
+ // protocol. When autonegotiation was introduced, it would have been
+ // a good idea to use the CoreFeatures enum to accomplish this.
+ // However, since multiple versions have been released since then, that
+ // is no longer possible. Instead, we rely on the fact that the
+ // Datastream protocol was introduced in the same version (0.10) as SSL
+ // autonegotiation. Because of that, we can display the dropdown only
+ // if the Legacy protocol is in use. If any other RemotePeer protocol
+ // is in use, that means a newer protocol is in use and therefore the
+ // core will use autonegotiation.
+ if (Client::coreConnection()->peer()->protocol() != Protocol::LegacyProtocol) {
+ ui.label_3->hide();
+ ui.sslVersion->hide();
+ }
+
on_host_textChanged();
}