From 6c2fee09097ef916912438bdade43eaf74617328 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 9 Jun 2015 07:23:19 +0200 Subject: [PATCH] Cleanup wizard now offers to keep all starred messages. --- src/gui/formdatabasecleanup.cpp | 1 + src/gui/formdatabasecleanup.ui | 29 +++++++++++++++++---------- src/miscellaneous/application.cpp | 2 +- src/miscellaneous/databasecleaner.cpp | 25 ++++++++++++++++++++--- src/miscellaneous/databasecleaner.h | 2 ++ 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/gui/formdatabasecleanup.cpp b/src/gui/formdatabasecleanup.cpp index b41ab2cb3..1dab00d42 100755 --- a/src/gui/formdatabasecleanup.cpp +++ b/src/gui/formdatabasecleanup.cpp @@ -86,6 +86,7 @@ void FormDatabaseCleanup::startPurging() { orders.m_barrierForRemovingOldMessagesInDays = m_ui->m_spinDays->value(); orders.m_removeReadMessages = m_ui->m_checkRemoveReadMessages->isChecked(); orders.m_shrinkDatabase = m_ui->m_checkShrink->isEnabled() && m_ui->m_checkShrink->isChecked(); + orders.m_removeStarredMessages = m_ui->m_checkRemoveStarredMessages->isChecked(); emit purgeRequested(orders); } diff --git a/src/gui/formdatabasecleanup.ui b/src/gui/formdatabasecleanup.ui index 3c3c65061..44a1ec47b 100755 --- a/src/gui/formdatabasecleanup.ui +++ b/src/gui/formdatabasecleanup.ui @@ -20,7 +20,7 @@ Cleanup settings (all checked items are completely erased from database) - + Qt::Horizontal @@ -33,7 +33,7 @@ - + 1 @@ -46,7 +46,17 @@ - + + + + Remove all read messages (not those from recycle bin) + + + true + + + + Remove all messages older than @@ -66,20 +76,17 @@ - - + + - Remove all read messages (not those from recycle bin) - - - true + Shrink database file - + - Shrink database file + Remove all starred messages (including those from recycle bin) diff --git a/src/miscellaneous/application.cpp b/src/miscellaneous/application.cpp index 121c08689..17b64f2a1 100755 --- a/src/miscellaneous/application.cpp +++ b/src/miscellaneous/application.cpp @@ -82,7 +82,7 @@ Mutex *Application::feedUpdateLock() { } void Application::backupDatabaseSettings(bool backup_database, bool backup_settings, - const QString &target_path, const QString &backup_name) { + const QString &target_path, const QString &backup_name) { if (!QFileInfo(target_path).isWritable()) { throw ApplicationException(tr("Output directory is not writable.")); } diff --git a/src/miscellaneous/databasecleaner.cpp b/src/miscellaneous/databasecleaner.cpp index 2b6edbb4c..0a35a8ed9 100755 --- a/src/miscellaneous/databasecleaner.cpp +++ b/src/miscellaneous/databasecleaner.cpp @@ -91,16 +91,29 @@ void DatabaseCleaner::purgeDatabaseData(const CleanerOrders &which_data) { emit purgeFinished(result); } +bool DatabaseCleaner::purgeStarredMessages(const QSqlDatabase &database) { + QSqlQuery query = QSqlQuery(database); + + query.setForwardOnly(true); + query.prepare("DELETE FROM Messages WHERE is_important = :is_important;"); + query.bindValue(":is_important", 1); + + return query.exec(); +} + bool DatabaseCleaner::purgeReadMessages(const QSqlDatabase &database) { QSqlQuery query = QSqlQuery(database); query.setForwardOnly(true); - query.prepare("DELETE FROM Messages WHERE is_deleted = :is_deleted AND is_read = :is_read;"); + query.prepare("DELETE FROM Messages WHERE is_important = :is_important AND is_deleted = :is_deleted AND is_read = :is_read;"); query.bindValue(":is_read", 1); // Remove only messages which are NOT in recycle bin. query.bindValue(":is_deleted", 0); + // Remove only messages which are NOT starred. + query.bindValue(":is_important", 0); + return query.exec(); } @@ -109,9 +122,12 @@ bool DatabaseCleaner::purgeOldMessages(const QSqlDatabase &database, int days) { qint64 since_epoch = QDateTime::currentDateTimeUtc().addDays(-days).toMSecsSinceEpoch(); query.setForwardOnly(true); - query.prepare("DELETE FROM Messages WHERE date_created < :date_created;"); + query.prepare("DELETE FROM Messages WHERE is_important = :is_important AND date_created < :date_created;"); query.bindValue(":date_created", since_epoch); + // Remove only messages which are NOT starred. + query.bindValue(":is_important", 0); + return query.exec(); } @@ -119,8 +135,11 @@ bool DatabaseCleaner::purgeRecycleBin(const QSqlDatabase &database) { QSqlQuery query = QSqlQuery(database); query.setForwardOnly(true); - query.prepare("DELETE FROM Messages WHERE is_deleted = :is_deleted;"); + query.prepare("DELETE FROM Messages WHERE is_important = :is_important AND is_deleted = :is_deleted;"); query.bindValue(":is_deleted", 1); + // Remove only messages which are NOT starred. + query.bindValue(":is_important", 0); + return query.exec(); } diff --git a/src/miscellaneous/databasecleaner.h b/src/miscellaneous/databasecleaner.h index 62f019708..6673f9a2c 100755 --- a/src/miscellaneous/databasecleaner.h +++ b/src/miscellaneous/databasecleaner.h @@ -28,6 +28,7 @@ struct CleanerOrders { bool m_shrinkDatabase; bool m_removeOldMessages; bool m_removeRecycleBin; + bool m_removeStarredMessages; int m_barrierForRemovingOldMessagesInDays; }; @@ -48,6 +49,7 @@ class DatabaseCleaner : public QObject { void purgeDatabaseData(const CleanerOrders &which_data); private: + bool purgeStarredMessages(const QSqlDatabase &database); bool purgeReadMessages(const QSqlDatabase &database); bool purgeOldMessages(const QSqlDatabase &database, int days); bool purgeRecycleBin(const QSqlDatabase &database);