X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient%2Fclient.cpp;h=f2d1ddd89abf43435d900035ce1e97ab24c9a75f;hb=6250a7e25eb2c0a6794d4aa5679c70082d825031;hp=55bf9c5404652854c7b1acd195948cb354697105;hpb=902c95728306e5ba115de84800fc8d5d239c9d62;p=quassel.git diff --git a/src/client/client.cpp b/src/client/client.cpp index 55bf9c54..f2d1ddd8 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -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; } @@ -144,10 +141,6 @@ Client::Client(QObject *parent) } Client::~Client() { -// since we're now the parent of buffers this should be no longer needed - -// foreach(Buffer *buf, buffers.values()) delete buf; // this is done by disconnectFromCore()! FIXME? -// Q_ASSERT(!buffers.count()); } void Client::init() { @@ -200,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; @@ -237,16 +241,9 @@ void Client::connectToCore(const QVariantMap &conn) { } void Client::disconnectFromCore() { - if(clientMode == RemoteCore) { - socket->close(); - //QAbstractSocket *sock = qobject_cast(socket); - //Q_ASSERT(sock); - //sock->disconnectFromHost(); - } else { - socket->close(); - //disconnectFromLocalCore(); + socket->close(); + if(clientMode == LocalCore) coreSocketDisconnected(); - } } void Client::coreSocketConnected() { @@ -267,17 +264,15 @@ void Client::coreSocketDisconnected() { /* Clear internal data. Hopefully nothing relies on it at this point. */ _bufferModel->clear(); - // Buffers, if deleted, send a signal that causes their removal from buffers and bufferInfos. - // So we cannot simply go through the array in a loop (or use qDeleteAll) for deletion... - while(!_buffers.empty()) { - delete _buffers.take(_buffers.keys()[0]); + + foreach(Buffer *buffer, _buffers.values()) { + buffer->deleteLater(); } - Q_ASSERT(_buffers.empty()); - while(!_networkInfo.empty()) { - delete _networkInfo.take(_networkInfo.keys()[0]); + foreach(NetworkInfo *networkinfo, _networkInfo.values()) { + networkinfo->deleteLater(); } - + coreConnectionInfo.clear(); sessionData.clear(); layoutQueue.clear(); @@ -343,18 +338,18 @@ void Client::updateCoreConnectionProgress() { int numChannelsWaiting = 0; foreach(NetworkInfo *net, networkInfos()) { - if(not net->initialized()) + if(! net->initialized()) numNetsWaiting++; numIrcUsers += net->ircUsers().count(); foreach(IrcUser *user, net->ircUsers()) { - if(not user->initialized()) + if(! user->initialized()) numIrcUsersWaiting++; } numChannels += net->ircChannels().count(); foreach(IrcChannel *channel, net->ircChannels()) { - if(not channel->initialized()) + if(! channel->initialized()) numChannelsWaiting++; } @@ -455,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(sender()); + _buffers.remove(_buffers.key(buffer)); } void Client::recvMessage(const Message &msg) {