-void Client::connectionStateChanged(CoreConnection::ConnectionState state) {
- switch(state) {
- case CoreConnection::Disconnected:
- setDisconnectedFromCore();
- break;
- case CoreConnection::Synchronized:
- setSyncedToCore();
- break;
- default:
- break;
- }
-}
-
-void Client::setSyncedToCore() {
- // create buffersyncer
- Q_ASSERT(!_bufferSyncer);
- _bufferSyncer = new BufferSyncer(this);
- connect(bufferSyncer(), SIGNAL(lastSeenMsgSet(BufferId, MsgId)), _networkModel, SLOT(setLastSeenMsgId(BufferId, MsgId)));
- connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId)));
- connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString)));
- connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), this, SLOT(buffersPermanentlyMerged(BufferId, BufferId)));
- connect(bufferSyncer(), SIGNAL(buffersPermanentlyMerged(BufferId, BufferId)), _messageModel, SLOT(buffersPermanentlyMerged(BufferId, BufferId)));
- connect(networkModel(), SIGNAL(setLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &)));
- signalProxy()->synchronize(bufferSyncer());
-
- // create a new BufferViewManager
- Q_ASSERT(!_bufferViewManager);
- _bufferViewManager = new ClientBufferViewManager(signalProxy(), this);
- connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView()));
-
- // create AliasManager
- Q_ASSERT(!_aliasManager);
- _aliasManager = new ClientAliasManager(this);
- connect(aliasManager(), SIGNAL(initDone()), SLOT(sendBufferedUserInput()));
- signalProxy()->synchronize(aliasManager());
-
- // create NetworkConfig
- Q_ASSERT(!_networkConfig);
- _networkConfig = new NetworkConfig("GlobalNetworkConfig", this);
- signalProxy()->synchronize(networkConfig());
-
- // create IgnoreListManager
- Q_ASSERT(!_ignoreListManager);
- _ignoreListManager = new ClientIgnoreListManager(this);
- signalProxy()->synchronize(ignoreListManager());
-
- // trigger backlog request once all active bufferviews are initialized
- connect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog()));
-
- emit connected();
- emit coreConnectionStateChanged(true);
-}
-
-void Client::requestInitialBacklog() {
- // 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()) {
- connect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog()));
- connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog()));
- return;
- }
- _backlogManager->requestInitialBacklog();
-}
-
-void Client::createDefaultBufferView() {
- if(bufferViewManager()->bufferViewConfigs().isEmpty()) {
- BufferViewConfig config(-1);
- config.setBufferViewName(tr("All Chats"));
- config.initSetBufferList(networkModel()->allBufferIdsSorted());
- bufferViewManager()->requestCreateBufferView(config.toVariantMap());
- }
-}
-
-void Client::disconnectFromCore() {
- if(!coreConnection()->isConnected())
- return;
-
- coreConnection()->disconnectFromCore();
-}
-
-void Client::setDisconnectedFromCore() {
- emit disconnected();
- emit coreConnectionStateChanged(false);
-
- backlogManager()->reset();
- messageProcessor()->reset();
-
- // Clear internal data. Hopefully nothing relies on it at this point.
-
- if(_bufferSyncer) {
- _bufferSyncer->deleteLater();
- _bufferSyncer = 0;
- }
-
- if(_bufferViewManager) {
- _bufferViewManager->deleteLater();
- _bufferViewManager = 0;
- }
-
- if(_aliasManager) {
- _aliasManager->deleteLater();
- _aliasManager = 0;
- }
-
- if(_ignoreListManager) {
- _ignoreListManager->deleteLater();
- _ignoreListManager = 0;
- }
- // we probably don't want to save pending input for reconnect
- _userInputBuffer.clear();
-
- _messageModel->clear();
- _networkModel->clear();
-
- QHash<NetworkId, Network*>::iterator netIter = _networks.begin();
- while(netIter != _networks.end()) {
- Network *net = netIter.value();
- emit networkRemoved(net->networkId());
- disconnect(net, SIGNAL(destroyed()), this, 0);
- netIter = _networks.erase(netIter);
- net->deleteLater();
- }
- Q_ASSERT(_networks.isEmpty());
+void Client::connectionStateChanged(CoreConnection::ConnectionState state)
+{
+ switch (state) {
+ case CoreConnection::Disconnected:
+ setDisconnectedFromCore();
+ break;
+ case CoreConnection::Synchronized:
+ setSyncedToCore();
+ break;
+ default:
+ break;
+ }
+}
+
+
+void Client::setSyncedToCore()
+{
+ // create buffersyncer
+ Q_ASSERT(!_bufferSyncer);
+ _bufferSyncer = new BufferSyncer(this);
+ connect(bufferSyncer(), SIGNAL(lastSeenMsgSet(BufferId, MsgId)), _networkModel, SLOT(setLastSeenMsgId(BufferId, MsgId)));
+ connect(bufferSyncer(), SIGNAL(markerLineSet(BufferId, MsgId)), _networkModel, SLOT(setMarkerLineMsgId(BufferId, MsgId)));
+ connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId)));
+ connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString)));
+ 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(bufferSyncer(), SIGNAL(highlightCountChanged(BufferId, int)), _networkModel, SLOT(highlightCountChanged(BufferId, int)));
+ connect(networkModel(), SIGNAL(requestSetLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &)));
+
+ SignalProxy *p = signalProxy();
+ p->synchronize(bufferSyncer());
+
+ // create a new BufferViewManager
+ Q_ASSERT(!_bufferViewManager);
+ _bufferViewManager = new ClientBufferViewManager(p, this);
+ connect(_bufferViewManager, SIGNAL(initDone()), _bufferViewOverlay, SLOT(restore()));
+
+ // create AliasManager
+ Q_ASSERT(!_aliasManager);
+ _aliasManager = new ClientAliasManager(this);
+ connect(aliasManager(), SIGNAL(initDone()), SLOT(sendBufferedUserInput()));
+ p->synchronize(aliasManager());
+
+ // create NetworkConfig
+ Q_ASSERT(!_networkConfig);
+ _networkConfig = new NetworkConfig("GlobalNetworkConfig", this);
+ p->synchronize(networkConfig());
+
+ // create IgnoreListManager
+ Q_ASSERT(!_ignoreListManager);
+ _ignoreListManager = new ClientIgnoreListManager(this);
+ p->synchronize(ignoreListManager());
+
+ // create Core-Side HighlightRuleManager
+ Q_ASSERT(!_highlightRuleManager);
+ _highlightRuleManager = new HighlightRuleManager(this);
+ p->synchronize(highlightRuleManager());
+ // Listen to network removed events
+ connect(this, SIGNAL(networkRemoved(NetworkId)),
+ _highlightRuleManager, SLOT(networkRemoved(NetworkId)));
+
+/* not ready yet
+ // create TransferManager and DccConfig if core supports them
+ Q_ASSERT(!_dccConfig);
+ Q_ASSERT(!_transferManager);
+ if (isCoreFeatureEnabled(Quassel::Feature::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(finishConnectionInitialization()));
+
+ _connected = true;
+ emit connected();
+ emit coreConnectionStateChanged(true);
+}
+
+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(finishConnectionInitialization()));
+ connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization()));
+ return;
+ }
+ disconnect(bufferViewOverlay(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization()));
+ disconnect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization()));