From: Marcus Eggenberger Date: Thu, 21 Feb 2008 23:00:50 +0000 (+0000) Subject: moved corestate (connected networks and joined channels) to the storage backend X-Git-Tag: 0.2.0-alpha1~6 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=ef1ee865c342a16daab514a99110f56150ea95e7 moved corestate (connected networks and joined channels) to the storage backend --- 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 index e7272de6..00000000 --- a/src/core/SQL/SQLite/7/setup_999_version.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '7') diff --git a/src/core/SQL/SQLite/7/delete_backlog_by_uid.sql b/src/core/SQL/SQLite/8/delete_backlog_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_backlog_by_uid.sql rename to src/core/SQL/SQLite/8/delete_backlog_by_uid.sql diff --git a/src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql b/src/core/SQL/SQLite/8/delete_backlog_for_buffer.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql rename to src/core/SQL/SQLite/8/delete_backlog_for_buffer.sql diff --git a/src/core/SQL/SQLite/7/delete_backlog_for_network.sql b/src/core/SQL/SQLite/8/delete_backlog_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_backlog_for_network.sql rename to src/core/SQL/SQLite/8/delete_backlog_for_network.sql diff --git a/src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql b/src/core/SQL/SQLite/8/delete_buffer_for_bufferid.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql rename to src/core/SQL/SQLite/8/delete_buffer_for_bufferid.sql diff --git a/src/core/SQL/SQLite/7/delete_buffers_by_uid.sql b/src/core/SQL/SQLite/8/delete_buffers_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_buffers_by_uid.sql rename to src/core/SQL/SQLite/8/delete_buffers_by_uid.sql diff --git a/src/core/SQL/SQLite/7/delete_buffers_for_network.sql b/src/core/SQL/SQLite/8/delete_buffers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_buffers_for_network.sql rename to src/core/SQL/SQLite/8/delete_buffers_for_network.sql diff --git a/src/core/SQL/SQLite/7/delete_ircservers_for_network.sql b/src/core/SQL/SQLite/8/delete_ircservers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_ircservers_for_network.sql rename to src/core/SQL/SQLite/8/delete_ircservers_for_network.sql diff --git a/src/core/SQL/SQLite/7/delete_network.sql b/src/core/SQL/SQLite/8/delete_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_network.sql rename to src/core/SQL/SQLite/8/delete_network.sql diff --git a/src/core/SQL/SQLite/7/delete_networks_by_uid.sql b/src/core/SQL/SQLite/8/delete_networks_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_networks_by_uid.sql rename to src/core/SQL/SQLite/8/delete_networks_by_uid.sql diff --git a/src/core/SQL/SQLite/7/delete_quasseluser.sql b/src/core/SQL/SQLite/8/delete_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/7/delete_quasseluser.sql rename to src/core/SQL/SQLite/8/delete_quasseluser.sql diff --git a/src/core/SQL/SQLite/7/insert_buffer.sql b/src/core/SQL/SQLite/8/insert_buffer.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_buffer.sql rename to src/core/SQL/SQLite/8/insert_buffer.sql diff --git a/src/core/SQL/SQLite/7/insert_message.sql b/src/core/SQL/SQLite/8/insert_message.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_message.sql rename to src/core/SQL/SQLite/8/insert_message.sql diff --git a/src/core/SQL/SQLite/7/insert_network.sql b/src/core/SQL/SQLite/8/insert_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_network.sql rename to src/core/SQL/SQLite/8/insert_network.sql diff --git a/src/core/SQL/SQLite/7/insert_quasseluser.sql b/src/core/SQL/SQLite/8/insert_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_quasseluser.sql rename to src/core/SQL/SQLite/8/insert_quasseluser.sql diff --git a/src/core/SQL/SQLite/7/insert_sender.sql b/src/core/SQL/SQLite/8/insert_sender.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_sender.sql rename to src/core/SQL/SQLite/8/insert_sender.sql diff --git a/src/core/SQL/SQLite/7/insert_server.sql b/src/core/SQL/SQLite/8/insert_server.sql similarity index 100% rename from src/core/SQL/SQLite/7/insert_server.sql rename to src/core/SQL/SQLite/8/insert_server.sql diff --git a/src/core/SQL/SQLite/7/select_authuser.sql b/src/core/SQL/SQLite/8/select_authuser.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_authuser.sql rename to src/core/SQL/SQLite/8/select_authuser.sql diff --git a/src/core/SQL/SQLite/7/select_bufferByName.sql b/src/core/SQL/SQLite/8/select_bufferByName.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_bufferByName.sql rename to src/core/SQL/SQLite/8/select_bufferByName.sql diff --git a/src/core/SQL/SQLite/7/select_bufferExists.sql b/src/core/SQL/SQLite/8/select_bufferExists.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_bufferExists.sql rename to src/core/SQL/SQLite/8/select_bufferExists.sql diff --git a/src/core/SQL/SQLite/7/select_buffer_by_id.sql b/src/core/SQL/SQLite/8/select_buffer_by_id.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_buffer_by_id.sql rename to src/core/SQL/SQLite/8/select_buffer_by_id.sql diff --git a/src/core/SQL/SQLite/7/select_buffer_lastseen_dates.sql b/src/core/SQL/SQLite/8/select_buffer_lastseen_dates.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_buffer_lastseen_dates.sql rename to src/core/SQL/SQLite/8/select_buffer_lastseen_dates.sql diff --git a/src/core/SQL/SQLite/7/select_buffers.sql b/src/core/SQL/SQLite/8/select_buffers.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_buffers.sql rename to src/core/SQL/SQLite/8/select_buffers.sql diff --git a/src/core/SQL/SQLite/7/select_messageRange.sql b/src/core/SQL/SQLite/8/select_messageRange.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_messageRange.sql rename to src/core/SQL/SQLite/8/select_messageRange.sql diff --git a/src/core/SQL/SQLite/7/select_messages.sql b/src/core/SQL/SQLite/8/select_messages.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_messages.sql rename to src/core/SQL/SQLite/8/select_messages.sql diff --git a/src/core/SQL/SQLite/7/select_messagesOffset.sql b/src/core/SQL/SQLite/8/select_messagesOffset.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_messagesOffset.sql rename to src/core/SQL/SQLite/8/select_messagesOffset.sql diff --git a/src/core/SQL/SQLite/7/select_messagesSince.sql b/src/core/SQL/SQLite/8/select_messagesSince.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_messagesSince.sql rename to src/core/SQL/SQLite/8/select_messagesSince.sql diff --git a/src/core/SQL/SQLite/7/select_messagesSinceOffset.sql b/src/core/SQL/SQLite/8/select_messagesSinceOffset.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_messagesSinceOffset.sql rename to src/core/SQL/SQLite/8/select_messagesSinceOffset.sql diff --git a/src/core/SQL/SQLite/7/select_networkExists.sql b/src/core/SQL/SQLite/8/select_networkExists.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_networkExists.sql rename to src/core/SQL/SQLite/8/select_networkExists.sql diff --git a/src/core/SQL/SQLite/7/select_networks_for_user.sql b/src/core/SQL/SQLite/8/select_networks_for_user.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_networks_for_user.sql rename to src/core/SQL/SQLite/8/select_networks_for_user.sql diff --git a/src/core/SQL/SQLite/7/select_servers_for_network.sql b/src/core/SQL/SQLite/8/select_servers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_servers_for_network.sql rename to src/core/SQL/SQLite/8/select_servers_for_network.sql diff --git a/src/core/SQL/SQLite/7/select_userid.sql b/src/core/SQL/SQLite/8/select_userid.sql similarity index 100% rename from src/core/SQL/SQLite/7/select_userid.sql rename to src/core/SQL/SQLite/8/select_userid.sql diff --git a/src/core/SQL/SQLite/7/setup_000_quasseluser.sql b/src/core/SQL/SQLite/8/setup_000_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_000_quasseluser.sql rename to src/core/SQL/SQLite/8/setup_000_quasseluser.sql diff --git a/src/core/SQL/SQLite/7/setup_010_sender.sql b/src/core/SQL/SQLite/8/setup_010_sender.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_010_sender.sql rename to src/core/SQL/SQLite/8/setup_010_sender.sql diff --git a/src/core/SQL/SQLite/7/setup_020_network.sql b/src/core/SQL/SQLite/8/setup_020_network.sql 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 1043576e..eb99a48b 100644 --- a/src/core/SQL/SQLite/7/setup_020_network.sql +++ b/src/core/SQL/SQLite/8/setup_020_network.sql @@ -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) ) diff --git a/src/core/SQL/SQLite/7/setup_030_buffer.sql b/src/core/SQL/SQLite/8/setup_030_buffer.sql 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 ea1c3ff1..c1d8b153 100644 --- a/src/core/SQL/SQLite/7/setup_030_buffer.sql +++ b/src/core/SQL/SQLite/8/setup_030_buffer.sql @@ -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/7/setup_040_buffer_idx.sql b/src/core/SQL/SQLite/8/setup_040_buffer_idx.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_040_buffer_idx.sql rename to src/core/SQL/SQLite/8/setup_040_buffer_idx.sql diff --git a/src/core/SQL/SQLite/7/setup_050_buffer_cname_idx.sql b/src/core/SQL/SQLite/8/setup_050_buffer_cname_idx.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_050_buffer_cname_idx.sql rename to src/core/SQL/SQLite/8/setup_050_buffer_cname_idx.sql diff --git a/src/core/SQL/SQLite/7/setup_060_backlog.sql b/src/core/SQL/SQLite/8/setup_060_backlog.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_060_backlog.sql rename to src/core/SQL/SQLite/8/setup_060_backlog.sql diff --git a/src/core/SQL/SQLite/7/setup_070_coreinfo.sql b/src/core/SQL/SQLite/8/setup_070_coreinfo.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_070_coreinfo.sql rename to src/core/SQL/SQLite/8/setup_070_coreinfo.sql diff --git a/src/core/SQL/SQLite/7/setup_080_ircservers.sql b/src/core/SQL/SQLite/8/setup_080_ircservers.sql similarity index 100% rename from src/core/SQL/SQLite/7/setup_080_ircservers.sql rename to src/core/SQL/SQLite/8/setup_080_ircservers.sql 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 index 00000000..a65213b8 --- /dev/null +++ b/src/core/SQL/SQLite/8/setup_999_version.sql @@ -0,0 +1 @@ +INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '8') diff --git a/src/core/SQL/SQLite/7/update_buffer_lastseen.sql b/src/core/SQL/SQLite/8/update_buffer_lastseen.sql similarity index 100% rename from src/core/SQL/SQLite/7/update_buffer_lastseen.sql rename to src/core/SQL/SQLite/8/update_buffer_lastseen.sql diff --git a/src/core/SQL/SQLite/7/update_buffer_name.sql b/src/core/SQL/SQLite/8/update_buffer_name.sql similarity index 100% rename from src/core/SQL/SQLite/7/update_buffer_name.sql rename to src/core/SQL/SQLite/8/update_buffer_name.sql diff --git a/src/core/SQL/SQLite/7/update_network.sql b/src/core/SQL/SQLite/8/update_network.sql similarity index 100% rename from src/core/SQL/SQLite/7/update_network.sql rename to src/core/SQL/SQLite/8/update_network.sql diff --git a/src/core/SQL/SQLite/7/update_username.sql b/src/core/SQL/SQLite/8/update_username.sql similarity index 100% rename from src/core/SQL/SQLite/7/update_username.sql rename to src/core/SQL/SQLite/8/update_username.sql diff --git a/src/core/SQL/SQLite/7/update_userpassword.sql b/src/core/SQL/SQLite/8/update_userpassword.sql similarity index 100% rename from src/core/SQL/SQLite/7/update_userpassword.sql rename to src/core/SQL/SQLite/8/update_userpassword.sql diff --git a/src/core/core.cpp b/src/core/core.cpp index 03d22d4c..98a4a837 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -235,6 +235,31 @@ NetworkId Core::networkId(UserId user, const QString &network) { return instance()->storage->getNetworkId(user, network); } +QList 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 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); diff --git a/src/core/core.h b/src/core/core.h index bb1adf01..2255f56a 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -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 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 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. * diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 8d63ec8c..40443db2 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -148,9 +148,7 @@ void CoreSession::saveSessionState() const { } void CoreSession::restoreSessionState() { - // FIXME db support - //QList nets = Core::connectedNetworks(user()); - QList nets; + QList 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 CoreSession::persistentChannels(NetworkId id) const { - //return Core::persistentChannels(user(), id); + return Core::persistentChannels(user(), id); return QHash(); } diff --git a/src/core/sql.qrc b/src/core/sql.qrc index cf910823..c8e5b8ee 100644 --- a/src/core/sql.qrc +++ b/src/core/sql.qrc @@ -1,94 +1,104 @@ - ./SQL/SQLite/1/upgrade_010_create_coreinfo.sql ./SQL/SQLite/1/upgrade_000_drop_coreinfo.sql + ./SQL/SQLite/1/upgrade_010_create_coreinfo.sql ./SQL/SQLite/1/upgrade_020_update_schemaversion.sql - ./SQL/SQLite/2/upgrade_010_update_schemaversion.sql ./SQL/SQLite/2/upgrade_000_drop_buffergroup.sql + ./SQL/SQLite/2/upgrade_010_update_schemaversion.sql ./SQL/SQLite/3/upgrade_000_update_backlog_flags.sql ./SQL/SQLite/3/upgrade_010_update_schemaversion.sql - ./SQL/SQLite/4/upgrade_999_update_schemaversion.sql ./SQL/SQLite/4/upgrade_000_rename_buffertable.sql - ./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql - ./SQL/SQLite/4/upgrade_020_copy_buffertable.sql ./SQL/SQLite/4/upgrade_010_create_buffertable.sql + ./SQL/SQLite/4/upgrade_020_copy_buffertable.sql ./SQL/SQLite/4/upgrade_030_drop_oldbuffertable.sql ./SQL/SQLite/4/upgrade_040_create_buffer_idx.sql - ./SQL/SQLite/5/upgrade_999_update_schemaversion.sql - ./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql + ./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql + ./SQL/SQLite/4/upgrade_999_update_schemaversion.sql + ./SQL/SQLite/5/upgrade_000_rename_networktable.sql + ./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql ./SQL/SQLite/5/upgrade_020_copy_networktable.sql + ./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql ./SQL/SQLite/5/upgrade_180_create_ircservers.sql - ./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql - ./SQL/SQLite/5/upgrade_000_rename_networktable.sql - ./SQL/SQLite/6/upgrade_040_update_msgtype.sql + ./SQL/SQLite/5/upgrade_999_update_schemaversion.sql ./SQL/SQLite/6/upgrade_000_alter_buffertable.sql + ./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql + ./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql ./SQL/SQLite/6/upgrade_030_set_querybuffertype.sql - ./SQL/SQLite/6/upgrade_160_update_msgtype.sql - ./SQL/SQLite/6/upgrade_140_update_msgtype.sql - ./SQL/SQLite/6/upgrade_120_update_msgtype.sql - ./SQL/SQLite/6/upgrade_100_update_msgtype.sql - ./SQL/SQLite/6/upgrade_090_update_msgtype.sql - ./SQL/SQLite/6/upgrade_070_update_msgtype.sql + ./SQL/SQLite/6/upgrade_040_update_msgtype.sql ./SQL/SQLite/6/upgrade_050_update_msgtype.sql - ./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql - ./SQL/SQLite/6/upgrade_999_version.sql - ./SQL/SQLite/6/upgrade_150_update_msgtype.sql - ./SQL/SQLite/6/upgrade_130_update_msgtype.sql - ./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql - ./SQL/SQLite/6/upgrade_110_update_msgtype.sql - ./SQL/SQLite/6/upgrade_080_update_msgtype.sql ./SQL/SQLite/6/upgrade_060_update_msgtype.sql - ./SQL/SQLite/7/insert_network.sql - ./SQL/SQLite/7/insert_quasseluser.sql - ./SQL/SQLite/7/select_networkExists.sql - ./SQL/SQLite/7/insert_buffer.sql - ./SQL/SQLite/7/setup_020_network.sql - ./SQL/SQLite/7/delete_networks_by_uid.sql - ./SQL/SQLite/7/select_bufferByName.sql - ./SQL/SQLite/7/select_messageRange.sql - ./SQL/SQLite/7/insert_message.sql - ./SQL/SQLite/7/setup_000_quasseluser.sql - ./SQL/SQLite/7/setup_999_version.sql - ./SQL/SQLite/7/update_username.sql - ./SQL/SQLite/7/select_messagesSinceOffset.sql - ./SQL/SQLite/7/delete_buffers_by_uid.sql - ./SQL/SQLite/7/select_bufferExists.sql - ./SQL/SQLite/7/select_servers_for_network.sql - ./SQL/SQLite/7/delete_network.sql - ./SQL/SQLite/7/delete_backlog_by_uid.sql - ./SQL/SQLite/7/delete_quasseluser.sql - ./SQL/SQLite/7/select_messagesSince.sql - ./SQL/SQLite/7/delete_backlog_for_network.sql - ./SQL/SQLite/7/update_network.sql - ./SQL/SQLite/7/delete_backlog_for_buffer.sql + ./SQL/SQLite/6/upgrade_070_update_msgtype.sql + ./SQL/SQLite/6/upgrade_080_update_msgtype.sql + ./SQL/SQLite/6/upgrade_090_update_msgtype.sql + ./SQL/SQLite/6/upgrade_100_update_msgtype.sql + ./SQL/SQLite/6/upgrade_110_update_msgtype.sql + ./SQL/SQLite/6/upgrade_120_update_msgtype.sql + ./SQL/SQLite/6/upgrade_130_update_msgtype.sql + ./SQL/SQLite/6/upgrade_140_update_msgtype.sql + ./SQL/SQLite/6/upgrade_150_update_msgtype.sql + ./SQL/SQLite/6/upgrade_160_update_msgtype.sql + ./SQL/SQLite/6/upgrade_999_version.sql + ./SQL/SQLite/7/upgrade_000_rename_networktable.sql + ./SQL/SQLite/7/upgrade_010_create_newnetworktable.sql + ./SQL/SQLite/7/upgrade_020_copy_networktable.sql ./SQL/SQLite/7/upgrade_030_drop_oldnetworktable.sql - ./SQL/SQLite/7/update_buffer_name.sql - ./SQL/SQLite/7/setup_030_buffer.sql - ./SQL/SQLite/7/setup_070_coreinfo.sql - ./SQL/SQLite/7/upgrade_999_version.sql ./SQL/SQLite/7/upgrade_040_alter_buffer_add_lastseen.sql - ./SQL/SQLite/7/insert_sender.sql - ./SQL/SQLite/7/select_userid.sql - ./SQL/SQLite/7/upgrade_020_copy_networktable.sql - ./SQL/SQLite/7/setup_010_sender.sql - ./SQL/SQLite/7/setup_040_buffer_idx.sql - ./SQL/SQLite/7/setup_060_backlog.sql - ./SQL/SQLite/7/select_buffers.sql - ./SQL/SQLite/7/insert_server.sql - ./SQL/SQLite/7/delete_ircservers_for_network.sql - ./SQL/SQLite/7/update_userpassword.sql - ./SQL/SQLite/7/select_networks_for_user.sql - ./SQL/SQLite/7/select_buffer_by_id.sql - ./SQL/SQLite/7/delete_buffer_for_bufferid.sql - ./SQL/SQLite/7/select_buffer_lastseen_dates.sql - ./SQL/SQLite/7/upgrade_010_create_newnetworktable.sql - ./SQL/SQLite/7/upgrade_000_rename_networktable.sql - ./SQL/SQLite/7/delete_buffers_for_network.sql - ./SQL/SQLite/7/select_authuser.sql - ./SQL/SQLite/7/select_messages.sql - ./SQL/SQLite/7/select_messagesOffset.sql - ./SQL/SQLite/7/update_buffer_lastseen.sql - ./SQL/SQLite/7/setup_050_buffer_cname_idx.sql - ./SQL/SQLite/7/setup_080_ircservers.sql + ./SQL/SQLite/7/upgrade_999_version.sql + ./SQL/SQLite/8/delete_backlog_by_uid.sql + ./SQL/SQLite/8/delete_backlog_for_buffer.sql + ./SQL/SQLite/8/delete_backlog_for_network.sql + ./SQL/SQLite/8/delete_buffer_for_bufferid.sql + ./SQL/SQLite/8/delete_buffers_by_uid.sql + ./SQL/SQLite/8/delete_buffers_for_network.sql + ./SQL/SQLite/8/delete_ircservers_for_network.sql + ./SQL/SQLite/8/delete_network.sql + ./SQL/SQLite/8/delete_networks_by_uid.sql + ./SQL/SQLite/8/delete_quasseluser.sql + ./SQL/SQLite/8/insert_buffer.sql + ./SQL/SQLite/8/insert_message.sql + ./SQL/SQLite/8/insert_network.sql + ./SQL/SQLite/8/insert_quasseluser.sql + ./SQL/SQLite/8/insert_sender.sql + ./SQL/SQLite/8/insert_server.sql + ./SQL/SQLite/8/select_authuser.sql + ./SQL/SQLite/8/select_buffer_by_id.sql + ./SQL/SQLite/8/select_buffer_lastseen_dates.sql + ./SQL/SQLite/8/select_bufferByName.sql + ./SQL/SQLite/8/select_bufferExists.sql + ./SQL/SQLite/8/select_buffers.sql + ./SQL/SQLite/8/select_connected_networks.sql + ./SQL/SQLite/8/select_messageRange.sql + ./SQL/SQLite/8/select_messages.sql + ./SQL/SQLite/8/select_messagesOffset.sql + ./SQL/SQLite/8/select_messagesSince.sql + ./SQL/SQLite/8/select_messagesSinceOffset.sql + ./SQL/SQLite/8/select_networkExists.sql + ./SQL/SQLite/8/select_networks_for_user.sql + ./SQL/SQLite/8/select_persistent_channels.sql + ./SQL/SQLite/8/select_servers_for_network.sql + ./SQL/SQLite/8/select_userid.sql + ./SQL/SQLite/8/setup_000_quasseluser.sql + ./SQL/SQLite/8/setup_010_sender.sql + ./SQL/SQLite/8/setup_020_network.sql + ./SQL/SQLite/8/setup_030_buffer.sql + ./SQL/SQLite/8/setup_040_buffer_idx.sql + ./SQL/SQLite/8/setup_050_buffer_cname_idx.sql + ./SQL/SQLite/8/setup_060_backlog.sql + ./SQL/SQLite/8/setup_070_coreinfo.sql + ./SQL/SQLite/8/setup_080_ircservers.sql + ./SQL/SQLite/8/setup_999_version.sql + ./SQL/SQLite/8/update_buffer_lastseen.sql + ./SQL/SQLite/8/update_buffer_name.sql + ./SQL/SQLite/8/update_buffer_persistent_channel.sql + ./SQL/SQLite/8/update_buffer_set_channel_key.sql + ./SQL/SQLite/8/update_network.sql + ./SQL/SQLite/8/update_network_connected.sql + ./SQL/SQLite/8/update_username.sql + ./SQL/SQLite/8/update_userpassword.sql + ./SQL/SQLite/8/upgrade_000_alter_network_add_connected.sql + ./SQL/SQLite/8/upgrade_010_alter_buffer_add_key.sql + ./SQL/SQLite/8/upgrade_020_alter_buffer_add_joined.sql + ./SQL/SQLite/8/upgrade_030_update_buffer_set_joined_for_channels.sql + ./SQL/SQLite/8/upgrade_999_version.sql diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 81f2fa9e..1548085c 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -355,6 +355,70 @@ NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) { return NetworkId(); } +QList SqliteStorage::connectedNetworks(UserId user) { + QList 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 SqliteStorage::persistentChannels(UserId user, const NetworkId &networkId) { + QHash 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()); diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index 944c46b4..a710b630 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -56,6 +56,13 @@ public slots: virtual bool updateNetwork(UserId user, const NetworkInfo &info); virtual bool removeNetwork(UserId user, const NetworkId &networkId); virtual QList networks(UserId user); + virtual QList connectedNetworks(UserId user); + virtual void setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected); + + /* persistent channels */ + virtual QHash 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 = ""); diff --git a/src/core/storage.h b/src/core/storage.h index 3e8cbb1c..ee4cbfe3 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -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 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 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. diff --git a/version.inc b/version.inc index ccd8341a..9d847c79 100644 --- a/version.inc +++ b/version.inc @@ -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;