Changed storage to store last seen dates of buffers, server encoding
authorMarcus Eggenberger <egs@quassel-irc.org>
Thu, 14 Feb 2008 22:23:50 +0000 (22:23 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Thu, 14 Feb 2008 22:23:50 +0000 (22:23 +0000)
and flag for unlimited connection retries

48 files changed:
src/core/SQL/SQLite/6/setup_999_version.sql [deleted file]
src/core/SQL/SQLite/7/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/6/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_backlog_for_network.sql [moved from src/core/SQL/SQLite/6/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/6/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_buffers_for_network.sql [moved from src/core/SQL/SQLite/6/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_ircservers_for_network.sql [moved from src/core/SQL/SQLite/6/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_network.sql [moved from src/core/SQL/SQLite/6/delete_network.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/6/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/7/delete_quasseluser.sql [moved from src/core/SQL/SQLite/6/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_buffer.sql [moved from src/core/SQL/SQLite/6/insert_buffer.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_message.sql [moved from src/core/SQL/SQLite/6/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_network.sql [moved from src/core/SQL/SQLite/6/insert_network.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_quasseluser.sql [moved from src/core/SQL/SQLite/6/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_sender.sql [moved from src/core/SQL/SQLite/6/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/7/insert_server.sql [moved from src/core/SQL/SQLite/6/insert_server.sql with 100% similarity]
src/core/SQL/SQLite/7/select_authuser.sql [moved from src/core/SQL/SQLite/6/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/7/select_bufferByName.sql [moved from src/core/SQL/SQLite/6/select_bufferByName.sql with 100% similarity]
src/core/SQL/SQLite/7/select_buffers.sql [moved from src/core/SQL/SQLite/6/select_buffers.sql with 100% similarity]
src/core/SQL/SQLite/7/select_lastMessage.sql [moved from src/core/SQL/SQLite/6/select_lastMessage.sql with 100% similarity]
src/core/SQL/SQLite/7/select_messageRange.sql [moved from src/core/SQL/SQLite/6/select_messageRange.sql with 100% similarity]
src/core/SQL/SQLite/7/select_messages.sql [moved from src/core/SQL/SQLite/6/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/7/select_messagesOffset.sql [moved from src/core/SQL/SQLite/6/select_messagesOffset.sql with 100% similarity]
src/core/SQL/SQLite/7/select_messagesSince.sql [moved from src/core/SQL/SQLite/6/select_messagesSince.sql with 100% similarity]
src/core/SQL/SQLite/7/select_messagesSinceOffset.sql [moved from src/core/SQL/SQLite/6/select_messagesSinceOffset.sql with 100% similarity]
src/core/SQL/SQLite/7/select_networkExists.sql [moved from src/core/SQL/SQLite/6/select_networkExists.sql with 100% similarity]
src/core/SQL/SQLite/7/select_networks_for_user.sql [moved from src/core/SQL/SQLite/6/select_networks_for_user.sql with 52% similarity]
src/core/SQL/SQLite/7/select_servers_for_network.sql [moved from src/core/SQL/SQLite/6/select_servers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/7/select_userid.sql [moved from src/core/SQL/SQLite/6/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/6/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_010_sender.sql [moved from src/core/SQL/SQLite/6/setup_010_sender.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_020_network.sql [moved from src/core/SQL/SQLite/6/setup_020_network.sql with 87% similarity]
src/core/SQL/SQLite/7/setup_030_buffer.sql [moved from src/core/SQL/SQLite/6/setup_030_buffer.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/6/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/6/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_060_backlog.sql [moved from src/core/SQL/SQLite/6/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/6/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_080_ircservers.sql [moved from src/core/SQL/SQLite/6/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/SQLite/7/setup_999_version.sql [new file with mode: 0644]
src/core/SQL/SQLite/7/update_network.sql [moved from src/core/SQL/SQLite/6/update_network.sql with 86% similarity]
src/core/SQL/SQLite/7/update_username.sql [moved from src/core/SQL/SQLite/6/update_username.sql with 100% similarity]
src/core/SQL/SQLite/7/update_userpassword.sql [moved from src/core/SQL/SQLite/6/update_userpassword.sql with 100% similarity]
src/core/core.cpp
src/core/core.h
src/core/sql.qrc
src/core/sqlitestorage.cpp
src/core/sqlitestorage.h
src/core/storage.h
version.inc

diff --git a/src/core/SQL/SQLite/6/setup_999_version.sql b/src/core/SQL/SQLite/6/setup_999_version.sql
deleted file mode 100644 (file)
index 8598df2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '6')
@@ -1,5 +1,5 @@
-SELECT networkid, networkname, identityid, usecustomencoding, encodingcodec, decodingcodec,
+SELECT networkid, networkname, identityid, servercodec, encodingcodec, decodingcodec,
        userandomserver, perform, useautoidentify, autoidentifyservice, autoidentifypassword,
-       useautoreconnect, autoreconnectinterval, autoreconnectretries, rejoinchannels
+       useautoreconnect, autoreconnectinterval, autoreconnectretries, unlimitedconnectretries, rejoinchannels
 FROM network
 WHERE userid = :userid
\ No newline at end of file
similarity index 87%
rename from src/core/SQL/SQLite/6/setup_020_network.sql
rename to src/core/SQL/SQLite/7/setup_020_network.sql
index 33a6fb8..1043576 100644 (file)
@@ -3,9 +3,9 @@ CREATE TABLE network (
        userid INTEGER NOT NULL,
        networkname TEXT NOT NULL,
        identityid INTEGER NOT NULL DEFAULT 1,
-       usecustomencoding INTEGER NOT NULL DEFAULT 0, -- BOOL
        encodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
        decodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
+       servercodec TEXT NOT NULL DEFAULT "",
        userandomserver INTEGER NOT NULL DEFAULT 0, -- BOOL
        perform TEXT,
        useautoidentify INTEGER NOT NULL DEFAULT 0, -- BOOL
@@ -14,6 +14,7 @@ CREATE TABLE network (
        useautoreconnect INTEGER NOT NULL DEFAULT 0, -- BOOL
        autoreconnectinterval INTEGER NOT NULL DEFAULT 0,
        autoreconnectretries INTEGER NOT NULL DEFAULT 0,
+       unlimitedconnectretries INTEGER NOT NULL DEFAULT 0, -- BOOL
        rejoinchannels INTEGER NOT NULL DEFAULT 0, -- BOOL
        UNIQUE (userid, networkname)
 )
diff --git a/src/core/SQL/SQLite/7/setup_999_version.sql b/src/core/SQL/SQLite/7/setup_999_version.sql
new file mode 100644 (file)
index 0000000..e7272de
--- /dev/null
@@ -0,0 +1 @@
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '7')
similarity index 86%
rename from src/core/SQL/SQLite/6/update_network.sql
rename to src/core/SQL/SQLite/7/update_network.sql
index 41c0da3..8d5a462 100644 (file)
@@ -1,7 +1,7 @@
 UPDATE network SET
 networkname = :networkname,
 identityid = :identityid,
-usecustomencoding = :usecustomencoding,
+servercodec = :servercodec,
 encodingcodec = :encodingcodec,
 decodingcodec = :decodingcodec,
 userandomserver = :userandomserver,
@@ -12,5 +12,6 @@ autoidentifypassword = :autoidentifypassword,
 useautoreconnect = :useautoreconnect,
 autoreconnectinterval = :autoreconnectinterval,
 autoreconnectretries = :autoreconnectretries,
+unlimitedconnectretries = :unlimitedconnectretries,
 rejoinchannels = :rejoinchannels
 WHERE networkid = :networkid
index 69f34c3..c06ca6d 100644 (file)
@@ -265,6 +265,16 @@ QList<BufferInfo> Core::requestBuffers(UserId user, QDateTime since) {
   return instance()->storage->requestBuffers(user, since);
 }
 
+void Core::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->setBufferLastSeen(user, bufferId, seenDate);
+}
+
+QHash<BufferId, QDateTime> Core::bufferLastSeenDates(UserId user) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->bufferLastSeenDates(user);
+}
+
 /*** Network Management ***/
 
 bool Core::startListening(uint port) {
index 67b3a55..0cba29e 100644 (file)
@@ -158,6 +158,20 @@ class Core : public QObject {
      */
     static QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime());
 
+    //! Update the LastSeenDate for a Buffer
+    /** 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
+     */
+    static void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate);
+
+    //! Get a Hash of all last seen dates. 
+    /** This Method is called when the Quassel Core is started to restore the lastSeenDates
+     * \param user      The Owner of the buffers
+     */
+    static QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user);
+
   public slots:
     //! Make storage data persistent
     /** \note This method is threadsafe.
index 023eaff..b2ce8a4 100644 (file)
     <file>./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_180_create_ircservers.sql</file>
     <file>./SQL/SQLite/5/upgrade_999_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/6/delete_backlog_by_uid.sql</file>
-    <file>./SQL/SQLite/6/delete_backlog_for_network.sql</file>
-    <file>./SQL/SQLite/6/delete_buffers_by_uid.sql</file>
-    <file>./SQL/SQLite/6/delete_buffers_for_network.sql</file>
-    <file>./SQL/SQLite/6/delete_ircservers_for_network.sql</file>
-    <file>./SQL/SQLite/6/delete_network.sql</file>
-    <file>./SQL/SQLite/6/delete_networks_by_uid.sql</file>
-    <file>./SQL/SQLite/6/delete_quasseluser.sql</file>
-    <file>./SQL/SQLite/6/insert_buffer.sql</file>
-    <file>./SQL/SQLite/6/insert_message.sql</file>
-    <file>./SQL/SQLite/6/insert_network.sql</file>
-    <file>./SQL/SQLite/6/insert_quasseluser.sql</file>
-    <file>./SQL/SQLite/6/insert_sender.sql</file>
-    <file>./SQL/SQLite/6/insert_server.sql</file>
-    <file>./SQL/SQLite/6/select_authuser.sql</file>
-    <file>./SQL/SQLite/6/select_bufferByName.sql</file>
-    <file>./SQL/SQLite/6/select_buffers.sql</file>
-    <file>./SQL/SQLite/6/select_lastMessage.sql</file>
-    <file>./SQL/SQLite/6/select_messageRange.sql</file>
-    <file>./SQL/SQLite/6/select_messages.sql</file>
-    <file>./SQL/SQLite/6/select_messagesOffset.sql</file>
-    <file>./SQL/SQLite/6/select_messagesSince.sql</file>
-    <file>./SQL/SQLite/6/select_messagesSinceOffset.sql</file>
-    <file>./SQL/SQLite/6/select_networkExists.sql</file>
-    <file>./SQL/SQLite/6/select_networks_for_user.sql</file>
-    <file>./SQL/SQLite/6/select_servers_for_network.sql</file>
-    <file>./SQL/SQLite/6/select_userid.sql</file>
-    <file>./SQL/SQLite/6/setup_000_quasseluser.sql</file>
-    <file>./SQL/SQLite/6/setup_010_sender.sql</file>
-    <file>./SQL/SQLite/6/setup_020_network.sql</file>
-    <file>./SQL/SQLite/6/setup_030_buffer.sql</file>
-    <file>./SQL/SQLite/6/setup_040_buffer_idx.sql</file>
-    <file>./SQL/SQLite/6/setup_050_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/6/setup_060_backlog.sql</file>
-    <file>./SQL/SQLite/6/setup_070_coreinfo.sql</file>
-    <file>./SQL/SQLite/6/setup_080_ircservers.sql</file>
-    <file>./SQL/SQLite/6/setup_999_version.sql</file>
-    <file>./SQL/SQLite/6/update_network.sql</file>
-    <file>./SQL/SQLite/6/update_username.sql</file>
-    <file>./SQL/SQLite/6/update_userpassword.sql</file>
     <file>./SQL/SQLite/6/upgrade_000_alter_buffertable.sql</file>
     <file>./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql</file>
     <file>./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql</file>
     <file>./SQL/SQLite/6/upgrade_150_update_msgtype.sql</file>
     <file>./SQL/SQLite/6/upgrade_160_update_msgtype.sql</file>
     <file>./SQL/SQLite/6/upgrade_999_version.sql</file>
+    <file>./SQL/SQLite/7/delete_backlog_by_uid.sql</file>
+    <file>./SQL/SQLite/7/delete_backlog_for_network.sql</file>
+    <file>./SQL/SQLite/7/delete_buffers_by_uid.sql</file>
+    <file>./SQL/SQLite/7/delete_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/7/delete_ircservers_for_network.sql</file>
+    <file>./SQL/SQLite/7/delete_network.sql</file>
+    <file>./SQL/SQLite/7/delete_networks_by_uid.sql</file>
+    <file>./SQL/SQLite/7/delete_quasseluser.sql</file>
+    <file>./SQL/SQLite/7/insert_buffer.sql</file>
+    <file>./SQL/SQLite/7/insert_message.sql</file>
+    <file>./SQL/SQLite/7/insert_network.sql</file>
+    <file>./SQL/SQLite/7/insert_quasseluser.sql</file>
+    <file>./SQL/SQLite/7/insert_sender.sql</file>
+    <file>./SQL/SQLite/7/insert_server.sql</file>
+    <file>./SQL/SQLite/7/select_authuser.sql</file>
+    <file>./SQL/SQLite/7/select_bufferByName.sql</file>
+    <file>./SQL/SQLite/7/select_buffers.sql</file>
+    <file>./SQL/SQLite/7/select_lastMessage.sql</file>
+    <file>./SQL/SQLite/7/select_messageRange.sql</file>
+    <file>./SQL/SQLite/7/select_messages.sql</file>
+    <file>./SQL/SQLite/7/select_messagesOffset.sql</file>
+    <file>./SQL/SQLite/7/select_messagesSince.sql</file>
+    <file>./SQL/SQLite/7/select_messagesSinceOffset.sql</file>
+    <file>./SQL/SQLite/7/select_networkExists.sql</file>
+    <file>./SQL/SQLite/7/select_networks_for_user.sql</file>
+    <file>./SQL/SQLite/7/select_servers_for_network.sql</file>
+    <file>./SQL/SQLite/7/select_userid.sql</file>
+    <file>./SQL/SQLite/7/setup_000_quasseluser.sql</file>
+    <file>./SQL/SQLite/7/setup_010_sender.sql</file>
+    <file>./SQL/SQLite/7/setup_020_network.sql</file>
+    <file>./SQL/SQLite/7/setup_030_buffer.sql</file>
+    <file>./SQL/SQLite/7/setup_040_buffer_idx.sql</file>
+    <file>./SQL/SQLite/7/setup_050_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/7/setup_060_backlog.sql</file>
+    <file>./SQL/SQLite/7/setup_070_coreinfo.sql</file>
+    <file>./SQL/SQLite/7/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/7/setup_999_version.sql</file>
+    <file>./SQL/SQLite/7/update_network.sql</file>
+    <file>./SQL/SQLite/7/update_username.sql</file>
+    <file>./SQL/SQLite/7/update_userpassword.sql</file>
+    <file>./SQL/SQLite/7/upgrade_000_rename_networktable.sql</file>
+    <file>./SQL/SQLite/7/upgrade_010_create_newnetworktable.sql</file>
+    <file>./SQL/SQLite/7/upgrade_020_copy_networktable.sql</file>
+    <file>./SQL/SQLite/7/upgrade_030_drop_oldnetworktable.sql</file>
+    <file>./SQL/SQLite/7/upgrade_040_alter_buffer_add_lastseen.sql</file>
+    <file>./SQL/SQLite/7/upgrade_999_version.sql</file>
 </qresource>
 </RCC>
index 6ca6c4e..507acee 100644 (file)
@@ -169,6 +169,7 @@ bool SqliteStorage::updateNetwork(UserId user, const NetworkInfo &info) {
   updateQuery.bindValue(":usecustomencoding", info.useCustomEncodings ? 1 : 0);
   updateQuery.bindValue(":encodingcodec", QString(info.codecForEncoding));
   updateQuery.bindValue(":decodingcodec", QString(info.codecForDecoding));
+  updateQuery.bindValue(":servercodec", QString(info.codecForServer));
   updateQuery.bindValue(":userandomserver", info.useRandomServer ? 1 : 0);
   updateQuery.bindValue(":perform", info.perform.join("\n"));
   updateQuery.bindValue(":useautoidentify", info.useAutoIdentify ? 1 : 0);
@@ -177,6 +178,7 @@ bool SqliteStorage::updateNetwork(UserId user, const NetworkInfo &info) {
   updateQuery.bindValue(":useautoreconnect", info.useAutoReconnect ? 1 : 0);
   updateQuery.bindValue(":autoreconnectinterval", info.autoReconnectInterval);
   updateQuery.bindValue(":autoreconnectretries", info.autoReconnectRetries);
+  updateQuery.bindValue(":unlimitedconnectretries", info.unlimitedReconnectRetries ? 1 : 0);
   updateQuery.bindValue(":rejoinchannels", info.rejoinChannels ? 1 : 0);
   updateQuery.bindValue(":networkid", info.networkId.toInt());
   updateQuery.exec();
@@ -285,7 +287,7 @@ QList<NetworkInfo> SqliteStorage::networks(UserId user) {
     net.networkId = networksQuery.value(0).toInt();
     net.networkName = networksQuery.value(1).toString();
     net.identity = networksQuery.value(2).toInt();
-    net.useCustomEncodings = networksQuery.value(3).toInt() == 1 ? true : false;
+    net.codecForServer = networksQuery.value(3).toString().toAscii();
     net.codecForEncoding = networksQuery.value(4).toString().toAscii();
     net.codecForDecoding = networksQuery.value(5).toString().toAscii();
     net.useRandomServer = networksQuery.value(6).toInt() == 1 ? true : false;
@@ -296,7 +298,8 @@ QList<NetworkInfo> SqliteStorage::networks(UserId user) {
     net.useAutoReconnect = networksQuery.value(11).toInt() == 1 ? true : false;
     net.autoReconnectInterval = networksQuery.value(12).toUInt();
     net.autoReconnectRetries = networksQuery.value(13).toInt();
-    net.rejoinChannels = networksQuery.value(14).toInt() == 1 ? true : false;
+    net.unlimitedReconnectRetries = networksQuery.value(14).toInt() == 1 ? true : false;
+    net.rejoinChannels = networksQuery.value(15).toInt() == 1 ? true : false;
 
     serversQuery.bindValue(":networkid", net.networkId.toInt());
     serversQuery.exec();
@@ -406,6 +409,30 @@ QList<BufferInfo> SqliteStorage::requestBuffers(UserId user, QDateTime since) {
   return bufferlist;
 }
 
+void SqliteStorage::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) {
+  QSqlQuery *query = cachedQuery("update_buffer_lastseen");
+  query->bindValue(":userid", user.toInt());
+  query->bindValue(":bufferid", bufferId.toInt());
+  query->bindValue(":lastseen", seenDate.toTime_t());
+  query->exec();
+  watchQuery(query);
+}
+
+QHash<BufferId, QDateTime> SqliteStorage::bufferLastSeenDates(UserId user) {
+  QHash<BufferId, QDateTime> lastSeenHash;
+  QSqlQuery query(logDb());
+  query.prepare(queryString("select_buffer_lastseen_dates"));
+  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());
+  }
+  return lastSeenHash;
+}
+
 MsgId SqliteStorage::logMessage(Message msg) {
   QSqlQuery *logMessageQuery = cachedQuery("insert_message");
   logMessageQuery->bindValue(":time", msg.timestamp().toTime_t());
index 253d3ea..b7db876 100644 (file)
@@ -60,6 +60,8 @@ public slots:
   /* Buffer handling */
   virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "");
   virtual QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime());
+  virtual void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate);
+  virtual QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user);
   
   /* Message handling */
   
index 84d7755..c7444b1 100644 (file)
@@ -170,6 +170,21 @@ class Storage : public QObject {
      */
     virtual QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime()) = 0;
 
+    //! Update the LastSeenDate for a Buffer
+    /** 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
+     */
+    virtual void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) = 0;
+
+    //! Get a Hash of all last seen dates. 
+    /** This Method is called when the Quassel Core is started to restore the lastSeenDates
+     * \param user      The Owner of the buffers
+     */
+    virtual QHash<BufferId, QDateTime> bufferLastSeenDates(UserId user) = 0;
+
+  
     /* Message handling */
 
     //! Store a Message in the backlog.
index 78be20c..2a71fa9 100644 (file)
@@ -4,8 +4,8 @@
 { using namespace Global;
 
   quasselVersion = "0.2.0-pre";
-  quasselDate = "2008-02-13";
-  quasselBuild = 519;
+  quasselDate = "2008-02-14";
+  quasselBuild = 520;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 519;