selecting a proper default identity when creating a new network
[quassel.git] / src / qtui / settingspages / networkssettingspage.cpp
index 0a196c7..c45c972 100644 (file)
 #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("Misc"), tr("Networks"), parent) {
   ui.setupUi(this);
 
   // set up icons
@@ -277,22 +281,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 +311,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);
     }
@@ -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<IdentityId> 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<QString, QString> 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() {