+++ /dev/null
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '7')
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)
)
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
)
--- /dev/null
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '8')
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);
*/
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.
*
}
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);
}
// 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>();
}
<!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>
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());
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 = "");
*/
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.
quasselVersion = "0.2.0-pre";
quasselDate = "2008-02-21";
- quasselBuild = 573;
+ quasselBuild = 574;
//! Minimum client build number the core needs
clientBuildNeeded = 563;