Fixes Bug #711 - missing nicks after changing channelmodes (op, voice,...)
[quassel.git] / src / client / networkmodel.cpp
index cd5f46d..23ab261 100644 (file)
@@ -107,6 +107,23 @@ BufferItem *NetworkItem::bufferItem(const BufferInfo &bufferInfo) {
   }
 
   newChild(bufferItem);
+
+  // postprocess... this is necessary because Qt doesn't seem to like adding childs which already have childs on their own
+  switch(bufferInfo.type()) {
+  case BufferInfo::ChannelBuffer:
+    {
+      ChannelBufferItem *channelBufferItem = static_cast<ChannelBufferItem *>(bufferItem);
+      if(_network) {
+        IrcChannel *ircChannel = _network->ircChannel(bufferInfo.bufferName());
+        if(ircChannel)
+          channelBufferItem->attachIrcChannel(ircChannel);
+      }
+    }
+    break;
+  default:
+    break;
+  }
+
   return bufferItem;
 }
 
@@ -436,13 +453,6 @@ ChannelBufferItem::ChannelBufferItem(const BufferInfo &bufferInfo, AbstractTreeI
   : BufferItem(bufferInfo, parent),
     _ircChannel(0)
 {
-  const Network *net = Client::network(bufferInfo.networkId());
-  if(!net)
-    return;
-
-  IrcChannel *ircChannel = net->ircChannel(bufferInfo.bufferName());
-  if(ircChannel)
-    attachIrcChannel(ircChannel);
 }
 
 QVariant ChannelBufferItem::data(int column, int role) const {
@@ -970,6 +980,7 @@ MsgId NetworkModel::lastSeenMarkerMsgId(BufferId bufferId) const {
 MsgId NetworkModel::lastSeenMsgId(const BufferId &bufferId) {
   BufferItem *bufferItem = findBufferItem(bufferId);
   if(!bufferItem) {
+    qDebug() << "NetworkModel::lastSeenMsgId(): buffer is unknown:" << bufferId;
     Client::purgeKnownBufferIds();
     return MsgId();
   }
@@ -979,6 +990,7 @@ MsgId NetworkModel::lastSeenMsgId(const BufferId &bufferId) {
 void NetworkModel::setLastSeenMsgId(const BufferId &bufferId, const MsgId &msgId) {
   BufferItem *bufferItem = findBufferItem(bufferId);
   if(!bufferItem) {
+    qDebug() << "NetworkModel::setLastSeenMsgId(): buffer is unknown:" << bufferId;
     Client::purgeKnownBufferIds();
     return;
   }