From: Marcus Eggenberger Date: Mon, 18 Feb 2008 12:29:50 +0000 (+0000) Subject: implemented the core part for removing buffers permanently X-Git-Tag: 0.2.0-alpha1~50 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=cd99779fe4a4817283882ba65ddb08533d2ce6f2 implemented the core part for removing buffers permanently --- diff --git a/src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql b/src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql new file mode 100644 index 00000000..38bf5643 --- /dev/null +++ b/src/core/SQL/SQLite/7/delete_backlog_for_buffer.sql @@ -0,0 +1,2 @@ +DELETE FROM backlog +WHERE bufferid = :bufferid diff --git a/src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql b/src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql new file mode 100644 index 00000000..91dfeb97 --- /dev/null +++ b/src/core/SQL/SQLite/7/delete_buffer_for_bufferid.sql @@ -0,0 +1,2 @@ +DELETE FROM buffer +WHERE bufferid = :bufferid diff --git a/src/core/SQL/SQLite/7/select_bufferExists.sql b/src/core/SQL/SQLite/7/select_bufferExists.sql new file mode 100644 index 00000000..47caae17 --- /dev/null +++ b/src/core/SQL/SQLite/7/select_bufferExists.sql @@ -0,0 +1,3 @@ +SELECT bufferid +FROM buffer +WHERE userid = :userid AND bufferid = :bufferid diff --git a/src/core/core.cpp b/src/core/core.cpp index c0b9a503..add0e900 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -265,6 +265,11 @@ QList Core::requestBuffers(UserId user, QDateTime since) { return instance()->storage->requestBuffers(user, since); } +bool Core::removeBuffer(const UserId &user, const BufferId &bufferId) { + QMutexLocker locker(&mutex); + return instance()->storage->removeBuffer(user, bufferId); +} + void Core::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) { QMutexLocker locker(&mutex); return instance()->storage->setBufferLastSeen(user, bufferId, seenDate); diff --git a/src/core/core.h b/src/core/core.h index 0cba29eb..97725ddc 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -158,8 +158,20 @@ class Core : public QObject { */ static QList requestBuffers(UserId user, QDateTime since = QDateTime()); + //! Remove permanently a buffer and it's content from the storage backend + /** This call cannot be reverted! + * \note This method is threadsafe. + * + * \param user The user who is the owner of the buffer + * \param bufferId The bufferId + * \return true if successfull + */ + static bool removeBuffer(const UserId &user, const BufferId &bufferId); + //! Update the LastSeenDate for a Buffer /** This Method is used to make the LastSeenDate of a Buffer persistent + * \note This method is threadsafe. + * * \param user The Owner of that Buffer * \param bufferId The buffer id * \param seenDate Time the Buffer has been visited the last time @@ -168,6 +180,8 @@ class Core : public QObject { //! Get a Hash of all last seen dates. /** This Method is called when the Quassel Core is started to restore the lastSeenDates + * \note This method is threadsafe. + * * \param user The Owner of the buffers */ static QHash bufferLastSeenDates(UserId user); diff --git a/src/core/sql.qrc b/src/core/sql.qrc index b2ce8a42..69be2c91 100644 --- a/src/core/sql.qrc +++ b/src/core/sql.qrc @@ -39,7 +39,9 @@ ./SQL/SQLite/6/upgrade_160_update_msgtype.sql ./SQL/SQLite/6/upgrade_999_version.sql ./SQL/SQLite/7/delete_backlog_by_uid.sql + ./SQL/SQLite/7/delete_backlog_for_buffer.sql ./SQL/SQLite/7/delete_backlog_for_network.sql + ./SQL/SQLite/7/delete_buffer_for_bufferid.sql ./SQL/SQLite/7/delete_buffers_by_uid.sql ./SQL/SQLite/7/delete_buffers_for_network.sql ./SQL/SQLite/7/delete_ircservers_for_network.sql @@ -53,7 +55,9 @@ ./SQL/SQLite/7/insert_sender.sql ./SQL/SQLite/7/insert_server.sql ./SQL/SQLite/7/select_authuser.sql + ./SQL/SQLite/7/select_buffer_lastseen_dates.sql ./SQL/SQLite/7/select_bufferByName.sql + ./SQL/SQLite/7/select_bufferExists.sql ./SQL/SQLite/7/select_buffers.sql ./SQL/SQLite/7/select_lastMessage.sql ./SQL/SQLite/7/select_messageRange.sql @@ -75,6 +79,7 @@ ./SQL/SQLite/7/setup_070_coreinfo.sql ./SQL/SQLite/7/setup_080_ircservers.sql ./SQL/SQLite/7/setup_999_version.sql + ./SQL/SQLite/7/update_buffer_lastseen.sql ./SQL/SQLite/7/update_network.sql ./SQL/SQLite/7/update_username.sql ./SQL/SQLite/7/update_userpassword.sql diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 507acee5..0e3ea639 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -336,6 +336,21 @@ bool SqliteStorage::isValidNetwork(UserId user, const NetworkId &networkId) { return true; } +bool SqliteStorage::isValidBuffer(const UserId &user, const BufferId &bufferId) { + QSqlQuery query(logDb()); + query.prepare(queryString("select_bufferExists")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":bufferid", bufferId.toInt()); + query.exec(); + + watchQuery(&query); + if(!query.first()) + return false; + + Q_ASSERT(!query.next()); + return true; +} + NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) { QSqlQuery query(logDb()); query.prepare("SELECT networkid FROM network " @@ -409,6 +424,27 @@ QList SqliteStorage::requestBuffers(UserId user, QDateTime since) { return bufferlist; } +bool SqliteStorage::removeBuffer(const UserId &user, const BufferId &bufferId) { + if(!isValidBuffer(user, bufferId)) + return false; + + QSqlQuery delBacklogQuery(logDb()); + delBacklogQuery.prepare(queryString("delete_backlog_for_buffer")); + delBacklogQuery.bindValue(":bufferid", bufferId.toInt()); + delBacklogQuery.exec(); + if(!watchQuery(&delBacklogQuery)) + return false; + + QSqlQuery delBufferQuery(logDb()); + delBufferQuery.prepare(queryString("delete_buffer_for_bufferid")); + delBufferQuery.bindValue(":bufferid", bufferId.toInt()); + delBufferQuery.exec(); + if(!watchQuery(&delBufferQuery)) + return false; + + return true; +} + void SqliteStorage::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) { QSqlQuery *query = cachedQuery("update_buffer_lastseen"); query->bindValue(":userid", user.toInt()); diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index b7db876f..c553bdc7 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -60,6 +60,7 @@ public slots: /* Buffer handling */ virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = ""); virtual QList requestBuffers(UserId user, QDateTime since = QDateTime()); + virtual bool removeBuffer(const UserId &user, const BufferId &bufferId); virtual void setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate); virtual QHash bufferLastSeenDates(UserId user); @@ -78,6 +79,7 @@ protected: private: static QString backlogFile(); bool isValidNetwork(UserId user, const NetworkId &networkId); + bool isValidBuffer(const UserId &user, const BufferId &bufferId); NetworkId getNetworkId(UserId user, const QString &network); void createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer); }; diff --git a/src/core/storage.h b/src/core/storage.h index c7444b11..8b264f44 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -117,8 +117,7 @@ class Storage : public QObject { virtual NetworkId createNetwork(UserId user, const NetworkInfo &info) = 0; //! Apply the changes to NetworkInfo info to the storage engine - /** \note This method is thredsafe. - * + /** * \param user The core user * \param networkInfo The Updated NetworkInfo * \return true if successfull. @@ -170,6 +169,14 @@ class Storage : public QObject { */ virtual QList requestBuffers(UserId user, QDateTime since = QDateTime()) = 0; + //! Remove permanently a buffer and it's content from the storage backend + /** This call cannot be reverted! + * \param user The user who is the owner of the buffer + * \param bufferId The bufferId + * \return true if successfull + */ + virtual bool removeBuffer(const UserId &user, const BufferId &bufferId) = 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 diff --git a/version.inc b/version.inc index 3a37ae61..62ba3531 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-18"; - quasselBuild = 528; + quasselBuild = 530; //! Minimum client build number the core needs clientBuildNeeded = 526;