X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=d7b3b5c4cdedd57a7c0e0bf5a0e7922e5de0a7c0;hp=caed62e24dba841ca4a66db97278bda869604bbe;hb=52209badc8e769e50aa3019b63689dda0e79e9d0;hpb=fd16e241d2fd1f33f4625b3255956f025a67273b diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index caed62e2..d7b3b5c4 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,70 +20,86 @@ #include "corebuffersyncer.h" +#include +#include +#include + #include "core.h" -#include "coresession.h" #include "corenetwork.h" +#include "coresession.h" #include "ircchannel.h" +#include "util.h" class PurgeEvent : public QEvent { public: - PurgeEvent() : QEvent(QEvent::User) {} + PurgeEvent() + : QEvent(QEvent::User) + {} }; - -INIT_SYNCABLE_OBJECT(CoreBufferSyncer) -CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent) - : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), Core::bufferActivities(parent->user()), parent), - _coreSession(parent), - _purgeBuffers(false) +CoreBufferSyncer::CoreBufferSyncer(CoreSession* parent) + : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), + Core::bufferMarkerLineMsgIds(parent->user()), + Core::bufferActivities(parent->user()), + Core::highlightCounts(parent->user()), + parent) + , _coreSession(parent) + , _purgeBuffers(false) { - connect(parent, SIGNAL(displayMsg(Message)), SLOT(addBufferActivity(Message))); + connect(parent, &CoreSession::displayMsg, this, &CoreBufferSyncer::addBufferActivity); + connect(parent, &CoreSession::displayMsg, this, &CoreBufferSyncer::addCoreHighlight); } - -void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId) +void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId& msgId) { if (setLastSeenMsg(buffer, msgId)) { - setBufferActivity(buffer, (int) Core::bufferActivity(buffer, msgId)); + int activity = Core::bufferActivity(buffer, msgId); + int highlightCount = Core::highlightCount(buffer, msgId); + + setBufferActivity(buffer, activity); + setHighlightCount(buffer, highlightCount); + dirtyLastSeenBuffers << buffer; } } - -void CoreBufferSyncer::requestSetMarkerLine(BufferId buffer, const MsgId &msgId) +void CoreBufferSyncer::requestSetMarkerLine(BufferId buffer, const MsgId& msgId) { if (setMarkerLine(buffer, msgId)) dirtyMarkerLineBuffers << buffer; } - void CoreBufferSyncer::storeDirtyIds() { UserId userId = _coreSession->user(); MsgId msgId; - foreach(BufferId bufferId, dirtyLastSeenBuffers) { + foreach (BufferId bufferId, dirtyLastSeenBuffers) { msgId = lastSeenMsg(bufferId); if (msgId.isValid()) Core::setBufferLastSeenMsg(userId, bufferId, msgId); } - foreach(BufferId bufferId, dirtyMarkerLineBuffers) { + foreach (BufferId bufferId, dirtyMarkerLineBuffers) { msgId = markerLine(bufferId); if (msgId.isValid()) Core::setBufferMarkerLineMsg(userId, bufferId, msgId); } - foreach(BufferId bufferId, dirtyActivities) { + foreach (BufferId bufferId, dirtyActivities) { Core::setBufferActivity(userId, bufferId, activity(bufferId)); } + foreach (BufferId bufferId, dirtyHighlights) { + Core::setHighlightCount(userId, bufferId, highlightCount(bufferId)); + } + dirtyLastSeenBuffers.clear(); dirtyMarkerLineBuffers.clear(); dirtyActivities.clear(); + dirtyHighlights.clear(); } - void CoreBufferSyncer::removeBuffer(BufferId bufferId) { BufferInfo bufferInfo = Core::getBufferInfo(_coreSession->user(), bufferId); @@ -98,12 +114,12 @@ void CoreBufferSyncer::removeBuffer(BufferId bufferId) } if (bufferInfo.type() == BufferInfo::ChannelBuffer) { - CoreNetwork *net = _coreSession->network(bufferInfo.networkId()); + CoreNetwork* net = _coreSession->network(bufferInfo.networkId()); if (!net) { qWarning() << "CoreBufferSyncer::removeBuffer(): Received BufferInfo with unknown networkId!"; return; } - IrcChannel *chan = net->ircChannel(bufferInfo.bufferName()); + IrcChannel* chan = net->ircChannel(bufferInfo.bufferName()); if (chan) { qWarning() << "CoreBufferSyncer::removeBuffer(): Unable to remove Buffer for joined Channel:" << bufferInfo.bufferName(); return; @@ -113,7 +129,6 @@ void CoreBufferSyncer::removeBuffer(BufferId bufferId) BufferSyncer::removeBuffer(bufferId); } - void CoreBufferSyncer::renameBuffer(BufferId bufferId, QString newName) { BufferInfo bufferInfo = Core::getBufferInfo(_coreSession->user(), bufferId); @@ -131,20 +146,21 @@ void CoreBufferSyncer::renameBuffer(BufferId bufferId, QString newName) BufferSyncer::renameBuffer(bufferId, newName); } - void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId bufferId2) { BufferInfo bufferInfo1 = Core::getBufferInfo(_coreSession->user(), bufferId1); BufferInfo bufferInfo2 = Core::getBufferInfo(_coreSession->user(), bufferId2); if (!bufferInfo1.isValid() || !bufferInfo2.isValid()) { - qWarning() << "CoreBufferSyncer::mergeBuffersPermanently(): invalid BufferIds:" << bufferId1 << bufferId2 << "for User:" << _coreSession->user(); + qWarning() << "CoreBufferSyncer::mergeBuffersPermanently(): invalid BufferIds:" << bufferId1 << bufferId2 + << "for User:" << _coreSession->user(); return; } if ((bufferInfo1.type() != BufferInfo::QueryBuffer && bufferInfo1.type() != BufferInfo::ChannelBuffer) || (bufferInfo2.type() != BufferInfo::QueryBuffer && bufferInfo2.type() != BufferInfo::ChannelBuffer)) { - qWarning() << "CoreBufferSyncer::mergeBuffersPermanently(): only QueryBuffers and/or ChannelBuffers can be merged!" << bufferId1 << bufferId2; - return; + qWarning() << "CoreBufferSyncer::mergeBuffersPermanently(): only QueryBuffers and/or ChannelBuffers can be merged!" << bufferId1 + << bufferId2; + return; } if (Core::mergeBuffersPermanently(_coreSession->user(), bufferId1, bufferId2)) { @@ -152,8 +168,7 @@ void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId buff } } - -void CoreBufferSyncer::customEvent(QEvent *event) +void CoreBufferSyncer::customEvent(QEvent* event) { if (event->type() != QEvent::User) return; @@ -162,7 +177,6 @@ void CoreBufferSyncer::customEvent(QEvent *event) event->accept(); } - void CoreBufferSyncer::requestPurgeBufferIds() { if (_purgeBuffers) @@ -172,25 +186,30 @@ void CoreBufferSyncer::requestPurgeBufferIds() QCoreApplication::postEvent(this, new PurgeEvent()); } - void CoreBufferSyncer::purgeBufferIds() { _purgeBuffers = false; - QList bufferInfos = Core::requestBuffers(_coreSession->user()); - QSet actualBuffers; - foreach(BufferInfo bufferInfo, bufferInfos) { - actualBuffers << bufferInfo.bufferId(); - } - - QSet storedIds = lastSeenBufferIds().toSet() + markerLineBufferIds().toSet(); - foreach(BufferId bufferId, storedIds) { - if (!actualBuffers.contains(bufferId)) { + auto bufferInfos = Core::requestBuffers(_coreSession->user()); + std::set actualBuffers; + std::transform(bufferInfos.cbegin(), bufferInfos.cend(), std::inserter(actualBuffers, actualBuffers.end()), + [](auto&& bufferInfo) { return bufferInfo.bufferId(); }); + + QSet storedIds = toQSet(lastSeenBufferIds()) + toQSet(markerLineBufferIds()); + foreach (BufferId bufferId, storedIds) { + if (actualBuffers.find(bufferId) == actualBuffers.end()) { BufferSyncer::removeBuffer(bufferId); } } } -void CoreBufferSyncer::setBufferActivity(BufferId buffer, const int &activity) { +void CoreBufferSyncer::setBufferActivity(BufferId buffer, int activity) +{ BufferSyncer::setBufferActivity(buffer, activity); dirtyActivities << buffer; } + +void CoreBufferSyncer::setHighlightCount(BufferId buffer, int highlightCount) +{ + BufferSyncer::setHighlightCount(buffer, highlightCount); + dirtyHighlights << buffer; +}