X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=343ad8545edf2445a46d0eff828f2b25bdc9d4f1;hp=0c6ad25c0e8fcb6f5a980e9e62ffbbcc39f019a8;hb=78decd5f8d1a149fc0e62e01bd6b2886e0feadfe;hpb=b50541ba6d7c58322846cc2eb9f023a117d8c47d diff --git a/src/client/client.cpp b/src/client/client.cpp index 0c6ad25c..343ad854 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -38,6 +38,7 @@ #include "clientuserinputhandler.h" #include "coreaccountmodel.h" #include "coreconnection.h" +#include "dccconfig.h" #include "ircchannel.h" #include "ircuser.h" #include "message.h" @@ -47,6 +48,7 @@ #include "networkmodel.h" #include "quassel.h" #include "signalproxy.h" +#include "transfermodel.h" #include "util.h" #include "clientauthhandler.h" @@ -100,11 +102,13 @@ Client::Client(QObject *parent) _backlogManager(new ClientBacklogManager(this)), _bufferViewManager(0), _bufferViewOverlay(new BufferViewOverlay(this)), + _dccConfig(0), _ircListHelper(new ClientIrcListHelper(this)), _inputHandler(0), _networkConfig(0), _ignoreListManager(0), _transferManager(0), + _transferModel(new TransferModel(this)), _messageModel(0), _messageProcessor(0), _coreAccountModel(new CoreAccountModel(this)), @@ -386,6 +390,7 @@ void Client::setSyncedToCore() connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), this, SLOT(buffersPermanentlyMerged(BufferId, BufferId))); connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), _messageModel, SLOT(buffersPermanentlyMerged(BufferId, BufferId))); connect(bufferSyncer(), SIGNAL(bufferMarkedAsRead(BufferId)), SIGNAL(bufferMarkedAsRead(BufferId))); + connect(bufferSyncer(), SIGNAL(bufferActivityChanged(BufferId, const Message::Types)), _networkModel, SLOT(bufferActivityChanged(BufferId, const Message::Types))); connect(networkModel(), SIGNAL(requestSetLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &))); SignalProxy *p = signalProxy(); @@ -412,32 +417,46 @@ void Client::setSyncedToCore() _ignoreListManager = new ClientIgnoreListManager(this); p->synchronize(ignoreListManager()); + // create TransferManager and DccConfig if core supports them + Q_ASSERT(!_dccConfig); Q_ASSERT(!_transferManager); - _transferManager = new ClientTransferManager(this); - p->synchronize(transferManager()); + if (coreFeatures() & Quassel::DccFileTransfer) { + _dccConfig = new DccConfig(this); + p->synchronize(dccConfig()); + _transferManager = new ClientTransferManager(this); + _transferModel->setManager(_transferManager); + p->synchronize(transferManager()); + } // trigger backlog request once all active bufferviews are initialized - connect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); + connect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization())); _connected = true; emit connected(); emit coreConnectionStateChanged(true); } - -void Client::requestInitialBacklog() +void Client::finishConnectionInitialization() { // usually it _should_ take longer until the bufferViews are initialized, so that's what // triggers this slot. But we have to make sure that we know all buffers yet. // so we check the BufferSyncer and in case it wasn't initialized we wait for that instead if (!bufferSyncer()->isInitialized()) { - disconnect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); - connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); + disconnect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization())); + connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization())); return; } - disconnect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); - disconnect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog())); + disconnect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization())); + disconnect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization())); + + requestInitialBacklog(); + if (coreFeatures().testFlag(Quassel::BufferActivitySync)) + bufferSyncer()->markActivitiesChanged(); +} + +void Client::requestInitialBacklog() +{ _backlogManager->requestInitialBacklog(); } @@ -487,8 +506,14 @@ void Client::setDisconnectedFromCore() } if (_transferManager) { + _transferModel->setManager(nullptr); _transferManager->deleteLater(); - _transferManager = 0; + _transferManager = nullptr; + } + + if (_dccConfig) { + _dccConfig->deleteLater(); + _dccConfig = nullptr; } // we probably don't want to save pending input for reconnect