_isVisible = visible;
setActivityLevel(NoActivity);
if(!layoutedMsgs.count()) return;
- setLastSeen(layoutedMsgs.last()->timestamp());
+ setLastSeenMsg(layoutedMsgs.last()->msgId());
}
-void Buffer::setLastSeen(const QDateTime &seen) { // qDebug() << "want to set lastSeen:" << bufferInfo() << seen << lastSeen();
- if(!lastSeen().isValid() || seen.isValid() && seen > lastSeen()) { //qDebug() << "setting:" << bufferInfo().bufferName() << seen;
- _lastSeen = seen;
- Client::setBufferLastSeen(bufferInfo().bufferId(), seen);
+void Buffer::setLastSeenMsg(const MsgId &msgId) {
+ // qDebug() << "want to set lastSeen:" << bufferInfo() << seen << lastSeen();
+ const MsgId oldLastSeen = lastSeenMsg();
+ if(!oldLastSeen.isValid() || msgId.isValid() && msgId > oldLastSeen) {
+ //qDebug() << "setting:" << bufferInfo().bufferName() << seen;
+ _lastSeenMsg = msgId;
+ Client::setBufferLastSeenMsg(bufferInfo().bufferId(), msgId);
//qDebug() << "setting lastSeen:" << bufferInfo() << lastSeen();
setActivityLevel(NoActivity);
}
if(msg.flags() & Message::Self) // don't update activity for our own messages
return;
- if(lastSeen().isValid() && lastSeen() >= msg.timestamp())
+ if(lastSeenMsg().isValid() && lastSeenMsg() >= msg.msgId())
return;
ActivityLevel level = activityLevel() | OtherActivity;
BufferInfo bufferInfo() const;
QList<AbstractUiMsg *> contents() const;
inline bool isVisible() const { return _isVisible; }
- inline QDateTime lastSeen() const { return _lastSeen; }
+ inline MsgId lastSeenMsg() const { return _lastSeenMsg; }
inline ActivityLevel activityLevel() const { return _activityLevel; }
signals:
void prependMsg(const Message &);
bool layoutMsg();
void setVisible(bool visible);
- void setLastSeen(const QDateTime &);
+ void setLastSeenMsg(const MsgId &msgId);
void setActivityLevel(ActivityLevel level);
private:
BufferInfo _bufferInfo;
bool _isVisible;
- QDateTime _lastSeen;
+ MsgId _lastSeenMsg;
ActivityLevel _activityLevel;
QList<Message> layoutQueue;
// create buffersyncer
Q_ASSERT(!_bufferSyncer);
_bufferSyncer = new BufferSyncer(this);
- connect(bufferSyncer(), SIGNAL(lastSeenSet(BufferId, const QDateTime &)), this, SLOT(updateLastSeen(BufferId, const QDateTime &)));
+ connect(bufferSyncer(), SIGNAL(lastSeenMsgSet(BufferId, MsgId)), this, SLOT(updateLastSeenMsg(BufferId, MsgId)));
connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId)));
connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString)));
signalProxy()->synchronize(bufferSyncer());
}
}
-void Client::updateLastSeen(BufferId id, const QDateTime &lastSeen) {
+void Client::updateLastSeenMsg(BufferId id, const MsgId &msgId) {
Buffer *b = buffer(id);
if(!b) {
qWarning() << "Client::updateLastSeen(): Unknown buffer" << id;
return;
}
- b->setLastSeen(lastSeen);
+ b->setLastSeenMsg(msgId);
}
-void Client::setBufferLastSeen(BufferId id, const QDateTime &lastSeen) {
- if(!bufferSyncer()) return;
- bufferSyncer()->requestSetLastSeen(id, lastSeen);
+void Client::setBufferLastSeenMsg(BufferId id, const MsgId &msgId) {
+ if(!bufferSyncer())
+ return;
+ bufferSyncer()->requestSetLastSeenMsg(id, msgId);
}
void Client::removeBuffer(BufferId id) {
enum ClientMode { LocalCore, RemoteCore };
static void checkForHighlight(Message &msg);
- static void setBufferLastSeen(BufferId id, const QDateTime &seen); // this is synced to core and other clients
+ static void setBufferLastSeenMsg(BufferId id, const MsgId &msgId); // this is synced to core and other clients
static void removeBuffer(BufferId id);
signals:
void recvStatusMsg(QString network, QString message);
void recvBacklogData(BufferInfo, QVariantList, bool);
void updateBufferInfo(BufferInfo);
- void updateLastSeen(BufferId id, const QDateTime &lastSeen);
+ void updateLastSeenMsg(BufferId id, const MsgId &msgId);
void layoutMsg();
#include "buffersyncer.h"
-BufferSyncer::BufferSyncer(QObject *parent) : SyncableObject(parent) {
-
-
+BufferSyncer::BufferSyncer(QObject *parent)
+ : SyncableObject(parent)
+{
}
-QDateTime BufferSyncer::lastSeen(BufferId buffer) const {
- if(_lastSeen.contains(buffer)) return _lastSeen[buffer];
- return QDateTime();
+MsgId BufferSyncer::lastSeenMsg(BufferId buffer) const {
+ if(_lastSeenMsg.contains(buffer))
+ return _lastSeenMsg[buffer];
+ return MsgId();
}
-bool BufferSyncer::setLastSeen(BufferId buffer, const QDateTime &time) {
- if(!time.isValid()) return false;
- if(!lastSeen(buffer).isValid() || lastSeen(buffer) < time) {
- _lastSeen[buffer] = time;
- emit lastSeenSet(buffer, time);
+bool BufferSyncer::setLastSeenMsg(BufferId buffer, const MsgId &msgId) {
+ if(!msgId.isValid())
+ return false;
+
+ const MsgId oldLastSeenMsg = lastSeenMsg(buffer);
+ if(!oldLastSeenMsg.isValid() || oldLastSeenMsg < msgId) {
+ _lastSeenMsg[buffer] = msgId;
+ emit lastSeenMsgSet(buffer, msgId);
return true;
}
return false;
}
-QVariantList BufferSyncer::initLastSeen() const {
+QVariantList BufferSyncer::initLastSeenMsg() const {
QVariantList list;
- foreach(BufferId id, _lastSeen.keys()) {
- list << QVariant::fromValue<BufferId>(id) << _lastSeen[id];
+ QHash<BufferId, MsgId>::const_iterator iter = _lastSeenMsg.constBegin();
+ while(iter != _lastSeenMsg.constEnd()) {
+ list << QVariant::fromValue<BufferId>(iter.key())
+ << QVariant::fromValue<MsgId>(iter.value());
+ iter++;
}
return list;
}
-void BufferSyncer::initSetLastSeen(const QVariantList &list) {
- _lastSeen.clear();
+void BufferSyncer::initSetLastSeenMsg(const QVariantList &list) {
+ _lastSeenMsg.clear();
Q_ASSERT(list.count() % 2 == 0);
for(int i = 0; i < list.count(); i += 2) {
- setLastSeen(list[i].value<BufferId>(), list[i+1].toDateTime());
+ setLastSeenMsg(list[i].value<BufferId>(), list[i+1].value<MsgId>());
}
}
-void BufferSyncer::requestSetLastSeen(BufferId buffer, const QDateTime &time) {
- if(setLastSeen(buffer, time)) emit setLastSeenRequested(buffer, time);
+void BufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId) {
+ if(setLastSeenMsg(buffer, msgId))
+ emit setLastSeenMsgRequested(buffer, msgId);
}
}
void BufferSyncer::removeBuffer(BufferId buffer) {
- if(_lastSeen.contains(buffer))
- _lastSeen.remove(buffer);
+ if(_lastSeenMsg.contains(buffer))
+ _lastSeenMsg.remove(buffer);
emit bufferRemoved(buffer);
}
#ifndef BUFFERSYNCER_H_
#define BUFFERSYNCER_H_
-#include <QDateTime>
-
#include "syncableobject.h"
#include "types.h"
class BufferSyncer : public SyncableObject {
Q_OBJECT
- public:
- explicit BufferSyncer(QObject *parent);
+public:
+ explicit BufferSyncer(QObject *parent);
+
+ MsgId lastSeenMsg(BufferId buffer) const;
- QDateTime lastSeen(BufferId buffer) const;
+public slots:
+ QVariantList initLastSeenMsg() const;
+ void initSetLastSeenMsg(const QVariantList &);
- public slots:
- QVariantList initLastSeen() const;
- void initSetLastSeen(const QVariantList &);
+ void requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId);
+ void requestRemoveBuffer(BufferId buffer);
+ void removeBuffer(BufferId buffer);
+ void renameBuffer(BufferId buffer, QString newName);
- void requestSetLastSeen(BufferId buffer, const QDateTime &time);
- void requestRemoveBuffer(BufferId buffer);
- void removeBuffer(BufferId buffer);
- void renameBuffer(BufferId buffer, QString newName);
+signals:
+ void lastSeenMsgSet(BufferId buffer, const MsgId &msgId);
+ void setLastSeenMsgRequested(BufferId buffer, const MsgId &msgId);
+ void removeBufferRequested(BufferId buffer);
+ void bufferRemoved(BufferId buffer);
+ void bufferRenamed(BufferId buffer, QString newName);
- signals:
- void lastSeenSet(BufferId buffer, const QDateTime &time);
- void setLastSeenRequested(BufferId buffer, const QDateTime &time);
- void removeBufferRequested(BufferId buffer);
- void bufferRemoved(BufferId buffer);
- void bufferRenamed(BufferId buffer, QString newName);
+private slots:
+ bool setLastSeenMsg(BufferId buffer, const MsgId &msgId);
- private slots:
- bool setLastSeen(BufferId buffer, const QDateTime &time);
+private:
+ QHash<BufferId, MsgId> _lastSeenMsg;
- private:
- QMap<BufferId, QDateTime> _lastSeen;
};
#endif
-SELECT bufferid, lastseen
+SELECT bufferid, lastseenmsgid
FROM buffer
WHERE userid = :userid
buffername TEXT NOT NULL,
buffercname TEXT NOT NULL, -- CANONICAL BUFFER NAME (lowercase version)
buffertype INTEGER NOT NULL DEFAULT 0,
- lastseen INTEGER NOT NULL DEFAULT 0,
+ lastseenmsgid INTEGER NOT NULL DEFAULT 0,
key TEXT,
joined INTEGER NOT NULL DEFAULT 0 -- BOOL
)
--- /dev/null
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', 10)
UPDATE buffer
-SET lastseen = :lastseen
+SET lastseenmsgid = :lastseenmsgid
WHERE userid = :userid AND bufferid = :bufferid
--- /dev/null
+UPDATE buffer
+SET lastseen = (SELECT messageid FROM backlog WHERE backlog.bufferid = bufferid AND backlog.time = lastseen LIMIT 1)
+WHERE lastseen != 0
--- /dev/null
+ALTER TABLE buffer RENAME TO buffer_old
--- /dev/null
+CREATE TABLE buffer (
+ bufferid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ userid INTEGER NOT NULL,
+ groupid INTEGER,
+ networkid INTEGER NOT NULL,
+ buffername TEXT NOT NULL,
+ buffercname TEXT NOT NULL, -- CANONICAL BUFFER NAME (lowercase version)
+ buffertype INTEGER NOT NULL DEFAULT 0,
+ lastseenmsgid INTEGER NOT NULL DEFAULT 0,
+ key TEXT,
+ joined INTEGER NOT NULL DEFAULT 0 -- BOOL
+)
--- /dev/null
+INSERT INTO buffer (bufferid, userid, groupid, networkid, buffername, buffercname, buffertype, lastseenmsgid, key, joined)
+SELECT bufferid, userid, groupid, networkid, buffername, buffercname, buffertype, lastseen, key, joined FROM buffer_old
--- /dev/null
+DROP TABLE buffer_old
--- /dev/null
+UPDATE coreinfo
+SET value = 10
+WHERE key = 'schemaversion'
+++ /dev/null
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '9')
return instance()->storage->renameBuffer(user, networkId, newName, oldName);
}
-void Core::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) {
+void Core::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {
QMutexLocker locker(&mutex);
- return instance()->storage->setBufferLastSeen(user, bufferId, seenDate);
+ return instance()->storage->setBufferLastSeenMsg(user, bufferId, msgId);
}
-QHash<BufferId, QDateTime> Core::bufferLastSeenDates(UserId user) {
+QHash<BufferId, MsgId> Core::bufferLastSeenMsgIds(UserId user) {
QMutexLocker locker(&mutex);
- return instance()->storage->bufferLastSeenDates(user);
+ return instance()->storage->bufferLastSeenMsgIds(user);
}
/*** Network Management ***/
*
* \param user The Owner of that Buffer
* \param bufferId The buffer id
- * \param seenDate Time the Buffer has been visited the last time
+ * \param MsgId The Message id of the message that has been just seen
*/
- static void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate);
+ static void setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId);
- //! Get a Hash of all last seen dates.
- /** This Method is called when the Quassel Core is started to restore the lastSeenDates
+ //! Get a Hash of all last seen message ids
+ /** This Method is called when the Quassel Core is started to restore the lastSeenMsgIds
* \note This method is threadsafe.
*
* \param user The Owner of the buffers
*/
- static QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user);
+ static QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user);
public slots:
//! Make storage data persistent
initScriptEngine();
// init BufferSyncer
- QHash<BufferId, QDateTime> lastSeenHash = Core::bufferLastSeenDates(user());
- foreach(BufferId id, lastSeenHash.keys()) _bufferSyncer->requestSetLastSeen(id, lastSeenHash[id]);
- connect(_bufferSyncer, SIGNAL(lastSeenSet(BufferId, const QDateTime &)), this, SLOT(storeBufferLastSeen(BufferId, const QDateTime &)));
+ QHash<BufferId, MsgId> lastSeenHash = Core::bufferLastSeenMsgIds(user());
+ foreach(BufferId id, lastSeenHash.keys())
+ _bufferSyncer->requestSetLastSeenMsg(id, lastSeenHash[id]);
+
+ connect(_bufferSyncer, SIGNAL(lastSeenMsgSet(BufferId, MsgId)), this, SLOT(storeBufferLastSeenMsg(BufferId, MsgId)));
connect(_bufferSyncer, SIGNAL(removeBufferRequested(BufferId)), this, SLOT(removeBufferRequested(BufferId)));
connect(this, SIGNAL(bufferRemoved(BufferId)), _bufferSyncer, SLOT(removeBuffer(BufferId)));
connect(this, SIGNAL(bufferRenamed(BufferId, QString)), _bufferSyncer, SLOT(renameBuffer(BufferId, QString)));
return v;
}
-void CoreSession::storeBufferLastSeen(BufferId buffer, const QDateTime &lastSeen) {
- Core::setBufferLastSeen(user(), buffer, lastSeen);
+void CoreSession::storeBufferLastSeenMsg(BufferId buffer, const MsgId &msgId) {
+ Core::setBufferLastSeenMsg(user(), buffer, msgId);
}
void CoreSession::sendBacklog(BufferInfo id, QVariant v1, QVariant v2) {
*/
void updateBufferInfo(UserId user, const BufferInfo &bufferInfo);
- void storeBufferLastSeen(BufferId buffer, const QDateTime &lastSeen);
+ void storeBufferLastSeenMsg(BufferId buffer, const MsgId &msgId);
void scriptRequest(QString script);
<file>./SQL/SQLite/1/upgrade_000_drop_coreinfo.sql</file>
<file>./SQL/SQLite/1/upgrade_010_create_coreinfo.sql</file>
<file>./SQL/SQLite/1/upgrade_020_update_schemaversion.sql</file>
+ <file>./SQL/SQLite/10/delete_backlog_by_uid.sql</file>
+ <file>./SQL/SQLite/10/delete_backlog_for_buffer.sql</file>
+ <file>./SQL/SQLite/10/delete_backlog_for_network.sql</file>
+ <file>./SQL/SQLite/10/delete_buffer_for_bufferid.sql</file>
+ <file>./SQL/SQLite/10/delete_buffers_by_uid.sql</file>
+ <file>./SQL/SQLite/10/delete_buffers_for_network.sql</file>
+ <file>./SQL/SQLite/10/delete_ircservers_for_network.sql</file>
+ <file>./SQL/SQLite/10/delete_network.sql</file>
+ <file>./SQL/SQLite/10/delete_networks_by_uid.sql</file>
+ <file>./SQL/SQLite/10/delete_quasseluser.sql</file>
+ <file>./SQL/SQLite/10/insert_buffer.sql</file>
+ <file>./SQL/SQLite/10/insert_message.sql</file>
+ <file>./SQL/SQLite/10/insert_network.sql</file>
+ <file>./SQL/SQLite/10/insert_quasseluser.sql</file>
+ <file>./SQL/SQLite/10/insert_sender.sql</file>
+ <file>./SQL/SQLite/10/insert_server.sql</file>
+ <file>./SQL/SQLite/10/select_authuser.sql</file>
+ <file>./SQL/SQLite/10/select_buffer_by_id.sql</file>
+ <file>./SQL/SQLite/10/select_buffer_lastseen_messages.sql</file>
+ <file>./SQL/SQLite/10/select_bufferByName.sql</file>
+ <file>./SQL/SQLite/10/select_bufferExists.sql</file>
+ <file>./SQL/SQLite/10/select_buffers.sql</file>
+ <file>./SQL/SQLite/10/select_connected_networks.sql</file>
+ <file>./SQL/SQLite/10/select_messageRange.sql</file>
+ <file>./SQL/SQLite/10/select_messages.sql</file>
+ <file>./SQL/SQLite/10/select_messagesOffset.sql</file>
+ <file>./SQL/SQLite/10/select_messagesSince.sql</file>
+ <file>./SQL/SQLite/10/select_messagesSinceOffset.sql</file>
+ <file>./SQL/SQLite/10/select_networkExists.sql</file>
+ <file>./SQL/SQLite/10/select_networks_for_user.sql</file>
+ <file>./SQL/SQLite/10/select_persistent_channels.sql</file>
+ <file>./SQL/SQLite/10/select_servers_for_network.sql</file>
+ <file>./SQL/SQLite/10/select_userid.sql</file>
+ <file>./SQL/SQLite/10/setup_000_quasseluser.sql</file>
+ <file>./SQL/SQLite/10/setup_010_sender.sql</file>
+ <file>./SQL/SQLite/10/setup_020_network.sql</file>
+ <file>./SQL/SQLite/10/setup_030_buffer.sql</file>
+ <file>./SQL/SQLite/10/setup_040_buffer_idx.sql</file>
+ <file>./SQL/SQLite/10/setup_050_buffer_cname_idx.sql</file>
+ <file>./SQL/SQLite/10/setup_060_backlog.sql</file>
+ <file>./SQL/SQLite/10/setup_070_coreinfo.sql</file>
+ <file>./SQL/SQLite/10/setup_080_ircservers.sql</file>
+ <file>./SQL/SQLite/10/setup_090_create_backlog_idx.sql</file>
+ <file>./SQL/SQLite/10/setup_100_create_backlog_idx2.sql</file>
+ <file>./SQL/SQLite/10/setup_110_create_buffer_idx.sql</file>
+ <file>./SQL/SQLite/10/setup_999_version.sql</file>
+ <file>./SQL/SQLite/10/update_buffer_lastseen.sql</file>
+ <file>./SQL/SQLite/10/update_buffer_name.sql</file>
+ <file>./SQL/SQLite/10/update_buffer_persistent_channel.sql</file>
+ <file>./SQL/SQLite/10/update_buffer_set_channel_key.sql</file>
+ <file>./SQL/SQLite/10/update_network.sql</file>
+ <file>./SQL/SQLite/10/update_network_connected.sql</file>
+ <file>./SQL/SQLite/10/update_username.sql</file>
+ <file>./SQL/SQLite/10/update_userpassword.sql</file>
+ <file>./SQL/SQLite/10/upgrade_000_switch_to_msgid.sql</file>
+ <file>./SQL/SQLite/10/upgrade_010_rename_buffer_table.sql</file>
+ <file>./SQL/SQLite/10/upgrade_020_create_buffer_table.sql</file>
+ <file>./SQL/SQLite/10/upgrade_030_copy_buffer_table.sql</file>
+ <file>./SQL/SQLite/10/upgrade_040_drop_buffer_old_table.sql</file>
+ <file>./SQL/SQLite/10/upgrade_999_version.sql</file>
<file>./SQL/SQLite/2/upgrade_000_drop_buffergroup.sql</file>
<file>./SQL/SQLite/2/upgrade_010_update_schemaversion.sql</file>
<file>./SQL/SQLite/3/upgrade_000_update_backlog_flags.sql</file>
<file>./SQL/SQLite/8/upgrade_020_alter_buffer_add_joined.sql</file>
<file>./SQL/SQLite/8/upgrade_030_update_buffer_set_joined_for_channels.sql</file>
<file>./SQL/SQLite/8/upgrade_999_version.sql</file>
- <file>./SQL/SQLite/9/delete_backlog_by_uid.sql</file>
- <file>./SQL/SQLite/9/delete_backlog_for_buffer.sql</file>
- <file>./SQL/SQLite/9/delete_backlog_for_network.sql</file>
- <file>./SQL/SQLite/9/delete_buffer_for_bufferid.sql</file>
- <file>./SQL/SQLite/9/delete_buffers_by_uid.sql</file>
- <file>./SQL/SQLite/9/delete_buffers_for_network.sql</file>
- <file>./SQL/SQLite/9/delete_ircservers_for_network.sql</file>
- <file>./SQL/SQLite/9/delete_network.sql</file>
- <file>./SQL/SQLite/9/delete_networks_by_uid.sql</file>
- <file>./SQL/SQLite/9/delete_quasseluser.sql</file>
- <file>./SQL/SQLite/9/insert_buffer.sql</file>
- <file>./SQL/SQLite/9/insert_message.sql</file>
- <file>./SQL/SQLite/9/insert_network.sql</file>
- <file>./SQL/SQLite/9/insert_quasseluser.sql</file>
- <file>./SQL/SQLite/9/insert_sender.sql</file>
- <file>./SQL/SQLite/9/insert_server.sql</file>
- <file>./SQL/SQLite/9/select_authuser.sql</file>
- <file>./SQL/SQLite/9/select_buffer_by_id.sql</file>
- <file>./SQL/SQLite/9/select_buffer_lastseen_dates.sql</file>
- <file>./SQL/SQLite/9/select_bufferByName.sql</file>
- <file>./SQL/SQLite/9/select_bufferExists.sql</file>
- <file>./SQL/SQLite/9/select_buffers.sql</file>
- <file>./SQL/SQLite/9/select_connected_networks.sql</file>
- <file>./SQL/SQLite/9/select_messageRange.sql</file>
- <file>./SQL/SQLite/9/select_messages.sql</file>
- <file>./SQL/SQLite/9/select_messagesOffset.sql</file>
- <file>./SQL/SQLite/9/select_messagesSince.sql</file>
- <file>./SQL/SQLite/9/select_messagesSinceOffset.sql</file>
- <file>./SQL/SQLite/9/select_networkExists.sql</file>
- <file>./SQL/SQLite/9/select_networks_for_user.sql</file>
- <file>./SQL/SQLite/9/select_persistent_channels.sql</file>
- <file>./SQL/SQLite/9/select_servers_for_network.sql</file>
- <file>./SQL/SQLite/9/select_userid.sql</file>
- <file>./SQL/SQLite/9/setup_000_quasseluser.sql</file>
- <file>./SQL/SQLite/9/setup_010_sender.sql</file>
- <file>./SQL/SQLite/9/setup_020_network.sql</file>
- <file>./SQL/SQLite/9/setup_030_buffer.sql</file>
- <file>./SQL/SQLite/9/setup_040_buffer_idx.sql</file>
- <file>./SQL/SQLite/9/setup_050_buffer_cname_idx.sql</file>
- <file>./SQL/SQLite/9/setup_060_backlog.sql</file>
- <file>./SQL/SQLite/9/setup_070_coreinfo.sql</file>
- <file>./SQL/SQLite/9/setup_080_ircservers.sql</file>
- <file>./SQL/SQLite/9/setup_090_create_backlog_idx.sql</file>
- <file>./SQL/SQLite/9/setup_100_create_backlog_idx2.sql</file>
- <file>./SQL/SQLite/9/setup_110_create_buffer_idx.sql</file>
- <file>./SQL/SQLite/9/setup_999_version.sql</file>
- <file>./SQL/SQLite/9/update_buffer_lastseen.sql</file>
- <file>./SQL/SQLite/9/update_buffer_name.sql</file>
- <file>./SQL/SQLite/9/update_buffer_persistent_channel.sql</file>
- <file>./SQL/SQLite/9/update_buffer_set_channel_key.sql</file>
- <file>./SQL/SQLite/9/update_network.sql</file>
- <file>./SQL/SQLite/9/update_network_connected.sql</file>
- <file>./SQL/SQLite/9/update_username.sql</file>
- <file>./SQL/SQLite/9/update_userpassword.sql</file>
<file>./SQL/SQLite/9/upgrade_000_create_backlog_idx.sql</file>
<file>./SQL/SQLite/9/upgrade_010_create_backlog_idx2.sql</file>
<file>./SQL/SQLite/9/upgrade_020_create_buffer_idx.sql</file>
return BufferId();
}
-void SqliteStorage::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) {
+void SqliteStorage::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {
QSqlQuery *query = cachedQuery("update_buffer_lastseen");
query->bindValue(":userid", user.toInt());
query->bindValue(":bufferid", bufferId.toInt());
- query->bindValue(":lastseen", seenDate.toTime_t());
+ query->bindValue(":lastseenmsgid", msgId.toInt());
query->exec();
watchQuery(query);
}
-QHash<BufferId, QDateTime> SqliteStorage::bufferLastSeenDates(UserId user) {
- QHash<BufferId, QDateTime> lastSeenHash;
+QHash<BufferId, MsgId> SqliteStorage::bufferLastSeenMsgIds(UserId user) {
+ QHash<BufferId, MsgId> lastSeenHash;
QSqlQuery query(logDb());
- query.prepare(queryString("select_buffer_lastseen_dates"));
+ query.prepare(queryString("select_buffer_lastseen_messages"));
query.bindValue(":userid", user.toInt());
query.exec();
if(!watchQuery(&query))
return lastSeenHash;
while(query.next()) {
- lastSeenHash[query.value(0).toInt()] = QDateTime::fromTime_t(query.value(1).toUInt());
+ lastSeenHash[query.value(0).toInt()] = query.value(1).toInt();
}
return lastSeenHash;
}
virtual QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime());
virtual bool removeBuffer(const UserId &user, const BufferId &bufferId);
virtual BufferId renameBuffer(const UserId &user, const NetworkId &networkId, const QString &newName, const QString &oldName);
- virtual void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate);
- virtual QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user);
+ virtual void setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId);
+ virtual QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user);
/* Message handling */
/** This Method is used to make the LastSeenDate of a Buffer persistent
* \param user The Owner of that Buffer
* \param bufferId The buffer id
- * \param seenDate Time the Buffer has been visited the last time
+ * \param MsgId The Message id of the message that has been just seen
*/
- virtual void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) = 0;
+ virtual void setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) = 0;
- //! Get a Hash of all last seen dates.
- /** This Method is called when the Quassel Core is started to restore the lastSeenDates
+ //! Get a Hash of all last seen message ids
+ /** This Method is called when the Quassel Core is started to restore the lastSeenMsgIds
* \param user The Owner of the buffers
*/
- virtual QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user) = 0;
+ virtual QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user) = 0;
/* Message handling */
{ using namespace Global;
quasselVersion = "0.2.0-alpha3-pre";
- quasselDate = "2008-03-06";
- quasselBuild = 617;
+ quasselDate = "2008-03-09";
+ quasselBuild = 620;
//! Minimum client build number the core needs
- clientBuildNeeded = 613;
+ clientBuildNeeded = 620;
clientVersionNeeded = quasselVersion;
//! Minimum core build number the client needs
- coreBuildNeeded = 613;
+ coreBuildNeeded = 620;
coreVersionNeeded = quasselVersion;
}