1 // For license of this file, see <project-root-folder>/LICENSE.md.
2
3 #include "database/databasecleaner.h"
4
5 #include "database/databasequeries.h"
6 #include "miscellaneous/application.h"
7
8 #include <QDebug>
9 #include <QThread>
10
DatabaseCleaner(QObject * parent)11 DatabaseCleaner::DatabaseCleaner(QObject* parent) : QObject(parent) {}
12
purgeDatabaseData(CleanerOrders which_data)13 void DatabaseCleaner::purgeDatabaseData(CleanerOrders which_data) {
14 qDebugNN << LOGSEC_DB << "Performing database cleanup in thread: '" << QThread::currentThreadId() << "'.";
15
16 // Inform everyone about the start of the process.
17 emit purgeStarted();
18 bool result = true;
19 const int difference = 99 / 12;
20 int progress = 0;
21 QSqlDatabase database = qApp->database()->driver()->connection(metaObject()->className());
22
23 if (which_data.m_removeReadMessages) {
24 progress += difference;
25 emit purgeProgress(progress, tr("Removing read articles..."));
26
27 // Remove read messages.
28 result &= purgeReadMessages(database);
29 progress += difference;
30 emit purgeProgress(progress, tr("Read articles purged..."));
31 }
32
33 if (which_data.m_removeRecycleBin) {
34 progress += difference;
35 emit purgeProgress(progress, tr("Purging recycle bin..."));
36
37 // Remove read messages.
38 result &= purgeRecycleBin(database);
39 progress += difference;
40 emit purgeProgress(progress, tr("Recycle bin purged..."));
41 }
42
43 if (which_data.m_removeOldMessages) {
44 progress += difference;
45 emit purgeProgress(progress, tr("Removing old articles..."));
46
47 // Remove old messages.
48 result &= purgeOldMessages(database, which_data.m_barrierForRemovingOldMessagesInDays);
49 progress += difference;
50 emit purgeProgress(progress, tr("Old articles purged..."));
51 }
52
53 if (which_data.m_removeStarredMessages) {
54 progress += difference;
55 emit purgeProgress(progress, tr("Removing starred articles..."));
56
57 // Remove old messages.
58 result &= purgeStarredMessages(database);
59 progress += difference;
60 emit purgeProgress(progress, tr("Starred articles purged..."));
61 }
62
63 result &= DatabaseQueries::purgeLeftoverLabelAssignments(database);
64
65 if (which_data.m_shrinkDatabase) {
66 progress += difference;
67 emit purgeProgress(progress, tr("Shrinking database file..."));
68
69 // Call driver-specific vacuuming function.
70 result &= qApp->database()->driver()->vacuumDatabase();
71 progress += difference;
72 emit purgeProgress(progress, tr("Database file shrinked..."));
73 }
74
75 emit purgeFinished(result);
76 }
77
purgeStarredMessages(const QSqlDatabase & database)78 bool DatabaseCleaner::purgeStarredMessages(const QSqlDatabase& database) {
79 return DatabaseQueries::purgeImportantMessages(database);
80 }
81
purgeReadMessages(const QSqlDatabase & database)82 bool DatabaseCleaner::purgeReadMessages(const QSqlDatabase& database) {
83 return DatabaseQueries::purgeReadMessages(database);
84 }
85
purgeOldMessages(const QSqlDatabase & database,int days)86 bool DatabaseCleaner::purgeOldMessages(const QSqlDatabase& database, int days) {
87 return DatabaseQueries::purgeOldMessages(database, days);
88 }
89
purgeRecycleBin(const QSqlDatabase & database)90 bool DatabaseCleaner::purgeRecycleBin(const QSqlDatabase& database) {
91 return DatabaseQueries::purgeRecycleBin(database);
92 }
93