Cleanup wizard now offers to keep all starred messages.

This commit is contained in:
Martin Rotter 2015-06-09 07:23:19 +02:00
parent 562656ed9d
commit 6c2fee0909
5 changed files with 44 additions and 15 deletions

View file

@ -86,6 +86,7 @@ void FormDatabaseCleanup::startPurging() {
orders.m_barrierForRemovingOldMessagesInDays = m_ui->m_spinDays->value(); orders.m_barrierForRemovingOldMessagesInDays = m_ui->m_spinDays->value();
orders.m_removeReadMessages = m_ui->m_checkRemoveReadMessages->isChecked(); orders.m_removeReadMessages = m_ui->m_checkRemoveReadMessages->isChecked();
orders.m_shrinkDatabase = m_ui->m_checkShrink->isEnabled() && m_ui->m_checkShrink->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); emit purgeRequested(orders);
} }

View file

@ -20,7 +20,7 @@
<string>Cleanup settings (all checked items are completely erased from database)</string> <string>Cleanup settings (all checked items are completely erased from database)</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="3" column="2"> <item row="4" column="2">
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -33,7 +33,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="3" column="1"> <item row="4" column="1">
<widget class="QSpinBox" name="m_spinDays"> <widget class="QSpinBox" name="m_spinDays">
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
@ -46,7 +46,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="m_checkRemoveReadMessages">
<property name="text">
<string>Remove all read messages (not those from recycle bin)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="m_checkRemoveOldMessages"> <widget class="QCheckBox" name="m_checkRemoveOldMessages">
<property name="text"> <property name="text">
<string>Remove all messages older than</string> <string>Remove all messages older than</string>
@ -66,20 +76,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" colspan="3"> <item row="3" column="0" colspan="3">
<widget class="QCheckBox" name="m_checkRemoveReadMessages"> <widget class="QCheckBox" name="m_checkShrink">
<property name="text"> <property name="text">
<string>Remove all read messages (not those from recycle bin)</string> <string>Shrink database file</string>
</property>
<property name="checked">
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="3"> <item row="2" column="0" colspan="3">
<widget class="QCheckBox" name="m_checkShrink"> <widget class="QCheckBox" name="m_checkRemoveStarredMessages">
<property name="text"> <property name="text">
<string>Shrink database file</string> <string>Remove all starred messages (including those from recycle bin)</string>
</property> </property>
</widget> </widget>
</item> </item>

View file

@ -82,7 +82,7 @@ Mutex *Application::feedUpdateLock() {
} }
void Application::backupDatabaseSettings(bool backup_database, bool backup_settings, 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()) { if (!QFileInfo(target_path).isWritable()) {
throw ApplicationException(tr("Output directory is not writable.")); throw ApplicationException(tr("Output directory is not writable."));
} }

View file

@ -91,16 +91,29 @@ void DatabaseCleaner::purgeDatabaseData(const CleanerOrders &which_data) {
emit purgeFinished(result); 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) { bool DatabaseCleaner::purgeReadMessages(const QSqlDatabase &database) {
QSqlQuery query = QSqlQuery(database); QSqlQuery query = QSqlQuery(database);
query.setForwardOnly(true); 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); query.bindValue(":is_read", 1);
// Remove only messages which are NOT in recycle bin. // Remove only messages which are NOT in recycle bin.
query.bindValue(":is_deleted", 0); query.bindValue(":is_deleted", 0);
// Remove only messages which are NOT starred.
query.bindValue(":is_important", 0);
return query.exec(); return query.exec();
} }
@ -109,9 +122,12 @@ bool DatabaseCleaner::purgeOldMessages(const QSqlDatabase &database, int days) {
qint64 since_epoch = QDateTime::currentDateTimeUtc().addDays(-days).toMSecsSinceEpoch(); qint64 since_epoch = QDateTime::currentDateTimeUtc().addDays(-days).toMSecsSinceEpoch();
query.setForwardOnly(true); 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); query.bindValue(":date_created", since_epoch);
// Remove only messages which are NOT starred.
query.bindValue(":is_important", 0);
return query.exec(); return query.exec();
} }
@ -119,8 +135,11 @@ bool DatabaseCleaner::purgeRecycleBin(const QSqlDatabase &database) {
QSqlQuery query = QSqlQuery(database); QSqlQuery query = QSqlQuery(database);
query.setForwardOnly(true); 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); query.bindValue(":is_deleted", 1);
// Remove only messages which are NOT starred.
query.bindValue(":is_important", 0);
return query.exec(); return query.exec();
} }

View file

@ -28,6 +28,7 @@ struct CleanerOrders {
bool m_shrinkDatabase; bool m_shrinkDatabase;
bool m_removeOldMessages; bool m_removeOldMessages;
bool m_removeRecycleBin; bool m_removeRecycleBin;
bool m_removeStarredMessages;
int m_barrierForRemovingOldMessagesInDays; int m_barrierForRemovingOldMessagesInDays;
}; };
@ -48,6 +49,7 @@ class DatabaseCleaner : public QObject {
void purgeDatabaseData(const CleanerOrders &which_data); void purgeDatabaseData(const CleanerOrders &which_data);
private: private:
bool purgeStarredMessages(const QSqlDatabase &database);
bool purgeReadMessages(const QSqlDatabase &database); bool purgeReadMessages(const QSqlDatabase &database);
bool purgeOldMessages(const QSqlDatabase &database, int days); bool purgeOldMessages(const QSqlDatabase &database, int days);
bool purgeRecycleBin(const QSqlDatabase &database); bool purgeRecycleBin(const QSqlDatabase &database);