X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=ce90e42eaa9ff66b282109672130920321ad50d8;hp=fc4812a2a4322ecd582ab5dd57b1d252dbeacdb2;hb=16f22647e6890d3eb8c3e94f7a0700e12fa29e44;hpb=921e54680da16fcf2adb7a90506875aceb6633a4 diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index fc4812a2..ce90e42e 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -34,17 +34,21 @@ public: INIT_SYNCABLE_OBJECT(CoreBufferSyncer) CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent) - : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), parent), + : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), Core::bufferActivities(parent->user()), parent), _coreSession(parent), _purgeBuffers(false) { + connect(parent, SIGNAL(displayMsg(Message)), SLOT(addBufferActivity(Message))); } void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId) { - if (setLastSeenMsg(buffer, msgId)) + if (setLastSeenMsg(buffer, msgId)) { + int activity = Core::bufferActivity(buffer, msgId); + setBufferActivity(buffer, activity); dirtyLastSeenBuffers << buffer; + } } @@ -71,8 +75,13 @@ void CoreBufferSyncer::storeDirtyIds() Core::setBufferMarkerLineMsg(userId, bufferId, msgId); } + foreach(BufferId bufferId, dirtyActivities) { + Core::setBufferActivity(userId, bufferId, activity(bufferId)); + } + dirtyLastSeenBuffers.clear(); dirtyMarkerLineBuffers.clear(); + dirtyActivities.clear(); } @@ -129,13 +138,14 @@ void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId buff BufferInfo bufferInfo1 = Core::getBufferInfo(_coreSession->user(), bufferId1); BufferInfo bufferInfo2 = Core::getBufferInfo(_coreSession->user(), bufferId2); if (!bufferInfo1.isValid() || !bufferInfo2.isValid()) { - qWarning() << "CoreBufferSyncer::mergeBufferPermanently(): 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 || bufferInfo2.type() != BufferInfo::QueryBuffer) { - qWarning() << "CoreBufferSyncer::mergeBufferPermanently(): only QueryBuffers can be merged!" << bufferId1 << bufferId2; - 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; } if (Core::mergeBuffersPermanently(_coreSession->user(), bufferId1, bufferId2)) { @@ -180,3 +190,8 @@ void CoreBufferSyncer::purgeBufferIds() } } } + +void CoreBufferSyncer::setBufferActivity(BufferId buffer, int activity) { + BufferSyncer::setBufferActivity(buffer, activity); + dirtyActivities << buffer; +}