-void Client::setConnectedToCore(QIODevice *sock, AccountId id) {
- socket = sock;
- signalProxy()->addPeer(socket);
- _connectedToCore = true;
- setCurrentCoreAccount(id);
-}
-
-void Client::setSyncedToCore() {
- // create buffersyncer
- Q_ASSERT(!_bufferSyncer);
- _bufferSyncer = new BufferSyncer(this);
- connect(bufferSyncer(), SIGNAL(lastSeenMsgSet(BufferId, MsgId)), this, SLOT(updateLastSeenMsg(BufferId, MsgId)));
- connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId)));
- connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString)));
- signalProxy()->synchronize(bufferSyncer());
-
- // attach backlog manager
- signalProxy()->synchronize(backlogManager());
-
- // create a new BufferViewManager
- _bufferViewManager = new BufferViewManager(signalProxy(), this);
-
- _syncedToCore = true;
- emit connected();
- emit coreConnectionStateChanged(true);
-}
-
-void Client::setSecuredConnection() {
- emit securedConnection();
-}
-
-void Client::disconnectFromCore() {
- if(!isConnected())
- return;
- _connectedToCore = false;
-
- if(socket) {
- socket->close();
- socket->deleteLater();
- }
- _syncedToCore = false;
- emit disconnected();
- emit coreConnectionStateChanged(false);
-
- // Clear internal data. Hopefully nothing relies on it at this point.
- setCurrentCoreAccount(0);
-
- if(_bufferSyncer) {
- _bufferSyncer->deleteLater();
- _bufferSyncer = 0;
- }
-
- if(_bufferViewManager) {
- _bufferViewManager->deleteLater();
- _bufferViewManager = 0;
- }
-
- _networkModel->clear();
-
- QHash<BufferId, Buffer *>::iterator bufferIter = _buffers.begin();
- while(bufferIter != _buffers.end()) {
- Buffer *buffer = bufferIter.value();
- disconnect(buffer, SIGNAL(destroyed()), this, 0);
- bufferIter = _buffers.erase(bufferIter);
- buffer->deleteLater();
- }
- Q_ASSERT(_buffers.isEmpty());
-
- _statusBuffers.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(networkModel(), SIGNAL(requestSetLastSeenMsg(BufferId, MsgId)), bufferSyncer(), SLOT(requestSetLastSeenMsg(BufferId, const MsgId &)));
+
+ SignalProxy *p = signalProxy();
+
+ if ((Client::coreFeatures() & Quassel::PasswordChange)) {
+ p->attachSignal(this, SIGNAL(clientChangePassword(QString)));
+ }
+
+ p->synchronize(bufferSyncer());
+
+ // create a new BufferViewManager
+ Q_ASSERT(!_bufferViewManager);
+ _bufferViewManager = new ClientBufferViewManager(p, this);
+ connect(_bufferViewManager, SIGNAL(initDone()), _bufferViewOverlay, SLOT(restore()));