We now have back a real BufferModel. It's basically a ProxyModel to
[quassel.git] / src / client / client.cpp
index ab54311..55fccf2 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-07 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-08 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -28,6 +28,7 @@
 #include "message.h"
 #include "networkinfo.h"
 #include "networkmodel.h"
+#include "buffermodel.h"
 #include "quasselui.h"
 #include "signalproxy.h"
 #include "util.h"
@@ -52,27 +53,28 @@ void Client::init(AbstractUi *ui) {
 }
 
 Client::Client(QObject *parent)
-    : QObject(parent),
+  : QObject(parent),
     socket(0),
     _signalProxy(new SignalProxy(SignalProxy::Client, this)),
     mainUi(0),
     _networkModel(0),
+    _bufferModel(0),
     connectedToCore(false)
 {
-
 }
 
 Client::~Client() {
-
 }
 
 void Client::init() {
   blockSize = 0;
 
   _networkModel = new NetworkModel(this);
+  _bufferModel = new BufferModel(_networkModel);
 
   connect(this, SIGNAL(bufferSelected(Buffer *)),
-          _networkModel, SLOT(selectBuffer(Buffer *)));
+          _bufferModel, SLOT(selectBuffer(Buffer *)));
+  
   connect(this, SIGNAL(bufferUpdated(Buffer *)),
           _networkModel, SLOT(bufferUpdated(Buffer *)));
   connect(this, SIGNAL(bufferActivity(Buffer::ActivityLevel, Buffer *)),
@@ -192,6 +194,11 @@ NetworkModel *Client::networkModel() {
   return instance()->_networkModel;
 }
 
+BufferModel *Client::bufferModel() {
+  return instance()->_bufferModel;
+}
+
+
 SignalProxy *Client::signalProxy() {
   return instance()->_signalProxy;
 }
@@ -321,7 +328,7 @@ void Client::coreSocketDisconnected() {
   /* Clear internal data. Hopefully nothing relies on it at this point. */
   _networkModel->clear();
 
-  QHash<uint, Buffer *>::iterator bufferIter =  _buffers.begin();
+  QHash<BufferId, Buffer *>::iterator bufferIter =  _buffers.begin();
   while(bufferIter != _buffers.end()) {
     Buffer *buffer = bufferIter.value();
     disconnect(buffer, SIGNAL(destroyed()), this, 0);
@@ -331,7 +338,7 @@ void Client::coreSocketDisconnected() {
   Q_ASSERT(_buffers.isEmpty());
 
 
-  QHash<uint, NetworkInfo*>::iterator netIter = _networkInfo.begin();
+  QHash<NetworkId, NetworkInfo*>::iterator netIter = _networkInfo.begin();
   while(netIter != _networkInfo.end()) {
     NetworkInfo *net = netIter.value();
     disconnect(net, SIGNAL(destroyed()), this, 0);
@@ -340,6 +347,15 @@ void Client::coreSocketDisconnected() {
   }
   Q_ASSERT(_networkInfo.isEmpty());
 
+  QHash<IdentityId, Identity*>::iterator idIter = _identities.begin();
+  while(idIter != _identities.end()) {
+    Identity *id = idIter.value();
+    emit identityRemoved(id->id());
+    idIter = _identities.erase(idIter);
+    id->deleteLater();
+  }
+  Q_ASSERT(_identities.isEmpty());
+
   coreConnectionInfo.clear();
   sessionData.clear();
   layoutQueue.clear();
@@ -370,10 +386,11 @@ void Client::syncToCore(const QVariant &coreState) {
 
   // create identities
   foreach(QVariant vid, sessionState["Identities"].toList()) {
-    Identity *id = new Identity(vid.value<Identity>(), this);
-    _identities[id->id()] = id;
-    signalProxy()->synchronize(id);
-    qDebug() << "received identity" << id->identityName();
+    coreIdentityCreated(vid.value<Identity>());
+    //Identity *id = new Identity(vid.value<Identity>(), this);
+    //_identities[id->id()] = id;
+    //signalProxy()->synchronize(id);
+    //qDebug() << "received identity" << id->identityName();
   }
 
   // store Buffer details