Adding work-in-progress for the new QGraphicsScene-based chatview.
[quassel.git] / src / client / client.cpp
index 2cb2e12..f2d1ddd 100644 (file)
@@ -85,24 +85,21 @@ Buffer *Client::buffer(uint bufferUid) {
 
 Buffer *Client::buffer(BufferInfo id) {
   Buffer *buff = buffer(id.uid());
-  
+
   if(!buff) {
     Client *client = Client::instance();
-    Buffer *buff = new Buffer(id, client);
+    buff = new Buffer(id, client);
 
     connect(buff, SIGNAL(userInput(BufferInfo, QString)),
            client, SLOT(userInput(BufferInfo, QString)));
     connect(buff, SIGNAL(bufferUpdated(Buffer *)),
            client, SIGNAL(bufferUpdated(Buffer *)));
-    connect(buff, SIGNAL(bufferDestroyed(Buffer *)),
-           client, SIGNAL(bufferDestroyed(Buffer *)));
-    connect(buff, SIGNAL(bufferDestroyed(Buffer *)),
-           client, SLOT(removeBuffer(Buffer *)));
-    
+    connect(buff, SIGNAL(destroyed()),
+           client, SLOT(bufferDestroyed()));
     client->_buffers[id.uid()] = buff;
     emit client->bufferUpdated(buff);
   }
-  
+  Q_ASSERT(buff);
   return buff;
 }
 
@@ -196,10 +193,21 @@ bool Client::isConnected() {
   return instance()->connectedToCore;
 }
 
+void Client::fakeInput(uint bufferUid, QString message) {
+  Buffer *buff = buffer(bufferUid);
+  if(!buff)
+    qWarning() << "No Buffer with uid" << bufferUid << "can't send Input" << message;
+  else
+    emit instance()->sendInput(buff->bufferInfo(), message);
+}
+
+void Client::fakeInput(BufferInfo bufferInfo, QString message) {
+  fakeInput(bufferInfo, message);
+}
+
 void Client::connectToCore(const QVariantMap &conn) {
   // TODO implement SSL
   coreConnectionInfo = conn;
-  
   if(isConnected()) {
     emit coreConnectionError(tr("Already connected to Core!"));
     return;
@@ -258,14 +266,12 @@ void Client::coreSocketDisconnected() {
   _bufferModel->clear();
 
   foreach(Buffer *buffer, _buffers.values()) {
-    delete buffer;
+    buffer->deleteLater();
   }
-  Q_ASSERT(_buffers.empty());
 
   foreach(NetworkInfo *networkinfo, _networkInfo.values()) {
-    delete networkinfo;
+    networkinfo->deleteLater();
   }
-  Q_ASSERT(_networkinfo.empty());
 
   coreConnectionInfo.clear();
   sessionData.clear();
@@ -444,9 +450,9 @@ void Client::updateBufferInfo(BufferInfo id) {
   buffer(id)->updateBufferInfo(id);
 }
 
-
-void Client::removeBuffer(Buffer *b) {
-  _buffers.remove(b->bufferInfo().uid());
+void Client::bufferDestroyed() {
+  Buffer *buffer = static_cast<Buffer *>(sender());
+  _buffers.remove(_buffers.key(buffer));
 }
 
 void Client::recvMessage(const Message &msg) {