- }
-}
-
-void NetworksSettingsPage::clientIdentityUpdated() {
- const Identity *identity = qobject_cast<const Identity *>(sender());
- if(!identity) {
- qWarning() << "NetworksSettingsPage: Invalid identity to update!";
- return;
- }
- int row = ui.identityList->findData(identity->id().toInt());
- if(row < 0) {
- qWarning() << "NetworksSettingsPage: Invalid identity to update!";
- return;
- }
- if(ui.identityList->itemText(row) != identity->identityName()) {
- ui.identityList->setItemText(row, identity->identityName());
- }
-}
-
-void NetworksSettingsPage::clientIdentityRemoved(IdentityId id) {
- 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
- networkInfos[info.networkId] = info;
- if(info.networkId > 0) Client::updateNetwork(info);
- }
- }
- ui.identityList->removeItem(ui.identityList->findData(id.toInt()));
- widgetHasChanged();
-}
-
-QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const {
- for(int i = 0; i < ui.networkList->count(); i++) {
- QListWidgetItem *item = ui.networkList->item(i);
- if(item->data(Qt::UserRole).value<NetworkId>() == id) return item;
- }
- return 0;
-}
-
-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(connectionStateSet(Network::ConnectionState)), this, SLOT(networkConnectionStateChanged(Network::ConnectionState)));
- connect(Client::network(id), SIGNAL(connectionError(const QString &)), this, SLOT(networkConnectionError(const QString &)));
-}
-
-void NetworksSettingsPage::clientNetworkUpdated() {
- const Network *net = qobject_cast<const Network *>(sender());
- if(!net) {
- qWarning() << "Update request for unknown network received!";
- return;
- }
- networkInfos[net->networkId()] = net->networkInfo();
- setItemState(net->networkId());
- if(net->networkId() == currentId) displayNetwork(net->networkId());
- setWidgetStates();
- widgetHasChanged();
-}
-
-void NetworksSettingsPage::clientNetworkRemoved(NetworkId id) {
- if(!networkInfos.contains(id)) return;
- if(id == currentId) displayNetwork(0);
- NetworkInfo info = networkInfos.take(id);
- QList<QListWidgetItem *> items = ui.networkList->findItems(info.networkName, Qt::MatchExactly);
- foreach(QListWidgetItem *item, items) {
- if(item->data(Qt::UserRole).value<NetworkId>() == id)
- delete ui.networkList->takeItem(ui.networkList->row(item));
- }
- setWidgetStates();
- widgetHasChanged();
-}
-
-void NetworksSettingsPage::networkConnectionStateChanged(Network::ConnectionState state) {
- Q_UNUSED(state);
- const Network *net = qobject_cast<const Network *>(sender());
- if(!net) return;
- /*
- if(net->networkId() == currentId) {
- ui.connectNow->setEnabled(state == Network::Initialized || state == Network::Disconnected);
- }
- */
- setItemState(net->networkId());
- setWidgetStates();
-}
-
-void NetworksSettingsPage::networkConnectionError(const QString &) {
-
-}
-
-QListWidgetItem *NetworksSettingsPage::insertNetwork(NetworkId id) {
- NetworkInfo info = Client::network(id)->networkInfo();
- networkInfos[id] = info;
- return insertNetwork(info);
-}
-
-QListWidgetItem *NetworksSettingsPage::insertNetwork(const NetworkInfo &info) {
- QListWidgetItem *item = 0;
- QList<QListWidgetItem *> items = ui.networkList->findItems(info.networkName, Qt::MatchExactly);
- if(!items.count()) item = new QListWidgetItem(disconnectedIcon, info.networkName, ui.networkList);
- else {
- // we overwrite an existing net if it a) has the same name and b) has a negative ID meaning we created it locally before
- // -> then we can be sure that this is the core-side replacement for the net we created
- foreach(QListWidgetItem *i, items) {
- NetworkId id = i->data(Qt::UserRole).value<NetworkId>();
- if(id < 0) { item = i; break; }
- }
- if(!item) item = new QListWidgetItem(disconnectedIcon, info.networkName, ui.networkList);
- }
- item->setData(Qt::UserRole, QVariant::fromValue<NetworkId>(info.networkId));
- setItemState(info.networkId, item);
- widgetHasChanged();
- return item;
-}
-
-void NetworksSettingsPage::displayNetwork(NetworkId id) {
- _ignoreWidgetChanges = true;
- if(id != 0) {
- NetworkInfo info = networkInfos[id];
- 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"));
- ui.serverList->addItem(item);
- }
- //setItemState(id);
- //ui.randomServer->setChecked(info.useRandomServer);
- ui.performEdit->setPlainText(info.perform.join("\n"));
- ui.autoIdentify->setChecked(info.useAutoIdentify);
- ui.autoIdentifyService->setText(info.autoIdentifyService);
- ui.autoIdentifyPassword->setText(info.autoIdentifyPassword);
- if(info.codecForEncoding.isEmpty()) {
- ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(Network::defaultCodecForEncoding()));
- ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(Network::defaultCodecForDecoding()));
- ui.serverEncoding->setCurrentIndex(ui.serverEncoding->findText(Network::defaultCodecForServer()));
- ui.useCustomEncodings->setChecked(false);
- } else {
- ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(info.codecForEncoding));
- ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(info.codecForDecoding));
- ui.serverEncoding->setCurrentIndex(ui.serverEncoding->findText(info.codecForServer));
- ui.useCustomEncodings->setChecked(true);
- }
- ui.autoReconnect->setChecked(info.useAutoReconnect);
- ui.reconnectInterval->setValue(info.autoReconnectInterval);
- ui.reconnectRetries->setValue(info.autoReconnectRetries);
- ui.unlimitedRetries->setChecked(info.unlimitedReconnectRetries);
- ui.rejoinOnReconnect->setChecked(info.rejoinChannels);
- } else {
- // just clear widgets
- ui.identityList->setCurrentIndex(-1);
- ui.serverList->clear();
- ui.performEdit->clear();
- ui.autoIdentifyService->clear();
- ui.autoIdentifyPassword->clear();
+}
+
+
+void NetworksSettingsPage::clientIdentityUpdated()
+{
+ const Identity *identity = qobject_cast<const Identity *>(sender());
+ if (!identity) {
+ qWarning() << "NetworksSettingsPage: Invalid identity to update!";
+ return;
+ }
+ int row = ui.identityList->findData(identity->id().toInt());
+ if (row < 0) {
+ qWarning() << "NetworksSettingsPage: Invalid identity to update!";
+ return;
+ }
+ if (ui.identityList->itemText(row) != identity->identityName()) {
+ ui.identityList->setItemText(row, identity->identityName());
+ }
+}
+
+
+void NetworksSettingsPage::clientIdentityRemoved(IdentityId id)
+{
+ IdentityId defaultId = defaultIdentity();
+ if (currentId != 0) saveToNetworkInfo(networkInfos[currentId]);
+ foreach(NetworkInfo info, networkInfos.values()) {
+ if (info.identity == id) {
+ if (info.networkId == currentId)
+ ui.identityList->setCurrentIndex(0);
+ info.identity = defaultId;
+ networkInfos[info.networkId] = info;
+ if (info.networkId > 0) Client::updateNetwork(info);
+ }
+ }
+ ui.identityList->removeItem(ui.identityList->findData(id.toInt()));
+ widgetHasChanged();
+}
+
+
+QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const
+{
+ for (int i = 0; i < ui.networkList->count(); i++) {
+ QListWidgetItem *item = ui.networkList->item(i);
+ if (item->data(Qt::UserRole).value<NetworkId>() == id) return item;
+ }
+ return 0;
+}
+
+
+void NetworksSettingsPage::clientNetworkAdded(NetworkId id)
+{
+ insertNetwork(id);
+ //connect(Client::network(id), SIGNAL(updatedRemotely()), 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 &)));
+
+ // Handle capability changes in case a server dis/connects with the settings window open.
+ connect(Client::network(id), SIGNAL(capAdded(const QString &)), this, SLOT(clientNetworkCapsUpdated()));
+ connect(Client::network(id), SIGNAL(capRemoved(const QString &)), this, SLOT(clientNetworkCapsUpdated()));
+}
+
+
+void NetworksSettingsPage::clientNetworkUpdated()
+{
+ const Network *net = qobject_cast<const Network *>(sender());
+ if (!net) {
+ qWarning() << "Update request for unknown network received!";
+ return;
+ }
+ networkInfos[net->networkId()] = net->networkInfo();
+ setItemState(net->networkId());
+ if (net->networkId() == currentId) displayNetwork(net->networkId());