moved corestate (connected networks and joined channels) to the storage backend
authorMarcus Eggenberger <egs@quassel-irc.org>
Thu, 21 Feb 2008 23:00:50 +0000 (23:00 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Thu, 21 Feb 2008 23:00:50 +0000 (23:00 +0000)
55 files changed:
src/core/SQL/SQLite/7/setup_999_version.sql [deleted file]
src/core/SQL/SQLite/8/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/7/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_backlog_for_buffer.sql [moved from src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_backlog_for_network.sql [moved from src/core/SQL/SQLite/7/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_buffer_for_bufferid.sql [moved from src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/7/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_buffers_for_network.sql [moved from src/core/SQL/SQLite/7/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_ircservers_for_network.sql [moved from src/core/SQL/SQLite/7/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_network.sql [moved from src/core/SQL/SQLite/7/delete_network.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/7/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/8/delete_quasseluser.sql [moved from src/core/SQL/SQLite/7/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_buffer.sql [moved from src/core/SQL/SQLite/7/insert_buffer.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_message.sql [moved from src/core/SQL/SQLite/7/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_network.sql [moved from src/core/SQL/SQLite/7/insert_network.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_quasseluser.sql [moved from src/core/SQL/SQLite/7/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_sender.sql [moved from src/core/SQL/SQLite/7/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/8/insert_server.sql [moved from src/core/SQL/SQLite/7/insert_server.sql with 100% similarity]
src/core/SQL/SQLite/8/select_authuser.sql [moved from src/core/SQL/SQLite/7/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/8/select_bufferByName.sql [moved from src/core/SQL/SQLite/7/select_bufferByName.sql with 100% similarity]
src/core/SQL/SQLite/8/select_bufferExists.sql [moved from src/core/SQL/SQLite/7/select_bufferExists.sql with 100% similarity]
src/core/SQL/SQLite/8/select_buffer_by_id.sql [moved from src/core/SQL/SQLite/7/select_buffer_by_id.sql with 100% similarity]
src/core/SQL/SQLite/8/select_buffer_lastseen_dates.sql [moved from src/core/SQL/SQLite/7/select_buffer_lastseen_dates.sql with 100% similarity]
src/core/SQL/SQLite/8/select_buffers.sql [moved from src/core/SQL/SQLite/7/select_buffers.sql with 100% similarity]
src/core/SQL/SQLite/8/select_messageRange.sql [moved from src/core/SQL/SQLite/7/select_messageRange.sql with 100% similarity]
src/core/SQL/SQLite/8/select_messages.sql [moved from src/core/SQL/SQLite/7/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/8/select_messagesOffset.sql [moved from src/core/SQL/SQLite/7/select_messagesOffset.sql with 100% similarity]
src/core/SQL/SQLite/8/select_messagesSince.sql [moved from src/core/SQL/SQLite/7/select_messagesSince.sql with 100% similarity]
src/core/SQL/SQLite/8/select_messagesSinceOffset.sql [moved from src/core/SQL/SQLite/7/select_messagesSinceOffset.sql with 100% similarity]
src/core/SQL/SQLite/8/select_networkExists.sql [moved from src/core/SQL/SQLite/7/select_networkExists.sql with 100% similarity]
src/core/SQL/SQLite/8/select_networks_for_user.sql [moved from src/core/SQL/SQLite/7/select_networks_for_user.sql with 100% similarity]
src/core/SQL/SQLite/8/select_servers_for_network.sql [moved from src/core/SQL/SQLite/7/select_servers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/8/select_userid.sql [moved from src/core/SQL/SQLite/7/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/7/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_010_sender.sql [moved from src/core/SQL/SQLite/7/setup_010_sender.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_020_network.sql [moved from src/core/SQL/SQLite/7/setup_020_network.sql with 95% similarity]
src/core/SQL/SQLite/8/setup_030_buffer.sql [moved from src/core/SQL/SQLite/7/setup_030_buffer.sql with 75% similarity]
src/core/SQL/SQLite/8/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/7/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/7/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_060_backlog.sql [moved from src/core/SQL/SQLite/7/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/7/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_080_ircservers.sql [moved from src/core/SQL/SQLite/7/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/SQLite/8/setup_999_version.sql [new file with mode: 0644]
src/core/SQL/SQLite/8/update_buffer_lastseen.sql [moved from src/core/SQL/SQLite/7/update_buffer_lastseen.sql with 100% similarity]
src/core/SQL/SQLite/8/update_buffer_name.sql [moved from src/core/SQL/SQLite/7/update_buffer_name.sql with 100% similarity]
src/core/SQL/SQLite/8/update_network.sql [moved from src/core/SQL/SQLite/7/update_network.sql with 100% similarity]
src/core/SQL/SQLite/8/update_username.sql [moved from src/core/SQL/SQLite/7/update_username.sql with 100% similarity]
src/core/SQL/SQLite/8/update_userpassword.sql [moved from src/core/SQL/SQLite/7/update_userpassword.sql with 100% similarity]
src/core/core.cpp
src/core/core.h
src/core/coresession.cpp
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/7/setup_999_version.sql b/src/core/SQL/SQLite/7/setup_999_version.sql
deleted file mode 100644 (file)
index e7272de..0000000
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '7')
similarity index 95%
rename from src/core/SQL/SQLite/7/setup_020_network.sql
rename to src/core/SQL/SQLite/8/setup_020_network.sql
index 1043576..eb99a48 100644 (file)
@@ -16,5 +16,6 @@ CREATE TABLE network (
        autoreconnectretries INTEGER NOT NULL DEFAULT 0,
        unlimitedconnectretries INTEGER NOT NULL DEFAULT 0, -- BOOL
        rejoinchannels INTEGER NOT NULL DEFAULT 0, -- BOOL
+       connected INTEGER NOT NULL DEFAULT 1,
        UNIQUE (userid, networkname)
 )
similarity index 75%
rename from src/core/SQL/SQLite/7/setup_030_buffer.sql
rename to src/core/SQL/SQLite/8/setup_030_buffer.sql
index ea1c3ff..c1d8b15 100644 (file)
@@ -6,5 +6,7 @@ CREATE TABLE buffer (
        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
+       lastseen INTEGER NOT NULL DEFAULT 0,
+       key TEXT,
+       joined INTEGER NOT NULL DEFAULT 0 -- BOOL
 )
diff --git a/src/core/SQL/SQLite/8/setup_999_version.sql b/src/core/SQL/SQLite/8/setup_999_version.sql
new file mode 100644 (file)
index 0000000..a65213b
--- /dev/null
@@ -0,0 +1 @@
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '8')
index 03d22d4..98a4a83 100644 (file)
@@ -235,6 +235,31 @@ NetworkId Core::networkId(UserId user, const QString &network) {
   return instance()->storage->getNetworkId(user, network);
 }
 
+QList<NetworkId> Core::connectedNetworks(UserId user) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->connectedNetworks(user);
+}
+
+void Core::setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->setNetworkConnected(user, networkId, isConnected);
+}
+
+QHash<QString, QString> Core::persistentChannels(UserId user, const NetworkId &networkId) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->persistentChannels(user, networkId);
+}
+
+void Core::setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->setChannelPersistent(user, networkId, channel, isJoined);
+}
+
+void Core::setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->setPersistentChannelKey(user, networkId, channel, key);
+}
+
 BufferInfo Core::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) {
   QMutexLocker locker(&mutex);
   return instance()->storage->getBufferInfo(user, networkId, type, buffer);
index bb1adf0..2255f56 100644 (file)
@@ -97,6 +97,52 @@ class Core : public QObject {
      */
     static NetworkId networkId(UserId user, const QString &network);
 
+    //! Get a list of Networks to restore
+    /** Return a list of networks the user was connected at the time of core shutdown
+     *  \note This method is threadsafe.
+     *
+     *  \param user  The User Id in question
+     */
+    static QList<NetworkId> connectedNetworks(UserId user);
+
+    //! Update the connected state of a network
+    /** \note This method is threadsafe
+     *
+     *  \param user        The Id of the networks owner
+     *  \param networkId   The Id of the network
+     *  \param isConnected whether the network is connected or not
+     */
+    static void setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected);
+
+    //! Get a hash of channels with their channel keys for a given network
+    /** The keys are channel names and values are passwords (possibly empty)
+     *  \note This method is threadsafe
+     *
+     *  \param user       The id of the networks owner
+     *  \param networkId  The Id of the network
+     */
+    static QHash<QString, QString> persistentChannels(UserId user, const NetworkId &networkId);
+
+    //! Update the connected state of a channel
+    /** \note This method is threadsafe
+     *
+     *  \param user       The Id of the networks owner
+     *  \param networkId  The Id of the network
+     *  \param channel    The name of the channel
+     *  \param isJoined   whether the channel is connected or not
+     */
+    static void setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined);
+
+    //! Update the key of a channel
+    /** \note This method is threadsafe
+     *
+     *  \param user       The Id of the networks owner
+     *  \param networkId  The Id of the network
+     *  \param channel    The name of the channel
+     *  \param key        The key of the channel (possibly empty)
+     */
+    static void setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key);
+
     //! Get the unique BufferInfo for the given combination of network and buffername for a user.
     /** \note This method is threadsafe.
      *
index 8d63ec8..40443db 100644 (file)
@@ -148,9 +148,7 @@ void CoreSession::saveSessionState() const {
 }
 
 void CoreSession::restoreSessionState() {
-  // FIXME db support
-  //QList<NetworkId> nets = Core::connectedNetworks(user());
-  QList<NetworkId> nets;
+  QList<NetworkId> nets = Core::connectedNetworks(user());
   foreach(NetworkId id, nets) {
     connectToNetwork(id);
   }
@@ -224,26 +222,26 @@ SignalProxy *CoreSession::signalProxy() const {
 // FIXME we need a sane way for creating buffers!
 void CoreSession::networkConnected(NetworkId networkid) {
   Core::bufferInfo(user(), networkid, BufferInfo::StatusBuffer); // create status buffer
-  //Core::setNetworkConnected(user(), networkid, true);
+  Core::setNetworkConnected(user(), networkid, true);
 }
 
 // called now only on /quit and requested disconnects, not on normal disconnects!
 void CoreSession::networkDisconnected(NetworkId networkid) {
-  //Core::setNetworkConnected(user(), networkid, false);
+  Core::setNetworkConnected(user(), networkid, false);
   if(_connections.contains(networkid)) _connections.take(networkid)->deleteLater();
 }
 
 void CoreSession::channelJoined(NetworkId id, const QString &channel, const QString &key) {
-  //Core::setChannelPersistent(user(), id, channel, true);
-  //Core::setPersistentChannelKey(user(), id, channel, key);
+  Core::setChannelPersistent(user(), id, channel, true);
+  Core::setPersistentChannelKey(user(), id, channel, key);
 }
 
 void CoreSession::channelParted(NetworkId id, const QString &channel) {
-  //Core::setChannelPersistent(user(), id, channel, false);
+  Core::setChannelPersistent(user(), id, channel, false);
 }
 
 QHash<QString, QString> CoreSession::persistentChannels(NetworkId id) const {
-  //return Core::persistentChannels(user(), id);
+  return Core::persistentChannels(user(), id);
   return QHash<QString, QString>();
 }
 
index cf91082..c8e5b8e 100644 (file)
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
-    <file>./SQL/SQLite/1/upgrade_010_create_coreinfo.sql</file>
     <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/2/upgrade_010_update_schemaversion.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/3/upgrade_010_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/4/upgrade_999_update_schemaversion.sql</file>
     <file>./SQL/SQLite/4/upgrade_000_rename_buffertable.sql</file>
-    <file>./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/4/upgrade_020_copy_buffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_010_create_buffertable.sql</file>
+    <file>./SQL/SQLite/4/upgrade_020_copy_buffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_030_drop_oldbuffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_040_create_buffer_idx.sql</file>
-    <file>./SQL/SQLite/5/upgrade_999_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql</file>
+    <file>./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/4/upgrade_999_update_schemaversion.sql</file>
+    <file>./SQL/SQLite/5/upgrade_000_rename_networktable.sql</file>
+    <file>./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_020_copy_networktable.sql</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_010_create_newnetworktable.sql</file>
-    <file>./SQL/SQLite/5/upgrade_000_rename_networktable.sql</file>
-    <file>./SQL/SQLite/6/upgrade_040_update_msgtype.sql</file>
+    <file>./SQL/SQLite/5/upgrade_999_update_schemaversion.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_030_set_querybuffertype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_160_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_140_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_120_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_100_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_090_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_070_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_040_update_msgtype.sql</file>
     <file>./SQL/SQLite/6/upgrade_050_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_999_version.sql</file>
-    <file>./SQL/SQLite/6/upgrade_150_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_130_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_110_update_msgtype.sql</file>
-    <file>./SQL/SQLite/6/upgrade_080_update_msgtype.sql</file>
     <file>./SQL/SQLite/6/upgrade_060_update_msgtype.sql</file>
-    <file>./SQL/SQLite/7/insert_network.sql</file>
-    <file>./SQL/SQLite/7/insert_quasseluser.sql</file>
-    <file>./SQL/SQLite/7/select_networkExists.sql</file>
-    <file>./SQL/SQLite/7/insert_buffer.sql</file>
-    <file>./SQL/SQLite/7/setup_020_network.sql</file>
-    <file>./SQL/SQLite/7/delete_networks_by_uid.sql</file>
-    <file>./SQL/SQLite/7/select_bufferByName.sql</file>
-    <file>./SQL/SQLite/7/select_messageRange.sql</file>
-    <file>./SQL/SQLite/7/insert_message.sql</file>
-    <file>./SQL/SQLite/7/setup_000_quasseluser.sql</file>
-    <file>./SQL/SQLite/7/setup_999_version.sql</file>
-    <file>./SQL/SQLite/7/update_username.sql</file>
-    <file>./SQL/SQLite/7/select_messagesSinceOffset.sql</file>
-    <file>./SQL/SQLite/7/delete_buffers_by_uid.sql</file>
-    <file>./SQL/SQLite/7/select_bufferExists.sql</file>
-    <file>./SQL/SQLite/7/select_servers_for_network.sql</file>
-    <file>./SQL/SQLite/7/delete_network.sql</file>
-    <file>./SQL/SQLite/7/delete_backlog_by_uid.sql</file>
-    <file>./SQL/SQLite/7/delete_quasseluser.sql</file>
-    <file>./SQL/SQLite/7/select_messagesSince.sql</file>
-    <file>./SQL/SQLite/7/delete_backlog_for_network.sql</file>
-    <file>./SQL/SQLite/7/update_network.sql</file>
-    <file>./SQL/SQLite/7/delete_backlog_for_buffer.sql</file>
+    <file>./SQL/SQLite/6/upgrade_070_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_080_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_090_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_100_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_110_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_120_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_130_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_140_update_msgtype.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/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/update_buffer_name.sql</file>
-    <file>./SQL/SQLite/7/setup_030_buffer.sql</file>
-    <file>./SQL/SQLite/7/setup_070_coreinfo.sql</file>
-    <file>./SQL/SQLite/7/upgrade_999_version.sql</file>
     <file>./SQL/SQLite/7/upgrade_040_alter_buffer_add_lastseen.sql</file>
-    <file>./SQL/SQLite/7/insert_sender.sql</file>
-    <file>./SQL/SQLite/7/select_userid.sql</file>
-    <file>./SQL/SQLite/7/upgrade_020_copy_networktable.sql</file>
-    <file>./SQL/SQLite/7/setup_010_sender.sql</file>
-    <file>./SQL/SQLite/7/setup_040_buffer_idx.sql</file>
-    <file>./SQL/SQLite/7/setup_060_backlog.sql</file>
-    <file>./SQL/SQLite/7/select_buffers.sql</file>
-    <file>./SQL/SQLite/7/insert_server.sql</file>
-    <file>./SQL/SQLite/7/delete_ircservers_for_network.sql</file>
-    <file>./SQL/SQLite/7/update_userpassword.sql</file>
-    <file>./SQL/SQLite/7/select_networks_for_user.sql</file>
-    <file>./SQL/SQLite/7/select_buffer_by_id.sql</file>
-    <file>./SQL/SQLite/7/delete_buffer_for_bufferid.sql</file>
-    <file>./SQL/SQLite/7/select_buffer_lastseen_dates.sql</file>
-    <file>./SQL/SQLite/7/upgrade_010_create_newnetworktable.sql</file>
-    <file>./SQL/SQLite/7/upgrade_000_rename_networktable.sql</file>
-    <file>./SQL/SQLite/7/delete_buffers_for_network.sql</file>
-    <file>./SQL/SQLite/7/select_authuser.sql</file>
-    <file>./SQL/SQLite/7/select_messages.sql</file>
-    <file>./SQL/SQLite/7/select_messagesOffset.sql</file>
-    <file>./SQL/SQLite/7/update_buffer_lastseen.sql</file>
-    <file>./SQL/SQLite/7/setup_050_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/7/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/7/upgrade_999_version.sql</file>
+    <file>./SQL/SQLite/8/delete_backlog_by_uid.sql</file>
+    <file>./SQL/SQLite/8/delete_backlog_for_buffer.sql</file>
+    <file>./SQL/SQLite/8/delete_backlog_for_network.sql</file>
+    <file>./SQL/SQLite/8/delete_buffer_for_bufferid.sql</file>
+    <file>./SQL/SQLite/8/delete_buffers_by_uid.sql</file>
+    <file>./SQL/SQLite/8/delete_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/8/delete_ircservers_for_network.sql</file>
+    <file>./SQL/SQLite/8/delete_network.sql</file>
+    <file>./SQL/SQLite/8/delete_networks_by_uid.sql</file>
+    <file>./SQL/SQLite/8/delete_quasseluser.sql</file>
+    <file>./SQL/SQLite/8/insert_buffer.sql</file>
+    <file>./SQL/SQLite/8/insert_message.sql</file>
+    <file>./SQL/SQLite/8/insert_network.sql</file>
+    <file>./SQL/SQLite/8/insert_quasseluser.sql</file>
+    <file>./SQL/SQLite/8/insert_sender.sql</file>
+    <file>./SQL/SQLite/8/insert_server.sql</file>
+    <file>./SQL/SQLite/8/select_authuser.sql</file>
+    <file>./SQL/SQLite/8/select_buffer_by_id.sql</file>
+    <file>./SQL/SQLite/8/select_buffer_lastseen_dates.sql</file>
+    <file>./SQL/SQLite/8/select_bufferByName.sql</file>
+    <file>./SQL/SQLite/8/select_bufferExists.sql</file>
+    <file>./SQL/SQLite/8/select_buffers.sql</file>
+    <file>./SQL/SQLite/8/select_connected_networks.sql</file>
+    <file>./SQL/SQLite/8/select_messageRange.sql</file>
+    <file>./SQL/SQLite/8/select_messages.sql</file>
+    <file>./SQL/SQLite/8/select_messagesOffset.sql</file>
+    <file>./SQL/SQLite/8/select_messagesSince.sql</file>
+    <file>./SQL/SQLite/8/select_messagesSinceOffset.sql</file>
+    <file>./SQL/SQLite/8/select_networkExists.sql</file>
+    <file>./SQL/SQLite/8/select_networks_for_user.sql</file>
+    <file>./SQL/SQLite/8/select_persistent_channels.sql</file>
+    <file>./SQL/SQLite/8/select_servers_for_network.sql</file>
+    <file>./SQL/SQLite/8/select_userid.sql</file>
+    <file>./SQL/SQLite/8/setup_000_quasseluser.sql</file>
+    <file>./SQL/SQLite/8/setup_010_sender.sql</file>
+    <file>./SQL/SQLite/8/setup_020_network.sql</file>
+    <file>./SQL/SQLite/8/setup_030_buffer.sql</file>
+    <file>./SQL/SQLite/8/setup_040_buffer_idx.sql</file>
+    <file>./SQL/SQLite/8/setup_050_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/8/setup_060_backlog.sql</file>
+    <file>./SQL/SQLite/8/setup_070_coreinfo.sql</file>
+    <file>./SQL/SQLite/8/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/8/setup_999_version.sql</file>
+    <file>./SQL/SQLite/8/update_buffer_lastseen.sql</file>
+    <file>./SQL/SQLite/8/update_buffer_name.sql</file>
+    <file>./SQL/SQLite/8/update_buffer_persistent_channel.sql</file>
+    <file>./SQL/SQLite/8/update_buffer_set_channel_key.sql</file>
+    <file>./SQL/SQLite/8/update_network.sql</file>
+    <file>./SQL/SQLite/8/update_network_connected.sql</file>
+    <file>./SQL/SQLite/8/update_username.sql</file>
+    <file>./SQL/SQLite/8/update_userpassword.sql</file>
+    <file>./SQL/SQLite/8/upgrade_000_alter_network_add_connected.sql</file>
+    <file>./SQL/SQLite/8/upgrade_010_alter_buffer_add_key.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>
 </qresource>
 </RCC>
index 81f2fa9..1548085 100644 (file)
@@ -355,6 +355,70 @@ NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) {
     return NetworkId();
 }
 
+QList<NetworkId> SqliteStorage::connectedNetworks(UserId user) {
+  QList<NetworkId> connectedNets;
+  QSqlQuery query(logDb());
+  query.prepare(queryString("select_connected_networks"));
+  query.bindValue(":userid", user.toInt());
+  query.exec();
+  watchQuery(&query);
+
+  while(query.next()) {
+    connectedNets << query.value(0).toInt();
+  }
+  
+  return connectedNets;
+}
+
+void SqliteStorage::setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected) {
+  QSqlQuery query(logDb());
+  query.prepare(queryString("update_network_connected"));
+  query.bindValue(":userid", user.toInt());
+  query.bindValue(":networkid", networkId.toInt());
+  query.bindValue(":connected", isConnected ? 1 : 0);
+  query.exec();
+  watchQuery(&query);
+}
+
+QHash<QString, QString> SqliteStorage::persistentChannels(UserId user, const NetworkId &networkId) {
+  QHash<QString, QString> persistentChans;
+  QSqlQuery query(logDb());
+  query.prepare(queryString("select_persistent_channels"));
+  query.bindValue(":userid", user.toInt());
+  query.bindValue(":networkid", networkId.toInt());
+  query.exec();
+  watchQuery(&query);
+
+  while(query.next()) {
+    persistentChans[query.value(0).toString()] = query.value(1).toString();
+  }
+  
+  return persistentChans;
+}
+
+void SqliteStorage::setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined) {
+  QSqlQuery query(logDb());
+  query.prepare(queryString("update_buffer_persistent_channel"));
+  query.bindValue(":userid", user.toInt());
+  query.bindValue(":networkId", networkId.toInt());
+  query.bindValue(":buffercname", channel.toLower());
+  query.bindValue(":joined", isJoined ? 1 : 0);
+  query.exec();
+  watchQuery(&query);
+}
+
+void SqliteStorage::setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key) {
+  QSqlQuery query(logDb());
+  query.prepare(queryString("update_buffer_set_channel_key"));
+  query.bindValue(":userid", user.toInt());
+  query.bindValue(":networkId", networkId.toInt());
+  query.bindValue(":buffercname", channel.toLower());
+  query.bindValue(":key", key);
+  query.exec();
+  watchQuery(&query);
+}
+
+
 void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) {
   QSqlQuery *query = cachedQuery("insert_buffer");
   query->bindValue(":userid", user.toInt());
index 944c46b..a710b63 100644 (file)
@@ -56,6 +56,13 @@ public slots:
   virtual bool updateNetwork(UserId user, const NetworkInfo &info);
   virtual bool removeNetwork(UserId user, const NetworkId &networkId);
   virtual QList<NetworkInfo> networks(UserId user);
+  virtual QList<NetworkId> connectedNetworks(UserId user);
+  virtual void setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected);
+
+  /* persistent channels */
+  virtual QHash<QString, QString> persistentChannels(UserId user, const NetworkId &networkId);
+  virtual void setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined);
+  virtual void setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key);
   
   /* Buffer handling */
   virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "");
index 3e8cbb1..ee4cbfe 100644 (file)
@@ -148,6 +148,52 @@ class Storage : public QObject {
      */
     virtual NetworkId getNetworkId(UserId user, const QString &network) = 0;
 
+    //! Get a list of Networks to restore
+    /** Return a list of networks the user was connected at the time of core shutdown
+     *  \note This method is threadsafe.
+     *
+     *  \param user  The User Id in question
+     */
+    virtual QList<NetworkId> connectedNetworks(UserId user) = 0;
+
+    //! Update the connected state of a network
+    /** \note This method is threadsafe
+     *
+     *  \param user        The Id of the networks owner
+     *  \param networkId   The Id of the network
+     *  \param isConnected whether the network is connected or not
+     */
+    virtual void setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected) = 0;
+
+    //! Get a hash of channels with their channel keys for a given network
+    /** The keys are channel names and values are passwords (possibly empty)
+     *  \note This method is threadsafe
+     *
+     *  \param user       The id of the networks owner
+     *  \param networkId  The Id of the network
+     */
+    virtual QHash<QString, QString> persistentChannels(UserId user, const NetworkId &networkId) = 0;
+
+    //! Update the connected state of a channel
+    /** \note This method is threadsafe
+     *
+     *  \param user       The Id of the networks owner
+     *  \param networkId  The Id of the network
+     *  \param channel    The name of the channel
+     *  \param isJoined   whether the channel is connected or not
+     */
+    virtual void setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined) = 0;
+
+    //! Update the key of a channel
+    /** \note This method is threadsafe
+     *
+     *  \param user       The Id of the networks owner
+     *  \param networkId  The Id of the network
+     *  \param channel    The name of the channel
+     *  \param key        The key of the channel (possibly empty)
+     */
+    virtual void setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key) = 0;
+  
     /* Buffer handling */
 
     //! Get the unique BufferInfo for the given combination of network and buffername for a user.
index ccd8341..9d847c7 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-02-21";
-  quasselBuild = 573;
+  quasselBuild = 574;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 563;