mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-01 01:46:57 +01:00
simplified DB cleanup logic, allow to delete all messages
This commit is contained in:
parent
28e42e6403
commit
f910e98276
@ -30,7 +30,7 @@
|
|||||||
<url type="donation">https://martinrotter.github.io/donate/</url>
|
<url type="donation">https://martinrotter.github.io/donate/</url>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
<release version="3.5.7" date="2019-04-05"/>
|
<release version="3.5.7" date="2019-04-09"/>
|
||||||
</releases>
|
</releases>
|
||||||
<content_rating type="oars-1.0">
|
<content_rating type="oars-1.0">
|
||||||
<content_attribute id="violence-cartoon">none</content_attribute>
|
<content_attribute id="violence-cartoon">none</content_attribute>
|
||||||
|
@ -16,30 +16,20 @@ FormDatabaseCleanup::FormDatabaseCleanup(QWidget* parent) : QDialog(parent), m_u
|
|||||||
// Set flags and attributes.
|
// Set flags and attributes.
|
||||||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
|
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
|
||||||
setWindowIcon(qApp->icons()->fromTheme(QSL("edit-clear")));
|
setWindowIcon(qApp->icons()->fromTheme(QSL("edit-clear")));
|
||||||
|
|
||||||
connect(m_ui->m_spinDays, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &FormDatabaseCleanup::updateDaysSuffix);
|
connect(m_ui->m_spinDays, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &FormDatabaseCleanup::updateDaysSuffix);
|
||||||
|
connect(m_ui->m_btnBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &FormDatabaseCleanup::startPurging);
|
||||||
|
connect(this, &FormDatabaseCleanup::purgeRequested, &m_cleaner, &DatabaseCleaner::purgeDatabaseData);
|
||||||
|
connect(&m_cleaner, &DatabaseCleaner::purgeStarted, this, &FormDatabaseCleanup::onPurgeStarted);
|
||||||
|
connect(&m_cleaner, &DatabaseCleaner::purgeProgress, this, &FormDatabaseCleanup::onPurgeProgress);
|
||||||
|
connect(&m_cleaner, &DatabaseCleaner::purgeFinished, this, &FormDatabaseCleanup::onPurgeFinished);
|
||||||
|
|
||||||
m_ui->m_spinDays->setValue(DEFAULT_DAYS_TO_DELETE_MSG);
|
m_ui->m_spinDays->setValue(DEFAULT_DAYS_TO_DELETE_MSG);
|
||||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Information, tr("I am ready."), tr("I am ready."));
|
m_ui->m_lblResult->setStatus(WidgetWithStatus::Information, tr("I am ready."), tr("I am ready."));
|
||||||
|
|
||||||
loadDatabaseInfo();
|
loadDatabaseInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
FormDatabaseCleanup::~FormDatabaseCleanup() {
|
|
||||||
qDebug("Destroying FormDatabaseCleanup instance.");
|
|
||||||
}
|
|
||||||
|
|
||||||
void FormDatabaseCleanup::setCleaner(DatabaseCleaner* cleaner) {
|
|
||||||
if (m_cleaner != nullptr) {
|
|
||||||
disconnect(this, 0, m_cleaner, 0);
|
|
||||||
disconnect(m_cleaner, 0, this, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_cleaner = cleaner;
|
|
||||||
connect(m_ui->m_btnBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &FormDatabaseCleanup::startPurging);
|
|
||||||
connect(this, &FormDatabaseCleanup::purgeRequested, m_cleaner, &DatabaseCleaner::purgeDatabaseData);
|
|
||||||
connect(m_cleaner, &DatabaseCleaner::purgeStarted, this, &FormDatabaseCleanup::onPurgeStarted);
|
|
||||||
connect(m_cleaner, &DatabaseCleaner::purgeProgress, this, &FormDatabaseCleanup::onPurgeProgress);
|
|
||||||
connect(m_cleaner, &DatabaseCleaner::purgeFinished, this, &FormDatabaseCleanup::onPurgeFinished);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FormDatabaseCleanup::closeEvent(QCloseEvent* event) {
|
void FormDatabaseCleanup::closeEvent(QCloseEvent* event) {
|
||||||
if (m_ui->m_progressBar->isEnabled()) {
|
if (m_ui->m_progressBar->isEnabled()) {
|
||||||
event->ignore();
|
event->ignore();
|
||||||
|
@ -13,12 +13,8 @@ class FormDatabaseCleanup : public QDialog {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
explicit FormDatabaseCleanup(QWidget* parent = nullptr);
|
||||||
// Constructors.
|
virtual ~FormDatabaseCleanup() = default;
|
||||||
explicit FormDatabaseCleanup(QWidget* parent = 0);
|
|
||||||
virtual ~FormDatabaseCleanup();
|
|
||||||
|
|
||||||
void setCleaner(DatabaseCleaner* cleaner);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent* event);
|
void closeEvent(QCloseEvent* event);
|
||||||
@ -39,7 +35,7 @@ class FormDatabaseCleanup : public QDialog {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<Ui::FormDatabaseCleanup> m_ui;
|
QScopedPointer<Ui::FormDatabaseCleanup> m_ui;
|
||||||
DatabaseCleaner* m_cleaner;
|
DatabaseCleaner m_cleaner;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FORMDATABASECLEANUP_H
|
#endif // FORMDATABASECLEANUP_H
|
||||||
|
@ -35,9 +35,6 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QSpinBox" name="m_spinDays">
|
<widget class="QSpinBox" name="m_spinDays">
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>1000</number>
|
<number>1000</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -99,7 +99,6 @@ void FormMain::showDbCleanupAssistant() {
|
|||||||
if (qApp->feedUpdateLock()->tryLock()) {
|
if (qApp->feedUpdateLock()->tryLock()) {
|
||||||
FormDatabaseCleanup form(this);
|
FormDatabaseCleanup form(this);
|
||||||
|
|
||||||
form.setCleaner(qApp->feedReader()->databaseCleaner());
|
|
||||||
form.exec();
|
form.exec();
|
||||||
|
|
||||||
// Reload needed stuff.
|
// Reload needed stuff.
|
||||||
|
@ -22,7 +22,7 @@ class DatabaseCleaner : public QObject {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors.
|
// Constructors.
|
||||||
explicit DatabaseCleaner(QObject* parent = 0);
|
explicit DatabaseCleaner(QObject* parent = nullptr);
|
||||||
virtual ~DatabaseCleaner();
|
virtual ~DatabaseCleaner();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
#include "core/messagesmodel.h"
|
#include "core/messagesmodel.h"
|
||||||
#include "core/messagesproxymodel.h"
|
#include "core/messagesproxymodel.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "miscellaneous/databasecleaner.h"
|
|
||||||
#include "miscellaneous/mutex.h"
|
#include "miscellaneous/mutex.h"
|
||||||
#include "services/abstract/cacheforserviceroot.h"
|
#include "services/abstract/cacheforserviceroot.h"
|
||||||
#include "services/abstract/serviceroot.h"
|
#include "services/abstract/serviceroot.h"
|
||||||
@ -24,8 +23,7 @@
|
|||||||
|
|
||||||
FeedReader::FeedReader(QObject* parent)
|
FeedReader::FeedReader(QObject* parent)
|
||||||
: QObject(parent), m_feedServices(QList<ServiceEntryPoint*>()),
|
: QObject(parent), m_feedServices(QList<ServiceEntryPoint*>()),
|
||||||
m_autoUpdateTimer(new QTimer(this)), m_feedDownloader(nullptr),
|
m_autoUpdateTimer(new QTimer(this)), m_feedDownloader(nullptr) {
|
||||||
m_dbCleanerThread(nullptr), m_dbCleaner(nullptr) {
|
|
||||||
m_feedsModel = new FeedsModel(this);
|
m_feedsModel = new FeedsModel(this);
|
||||||
m_feedsProxyModel = new FeedsProxyModel(m_feedsModel, this);
|
m_feedsProxyModel = new FeedsProxyModel(m_feedsModel, this);
|
||||||
m_messagesModel = new MessagesModel(this);
|
m_messagesModel = new MessagesModel(this);
|
||||||
@ -133,23 +131,6 @@ bool FeedReader::isFeedUpdateRunning() const {
|
|||||||
return m_feedDownloader != nullptr && m_feedDownloader->isUpdateRunning();
|
return m_feedDownloader != nullptr && m_feedDownloader->isUpdateRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseCleaner* FeedReader::databaseCleaner() {
|
|
||||||
if (m_dbCleaner == nullptr) {
|
|
||||||
m_dbCleaner = new DatabaseCleaner();
|
|
||||||
m_dbCleanerThread = new QThread();
|
|
||||||
|
|
||||||
// Downloader setup.
|
|
||||||
qRegisterMetaType<CleanerOrders>("CleanerOrders");
|
|
||||||
m_dbCleaner->moveToThread(m_dbCleanerThread);
|
|
||||||
connect(m_dbCleanerThread, SIGNAL(finished()), m_dbCleanerThread, SLOT(deleteLater()));
|
|
||||||
|
|
||||||
// Connections are made, start the feed downloader thread.
|
|
||||||
m_dbCleanerThread->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_dbCleaner;
|
|
||||||
}
|
|
||||||
|
|
||||||
FeedDownloader* FeedReader::feedDownloader() const {
|
FeedDownloader* FeedReader::feedDownloader() const {
|
||||||
return m_feedDownloader;
|
return m_feedDownloader;
|
||||||
}
|
}
|
||||||
@ -236,27 +217,12 @@ void FeedReader::quit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dbCleanerThread != nullptr && m_dbCleanerThread->isRunning()) {
|
|
||||||
qDebug("Quitting database cleaner thread.");
|
|
||||||
m_dbCleanerThread->quit();
|
|
||||||
|
|
||||||
if (!m_dbCleanerThread->wait(CLOSE_LOCK_TIMEOUT)) {
|
|
||||||
qCritical("Database cleaner thread is running despite it was told to quit. Terminating it.");
|
|
||||||
m_dbCleanerThread->terminate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close workers.
|
// Close workers.
|
||||||
if (m_feedDownloader != nullptr) {
|
if (m_feedDownloader != nullptr) {
|
||||||
qDebug("Feed downloader exists. Deleting it from memory.");
|
qDebug("Feed downloader exists. Deleting it from memory.");
|
||||||
m_feedDownloader->deleteLater();
|
m_feedDownloader->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dbCleaner != nullptr) {
|
|
||||||
qDebug("Database cleaner exists. Deleting it from memory.");
|
|
||||||
m_dbCleaner->deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool()) {
|
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool()) {
|
||||||
m_feedsModel->markItemCleared(m_feedsModel->rootItem(), true);
|
m_feedsModel->markItemCleared(m_feedsModel->rootItem(), true);
|
||||||
}
|
}
|
||||||
|
@ -15,14 +15,13 @@ class MessagesModel;
|
|||||||
class MessagesProxyModel;
|
class MessagesProxyModel;
|
||||||
class FeedsProxyModel;
|
class FeedsProxyModel;
|
||||||
class ServiceEntryPoint;
|
class ServiceEntryPoint;
|
||||||
class DatabaseCleaner;
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
|
||||||
class FeedReader : public QObject {
|
class FeedReader : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit FeedReader(QObject* parent = 0);
|
explicit FeedReader(QObject* parent = nullptr);
|
||||||
virtual ~FeedReader();
|
virtual ~FeedReader();
|
||||||
|
|
||||||
// List of all installed "feed service plugins", including obligatory
|
// List of all installed "feed service plugins", including obligatory
|
||||||
@ -30,7 +29,6 @@ class FeedReader : public QObject {
|
|||||||
QList<ServiceEntryPoint*> feedServices();
|
QList<ServiceEntryPoint*> feedServices();
|
||||||
|
|
||||||
// Access to DB cleaner.
|
// Access to DB cleaner.
|
||||||
DatabaseCleaner* databaseCleaner();
|
|
||||||
FeedDownloader* feedDownloader() const;
|
FeedDownloader* feedDownloader() const;
|
||||||
FeedsModel* feedsModel() const;
|
FeedsModel* feedsModel() const;
|
||||||
MessagesModel* messagesModel() const;
|
MessagesModel* messagesModel() const;
|
||||||
@ -84,8 +82,6 @@ class FeedReader : public QObject {
|
|||||||
int m_globalAutoUpdateInitialInterval;
|
int m_globalAutoUpdateInitialInterval;
|
||||||
int m_globalAutoUpdateRemainingInterval;
|
int m_globalAutoUpdateRemainingInterval;
|
||||||
FeedDownloader* m_feedDownloader;
|
FeedDownloader* m_feedDownloader;
|
||||||
QThread* m_dbCleanerThread;
|
|
||||||
DatabaseCleaner* m_dbCleaner;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FEEDREADER_H
|
#endif // FEEDREADER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user