Quassel now uses proper default messages for part, quit, kick and away (/away toggles...
[quassel.git] / src / core / coresession.cpp
index d7b9cb1..4b47121 100644 (file)
@@ -23,6 +23,7 @@
 #include "core.h"
 #include "coresession.h"
 #include "networkconnection.h"
+#include "userinputhandler.h"
 
 #include "signalproxy.h"
 #include "buffersyncer.h"
@@ -192,8 +193,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, BufferInfo::Type, QString, QString, QString, quint8)),
-         this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)));
+  connect(conn, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, Message::Flags)),
+         this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, Message::Flags)));
   connect(conn, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString)));
 
   connect(conn, SIGNAL(nickChanged(const NetworkId &, const QString &, const QString &)),
@@ -205,8 +206,11 @@ void CoreSession::attachNetworkConnection(NetworkConnection *conn) {
 }
 
 void CoreSession::disconnectFromNetwork(NetworkId id) {
-  if(!_connections.contains(id)) return;
-  _connections[id]->disconnectFromIrc();
+  if(!_connections.contains(id))
+    return;
+  
+  //_connections[id]->disconnectFromIrc();
+  _connections[id]->userInputHandler()->handleQuit(BufferInfo(), QString());
 }
 
 void CoreSession::networkStateRequested() {
@@ -282,10 +286,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, BufferInfo::Type bufferType, QString target, QString text, QString sender, quint8 flags) {
+void CoreSession::recvMessageFromServer(Message::Type type, BufferInfo::Type bufferType,
+                                        QString target, QString text, QString sender, Message::Flags flags) {
   NetworkConnection *netCon = qobject_cast<NetworkConnection*>(this->sender());
   Q_ASSERT(netCon);
-  
+
   BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), bufferType, target);
   Message msg(bufferInfo, type, text, sender, flags);
   msg.setMsgId(Core::storeMessage(msg));
@@ -396,19 +401,25 @@ void CoreSession::createNetwork(const NetworkInfo &info_) {
   if(!info.networkId.isValid())
     Core::createNetwork(user(), info);
 
-  Q_ASSERT(info.networkId.isValid());
+  if(!info.networkId.isValid()) {
+    qWarning() << qPrintable(tr("CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1!").arg(info.networkName));
+    return;
+  }
 
   id = info.networkId.toInt();
-  Q_ASSERT(!_networks.contains(id));
-  
-  Network *net = new Network(id, this);
-  connect(net, SIGNAL(connectRequested(NetworkId)), this, SLOT(connectToNetwork(NetworkId)));
-  connect(net, SIGNAL(disconnectRequested(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId)));
-  net->setNetworkInfo(info);
-  net->setProxy(signalProxy());
-  _networks[id] = net;
-  signalProxy()->synchronize(net);
-  emit networkCreated(id);
+  if(!_networks.contains(id)) {
+    Network *net = new Network(id, this);
+    connect(net, SIGNAL(connectRequested(NetworkId)), this, SLOT(connectToNetwork(NetworkId)));
+    connect(net, SIGNAL(disconnectRequested(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId)));
+    net->setNetworkInfo(info);
+    net->setProxy(signalProxy());
+    _networks[id] = net;
+    signalProxy()->synchronize(net);
+    emit networkCreated(id);
+  } else {
+    qWarning() << qPrintable(tr("CoreSession::createNetwork(): Trying to create a network that already exists, updating instead!"));
+    updateNetwork(info);
+  }
 }
 
 void CoreSession::updateNetwork(const NetworkInfo &info) {
@@ -462,7 +473,10 @@ void CoreSession::removeBufferRequested(BufferId bufferId) {
   
   if(bufferInfo.type() == BufferInfo::ChannelBuffer) {
     Network *net = network(bufferInfo.networkId());
-    Q_ASSERT(net);
+    if(!net) {
+      qWarning() << "CoreSession::removeBufferRequested(): Received BufferInfo with unknown networkId!";
+      return;
+    }
     IrcChannel *chan = net->ircChannel(bufferInfo.bufferName());
     if(chan) {
       qWarning() << "CoreSession::removeBufferRequested(): Unable to remove Buffer for joined Channel:" << bufferInfo.bufferName();