1 /***************************************************************************
2 * Copyright (C) 2005-09 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "buffersyncer.h"
23 INIT_SYNCABLE_OBJECT(BufferSyncer)
24 BufferSyncer::BufferSyncer(QObject *parent)
25 : SyncableObject(parent)
29 BufferSyncer::BufferSyncer(const QHash<BufferId, MsgId> &lastSeenMsg, const QHash<BufferId, MsgId> &markerLines, QObject *parent)
30 : SyncableObject(parent),
31 _lastSeenMsg(lastSeenMsg),
32 _markerLines(markerLines)
36 MsgId BufferSyncer::lastSeenMsg(BufferId buffer) const {
37 return _lastSeenMsg.value(buffer, MsgId());
40 bool BufferSyncer::setLastSeenMsg(BufferId buffer, const MsgId &msgId) {
44 const MsgId oldLastSeenMsg = lastSeenMsg(buffer);
45 if(!oldLastSeenMsg.isValid() || oldLastSeenMsg < msgId) {
46 _lastSeenMsg[buffer] = msgId;
47 SYNC(ARG(buffer), ARG(msgId))
48 emit lastSeenMsgSet(buffer, msgId);
54 MsgId BufferSyncer::markerLine(BufferId buffer) const {
55 return _markerLines.value(buffer, MsgId());
58 bool BufferSyncer::setMarkerLine(BufferId buffer, const MsgId &msgId) {
62 if(_markerLines.value(buffer) == msgId)
65 _markerLines[buffer] = msgId;
66 SYNC(ARG(buffer), ARG(msgId))
67 emit markerLineSet(buffer, msgId);
71 QVariantList BufferSyncer::initLastSeenMsg() const {
73 QHash<BufferId, MsgId>::const_iterator iter = _lastSeenMsg.constBegin();
74 while(iter != _lastSeenMsg.constEnd()) {
75 list << QVariant::fromValue<BufferId>(iter.key())
76 << QVariant::fromValue<MsgId>(iter.value());
82 void BufferSyncer::initSetLastSeenMsg(const QVariantList &list) {
84 Q_ASSERT(list.count() % 2 == 0);
85 for(int i = 0; i < list.count(); i += 2) {
86 setLastSeenMsg(list.at(i).value<BufferId>(), list.at(i+1).value<MsgId>());
90 QVariantList BufferSyncer::initMarkerLines() const {
92 QHash<BufferId, MsgId>::const_iterator iter = _markerLines.constBegin();
93 while(iter != _markerLines.constEnd()) {
94 list << QVariant::fromValue<BufferId>(iter.key())
95 << QVariant::fromValue<MsgId>(iter.value());
101 void BufferSyncer::initSetMarkerLines(const QVariantList &list) {
102 _markerLines.clear();
103 Q_ASSERT(list.count() % 2 == 0);
104 for(int i = 0; i < list.count(); i += 2) {
105 setMarkerLine(list.at(i).value<BufferId>(), list.at(i+1).value<MsgId>());
109 void BufferSyncer::removeBuffer(BufferId buffer) {
110 if(_lastSeenMsg.contains(buffer))
111 _lastSeenMsg.remove(buffer);
112 if(_markerLines.contains(buffer))
113 _markerLines.remove(buffer);
115 emit bufferRemoved(buffer);
118 void BufferSyncer::mergeBuffersPermanently(BufferId buffer1, BufferId buffer2) {
119 if(_lastSeenMsg.contains(buffer2))
120 _lastSeenMsg.remove(buffer2);
121 if(_markerLines.contains(buffer2))
122 _markerLines.remove(buffer2);
123 SYNC(ARG(buffer1), ARG(buffer2))
124 emit buffersPermanentlyMerged(buffer1, buffer2);