// For license of this file, see /LICENSE.md. #include "gui/dialogs/formdatabasecleanup.h" #include "miscellaneous/application.h" #include "miscellaneous/databasefactory.h" #include "miscellaneous/iconfactory.h" #include #include #include FormDatabaseCleanup::FormDatabaseCleanup(QWidget* parent) : QDialog(parent), m_ui(new Ui::FormDatabaseCleanup), m_cleaner(nullptr) { m_ui->setupUi(this); // Set flags and attributes. setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint); setWindowIcon(qApp->icons()->fromTheme(QSL("edit-clear"))); connect(m_ui->m_spinDays, static_cast(&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_lblResult->setStatus(WidgetWithStatus::Information, tr("I am ready."), tr("I am ready.")); loadDatabaseInfo(); } void FormDatabaseCleanup::closeEvent(QCloseEvent* event) { if (m_ui->m_progressBar->isEnabled()) { event->ignore(); } else { QDialog::closeEvent(event); } } void FormDatabaseCleanup::keyPressEvent(QKeyEvent* event) { if (m_ui->m_progressBar->isEnabled()) { event->ignore(); } else { QDialog::keyPressEvent(event); } } void FormDatabaseCleanup::updateDaysSuffix(int number) { m_ui->m_spinDays->setSuffix(tr(" day(s)", 0, number)); } void FormDatabaseCleanup::startPurging() { CleanerOrders orders; orders.m_removeRecycleBin = m_ui->m_checkRemoveRecycleBin->isChecked(); orders.m_removeOldMessages = m_ui->m_checkRemoveOldMessages->isChecked(); 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); } void FormDatabaseCleanup::onPurgeStarted() { m_ui->m_progressBar->setValue(0); m_ui->m_progressBar->setEnabled(true); m_ui->m_btnBox->setEnabled(false); m_ui->m_lblResult->setStatus(WidgetWithStatus::Information, tr("Database cleanup is running."), tr("Database cleanup is running.")); } void FormDatabaseCleanup::onPurgeProgress(int progress, const QString& description) { m_ui->m_progressBar->setValue(progress); m_ui->m_lblResult->setStatus(WidgetWithStatus::Information, description, description); } void FormDatabaseCleanup::onPurgeFinished(bool finished) { m_ui->m_progressBar->setEnabled(false); m_ui->m_progressBar->setValue(0); m_ui->m_btnBox->setEnabled(true); if (finished) { m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, tr("Database cleanup is completed."), tr("Database cleanup is completed.")); } else { m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Database cleanup failed."), tr("Database cleanup failed.")); } loadDatabaseInfo(); } void FormDatabaseCleanup::loadDatabaseInfo() { qint64 file_size = qApp->database()->getDatabaseFileSize(); qint64 data_size = qApp->database()->getDatabaseDataSize(); QString file_size_str = file_size > 0 ? QString::number(file_size / 1000000.0) + QL1S(" MB") : tr("unknown"); QString data_size_str = data_size > 0 ? QString::number(data_size / 1000000.0) + QL1S(" MB") : tr("unknown"); m_ui->m_txtFileSize->setText(tr("file: %1, data: %2").arg(file_size_str, data_size_str)); m_ui->m_txtDatabaseType->setText(qApp->database()->humanDriverName(qApp->database()->activeDatabaseDriver())); m_ui->m_checkShrink->setChecked(m_ui->m_checkShrink->isEnabled()); }