Provide sane defaults for new network settings options in case you still used a revis...
[quassel.git] / src / core / coresession.cpp
index 8e66738..54457c7 100644 (file)
@@ -128,38 +128,30 @@ void CoreSession::loadSettings() {
     createIdentity(i);
   }
 
-  // FIXME switch to a pure DB storage
-  foreach(NetworkId id, s.networkIds()) {
-    NetworkInfo info = s.networkInfo(id);
-    createNetwork(info);
-  }
 
-  // FIXME Migrate old settings if available...
-  if(!_networks.count()) {
-    QVariantMap networks = s.sessionValue("Networks").toMap();
-    if(networks.keys().count()) {
-      qWarning() << "Migrating your old network settings to the new format!";
-      foreach(QString netname, networks.keys()) {
-        QVariantMap network = networks[netname].toMap();
-        NetworkId netid = Core::networkId(user(), netname);
-        NetworkInfo info;
-        info.networkId = netid;
-        info.networkName = netname;
-        info.identity = 1;
-        info.codecForEncoding = "ISO-8859-15";
-        info.codecForDecoding = "ISO-8859-15";
-        QVariantList slist;
-        foreach(QVariant v, network["Servers"].toList()) {
-          QVariantMap server;
-          server["Host"] = v.toMap()["Address"];
-          server["Port"] = v.toMap()["Port"];
-          slist << server;
-        }
-        info.serverList = slist;
-        createNetwork(info);
-      }
+  // migration to pure DB storage
+  QList<NetworkId> netIds = s.networkIds();
+  if(!netIds.isEmpty()) {
+    qDebug() << "Migrating Networksettings to DB Storage for User:" << user();
+    foreach(NetworkId id, netIds) {
+      NetworkInfo info = s.networkInfo(id);
+
+      // default new options
+      info.useRandomServer = false;
+      info.useAutoReconnect = true;
+      info.autoReconnectInterval = 60;
+      info.autoReconnectRetries = 20;
+      info.useAutoIdentify = false;
+      info.rejoinChannels = true;
+
+      Core::updateNetwork(user(), info);
+      s.removeNetworkInfo(id);
     }
   }
+
+  foreach(NetworkInfo info, Core::networks(user())) {
+    createNetwork(info);
+  }
 }
 
 void CoreSession::saveSessionState() const {
@@ -234,7 +226,8 @@ void CoreSession::attachNetworkConnection(NetworkConnection *conn) {
   //signalProxy()->attachSignal(conn, SIGNAL(connected(NetworkId)), SIGNAL(networkConnected(NetworkId)));
   //signalProxy()->attachSignal(conn, SIGNAL(disconnected(NetworkId)), SIGNAL(networkDisconnected(NetworkId)));
 
-  connect(conn, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), this, SLOT(recvMessageFromServer(Message::Type, QString, QString, QString, quint8)));
+  connect(conn, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)),
+         this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)));
   connect(conn, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString)));
 
 }
@@ -266,7 +259,7 @@ SignalProxy *CoreSession::signalProxy() const {
 
 // FIXME we need a sane way for creating buffers!
 void CoreSession::networkConnected(NetworkId networkid) {
-  Core::bufferInfo(user(), networkid); // create status buffer
+  Core::bufferInfo(user(), networkid, BufferInfo::StatusBuffer); // create status buffer
 }
 
 void CoreSession::networkDisconnected(NetworkId networkid) {
@@ -281,7 +274,7 @@ void CoreSession::networkDisconnected(NetworkId networkid) {
 void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) {
   NetworkConnection *conn = networkConnection(bufinfo.networkId());
   if(conn) {
-    conn->userInput(bufinfo.bufferName(), msg);
+    conn->userInput(bufinfo, msg);
   } else {
     qWarning() << "Trying to send to unconnected network!";
   }
@@ -289,11 +282,11 @@ void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) {
 
 // ALL messages coming pass through these functions before going to the GUI.
 // So this is the perfect place for storing the backlog and log stuff.
-void CoreSession::recvMessageFromServer(Message::Type type, QString target, QString text, QString sender, quint8 flags) {
+void CoreSession::recvMessageFromServer(Message::Type type, BufferInfo::Type bufferType, QString target, QString text, QString sender, quint8 flags) {
   NetworkConnection *netCon = qobject_cast<NetworkConnection*>(this->sender());
   Q_ASSERT(netCon);
   
-  BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), target);
+  BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), bufferType, target);
   Message msg(bufferInfo, type, text, sender, flags);
   msg.setMsgId(Core::storeMessage(msg));
   Q_ASSERT(msg.msgId() != 0);
@@ -419,7 +412,7 @@ void CoreSession::createNetwork(const NetworkInfo &info_) {
   int id;
 
   if(!info.networkId.isValid())
-    Core::createNetworkId(user(), info);
+    Core::createNetwork(user(), info);
 
   Q_ASSERT(info.networkId.isValid());
 
@@ -433,8 +426,6 @@ void CoreSession::createNetwork(const NetworkInfo &info_) {
   net->setProxy(signalProxy());
   _networks[id] = net;
   signalProxy()->synchronize(net);
-  CoreUserSettings s(user());
-  s.storeNetworkInfo(info);
   emit networkCreated(id);
 }
 
@@ -444,16 +435,30 @@ void CoreSession::updateNetwork(const NetworkInfo &info) {
     return;
   }
   _networks[info.networkId]->setNetworkInfo(info);
-  CoreUserSettings s(user());
-  s.storeNetworkInfo(info);
+  Core::updateNetwork(user(), info);
 }
 
 void CoreSession::removeNetwork(NetworkId id) {
+  // Make sure the network is disconnected!
+  NetworkConnection *conn = _connections.value(id, 0);
+  if(conn) {
+    if(conn->connectionState() != Network::Disconnected) {
+      connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(destroyNetwork(NetworkId)));
+      conn->disconnectFromIrc();
+    } else {
+      _connections.take(id)->deleteLater();  // TODO make this saner
+      destroyNetwork(id);
+    }
+  } else {
+    destroyNetwork(id);
+  }
+}
+
+void CoreSession::destroyNetwork(NetworkId id) {
+  Q_ASSERT(!_connections.contains(id));
   Network *net = _networks.take(id);
-  if(net) {
+  if(net && Core::removeNetwork(user(), id)) {
     emit networkRemoved(id);
-    CoreUserSettings s(user());
-    s.removeNetworkInfo(id);
     net->deleteLater();
   }
 }