/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <stdlib.h>
QPointer<Client> Client::instanceptr = 0;
-Quassel::Features Client::_coreFeatures = 0;
/*** Initialization/destruction ***/
_backlogManager(new ClientBacklogManager(this)),
_bufferViewManager(0),
_bufferViewOverlay(new BufferViewOverlay(this)),
+ _coreInfo(nullptr),
_dccConfig(0),
_ircListHelper(new ClientIrcListHelper(this)),
_inputHandler(0),
_networkConfig(0),
_ignoreListManager(0),
+ _highlightRuleManager(0),
_transferManager(0),
_transferModel(new TransferModel(this)),
_messageModel(0),
p->attachSignal(this, SIGNAL(requestPasswordChange(PeerPtr,QString,QString,QString)), SIGNAL(changePassword(PeerPtr,QString,QString,QString)));
p->attachSlot(SIGNAL(passwordChanged(PeerPtr,bool)), this, SLOT(corePasswordChanged(PeerPtr,bool)));
+ p->attachSignal(this, SIGNAL(requestKickClient(int)), SIGNAL(kickClient(int)));
+ p->attachSlot(SIGNAL(disconnectFromCore()), this, SLOT(disconnectFromCore()));
+
//connect(mainUi(), SIGNAL(connectToCore(const QVariantMap &)), this, SLOT(connectToCore(const QVariantMap &)));
connect(mainUi(), SIGNAL(disconnectFromCore()), this, SLOT(disconnectFromCore()));
connect(this, SIGNAL(connected()), mainUi(), SLOT(connectedToCore()));
}
-void Client::setCoreFeatures(Quassel::Features features)
+bool Client::isCoreFeatureEnabled(Quassel::Feature feature)
{
- _coreFeatures = features;
+ return coreConnection()->peer() ? coreConnection()->peer()->hasFeature(feature) : false;
}
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(bufferActivityChange(BufferId, const Message::Types)), _networkModel, SLOT(bufferActivityChanged(BufferId, const Message::Types)));
+ 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 CoreInfo
+ Q_ASSERT(!_coreInfo);
+ _coreInfo = new CoreInfo(this);
+ p->synchronize(coreInfo());
+
// create a new BufferViewManager
Q_ASSERT(!_bufferViewManager);
_bufferViewManager = new ClientBufferViewManager(p, this);
_ignoreListManager = new ClientIgnoreListManager(this);
p->synchronize(ignoreListManager());
+ // create Core-Side HighlightRuleManager
+ Q_ASSERT(!_highlightRuleManager);
+ _highlightRuleManager = new HighlightRuleManager(this);
+ p->synchronize(highlightRuleManager());
+
+/* not ready yet
// create TransferManager and DccConfig if core supports them
Q_ASSERT(!_dccConfig);
Q_ASSERT(!_transferManager);
- if (coreFeatures() & Quassel::DccFileTransfer) {
+ 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()));
disconnect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(finishConnectionInitialization()));
requestInitialBacklog();
- bufferSyncer()->markActivitiesChanged();
+ if (isCoreFeatureEnabled(Quassel::Feature::BufferActivitySync)) {
+ bufferSyncer()->markActivitiesChanged();
+ bufferSyncer()->markHighlightCountsChanged();
+ }
}
void Client::setDisconnectedFromCore()
{
_connected = false;
- _coreFeatures = 0;
emit disconnected();
emit coreConnectionStateChanged(false);
_bufferSyncer = 0;
}
+ if (_coreInfo) {
+ _coreInfo->deleteLater();
+ _coreInfo = nullptr;
+ }
+
if (_bufferViewManager) {
_bufferViewManager->deleteLater();
_bufferViewManager = 0;
_ignoreListManager = 0;
}
+ if (_highlightRuleManager) {
+ _highlightRuleManager->deleteLater();
+ _highlightRuleManager = nullptr;
+ }
+
if (_transferManager) {
_transferModel->setManager(nullptr);
_transferManager->deleteLater();
}
+void Client::kickClient(int peerId)
+{
+ emit instance()->requestKickClient(peerId);
+}
+
+
void Client::corePasswordChanged(PeerPtr, bool success)
{
if (success)