+
+void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId)
+{
+ if (setLastSeenMsg(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)
+{
+ if (setMarkerLine(buffer, msgId))
+ dirtyMarkerLineBuffers << buffer;
+}
+
+
+void CoreBufferSyncer::storeDirtyIds()
+{
+ UserId userId = _coreSession->user();
+ MsgId msgId;
+ foreach(BufferId bufferId, dirtyLastSeenBuffers) {
+ msgId = lastSeenMsg(bufferId);
+ if (msgId.isValid())
+ Core::setBufferLastSeenMsg(userId, bufferId, msgId);
+ }
+
+ foreach(BufferId bufferId, dirtyMarkerLineBuffers) {
+ msgId = markerLine(bufferId);
+ if (msgId.isValid())
+ Core::setBufferMarkerLineMsg(userId, bufferId, msgId);
+ }
+
+ 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);
+ if (!bufferInfo.isValid()) {
+ qWarning() << "CoreBufferSyncer::removeBuffer(): invalid BufferId:" << bufferId << "for User:" << _coreSession->user();
+ return;
+ }
+
+ if (bufferInfo.type() == BufferInfo::StatusBuffer) {
+ qWarning() << "CoreBufferSyncer::removeBuffer(): Status Buffers cannot be removed!";
+ return;
+ }
+
+ if (bufferInfo.type() == BufferInfo::ChannelBuffer) {
+ CoreNetwork *net = _coreSession->network(bufferInfo.networkId());
+ if (!net) {
+ qWarning() << "CoreBufferSyncer::removeBuffer(): Received BufferInfo with unknown networkId!";
+ return;
+ }
+ IrcChannel *chan = net->ircChannel(bufferInfo.bufferName());
+ if (chan) {
+ qWarning() << "CoreBufferSyncer::removeBuffer(): Unable to remove Buffer for joined Channel:" << bufferInfo.bufferName();
+ return;
+ }
+ }
+ if (Core::removeBuffer(_coreSession->user(), bufferId))
+ BufferSyncer::removeBuffer(bufferId);