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);