X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=d7b3b5c4cdedd57a7c0e0bf5a0e7922e5de0a7c0;hp=de2b521b9e547c421ba3e763a61192faeeaab747;hb=52209badc8e769e50aa3019b63689dda0e79e9d0;hpb=3e63cb8a6e83765069a45101b86ae9e21dcc57ad diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index de2b521b..d7b3b5c4 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 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,28 +20,38 @@ #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) + {} }; -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) +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, SIGNAL(displayMsg(Message)), SLOT(addCoreHighlight(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)) { int activity = Core::bufferActivity(buffer, msgId); @@ -54,35 +64,33 @@ void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId } } - -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) { + foreach (BufferId bufferId, dirtyHighlights) { Core::setHighlightCount(userId, bufferId, highlightCount(bufferId)); } @@ -92,7 +100,6 @@ void CoreBufferSyncer::storeDirtyIds() dirtyHighlights.clear(); } - void CoreBufferSyncer::removeBuffer(BufferId bufferId) { BufferInfo bufferInfo = Core::getBufferInfo(_coreSession->user(), bufferId); @@ -107,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; @@ -122,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); @@ -140,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)) { @@ -161,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; @@ -171,7 +177,6 @@ void CoreBufferSyncer::customEvent(QEvent *event) event->accept(); } - void CoreBufferSyncer::requestPurgeBufferIds() { if (_purgeBuffers) @@ -181,30 +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, int activity) { +void CoreBufferSyncer::setBufferActivity(BufferId buffer, int activity) +{ BufferSyncer::setBufferActivity(buffer, activity); dirtyActivities << buffer; } -void CoreBufferSyncer::setHighlightCount(BufferId buffer, int highlightCount) { +void CoreBufferSyncer::setHighlightCount(BufferId buffer, int highlightCount) +{ BufferSyncer::setHighlightCount(buffer, highlightCount); dirtyHighlights << buffer; }