From 35baeaff7973244bf922442468a546c60a3a52cb Mon Sep 17 00:00:00 2001 From: jNullj <15849761+jNullj@users.noreply.github.com> Date: Sat, 8 Jul 2023 15:49:03 +0300 Subject: [PATCH] Add auto-save delay per database (#9100) Add a new propery autosaveDelay in Metadata of the db. The property is saved in customData to not affect database structure as this setting is unique to keepasxc. The propery sets delay to wait since last modification before saving. Co-authored-by: jNullj --- docs/images/database_settings.png | Bin 47757 -> 61345 bytes docs/topics/DatabaseOperations.adoc | 1 + share/translations/keepassxc_en.ts | 20 ++++ src/core/Metadata.cpp | 32 ++++- src/core/Metadata.h | 3 + src/gui/DatabaseWidget.cpp | 38 +++++- src/gui/DatabaseWidget.h | 5 + .../DatabaseSettingsWidgetGeneral.cpp | 14 +++ .../DatabaseSettingsWidgetGeneral.ui | 54 ++++++++- tests/gui/TestGui.cpp | 111 ++++++++++++++++++ 10 files changed, 272 insertions(+), 6 deletions(-) diff --git a/docs/images/database_settings.png b/docs/images/database_settings.png index 1c26a6ee8c2fb9770577bdcc1edf3e4584d2bb2b..ebc7135604c15fb18330c79b10ce46d1f2fcf638 100644 GIT binary patch literal 61345 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 literal 47757 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 %V7h6qEV_MDTGI--^B8; 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 diff --git a/docs/topics/DatabaseOperations.adoc b/docs/topics/DatabaseOperations.adoc index b3098fc9af..4a5d57f2f6 100644 --- a/docs/topics/DatabaseOperations.adoc +++ b/docs/topics/DatabaseOperations.adoc @@ -333,6 +333,7 @@ image::database_settings.png[] * *Max. history size:* When the history of an entry gets above this size, it is truncated. For example, this happens when entries have large attachments. Set this value small to prevent the database from getting too large (we recommend 6 MiB). * *Use recycle bin:* Select this check-box if you want deleted entries to move to the recycle bin instead of being permanently removed. The recycle bin will be created if it does not already exist after your first deletion. To delete entries permanently, you must empty the recycle bin manually. * *Enable compression:* KeePassXC databases can be compressed before being encrypted. Compression reduces the size of the database and does not have any appreciable affect on speed. It is recommended to always save databases with compression. + * *Autosave delay:* Customize the automatic database save operation by delaying it for a set time since the last change. By default, this option is disabled for fast saving, but can be useful for large databases to avoid delays after each change. 3. Click the Security button in the left-hand menu bar to change your database credentials and change encryption settings. + diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 3b5ae5f4a8..77eb30d70a 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -2041,6 +2041,26 @@ Entries deleted from the recycle bin are removed from the database. + + Autosave delay since last change + + + + Autosave delay + + + + Autosave delay since last change in minutes + + + + min + + + + Autosave delay since last change checkbox + + DatabaseSettingsWidgetKeeShare diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 52a615e288..c3d4b8e1ba 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -28,10 +28,17 @@ const int Metadata::DefaultHistoryMaxItems = 10; const int Metadata::DefaultHistoryMaxSize = 6 * 1024 * 1024; +const int Metadata::DefaultAutosaveDelayMin = 0; // Fallback icon for return by reference static const Metadata::CustomIconData NULL_ICON{}; +namespace customDataKeys +{ + static const QString savedSearch = QStringLiteral("KPXC_SavedSearch"); + static const QString autosaveDelay = QStringLiteral("KPXC_autosaveDelayMin"); +}; // namespace customDataKeys + Metadata::Metadata(QObject* parent) : ModifiableObject(parent) , m_customData(new CustomData(this)) @@ -265,6 +272,19 @@ int Metadata::historyMaxSize() const return m_data.historyMaxSize; } +int Metadata::autosaveDelayMin() const +{ + QString autosaveDelayMinStr = m_customData->value(customDataKeys::autosaveDelay); + if (autosaveDelayMinStr.isNull()) { + // data is not set yet, use default + return Metadata::DefaultAutosaveDelayMin; + } + bool ok; // check for QString to int op failuer + int autosaveDelayMin = autosaveDelayMinStr.toInt(&ok); + Q_ASSERT(ok); + return autosaveDelayMin; +} + CustomData* Metadata::customData() { return m_customData; @@ -478,6 +498,12 @@ void Metadata::setHistoryMaxSize(int value) set(m_data.historyMaxSize, value); } +void Metadata::setAutosaveDelayMin(int value) +{ + Q_ASSERT(value >= 0 && value <= 420000000); + m_customData->set(customDataKeys::autosaveDelay, QString::number(value)); +} + QDateTime Metadata::settingsChanged() const { return m_settingsChanged; @@ -494,7 +520,7 @@ void Metadata::addSavedSearch(const QString& name, const QString& searchtext) auto searches = savedSearches(); searches.insert(name, searchtext); auto json = QJsonDocument::fromVariant(searches); - m_customData->set("KPXC_SavedSearch", json.toJson()); + m_customData->set(customDataKeys::savedSearch, json.toJson()); } void Metadata::deleteSavedSearch(const QString& name) @@ -502,12 +528,12 @@ void Metadata::deleteSavedSearch(const QString& name) auto searches = savedSearches(); searches.remove(name); auto json = QJsonDocument::fromVariant(searches); - m_customData->set("KPXC_SavedSearch", json.toJson()); + m_customData->set(customDataKeys::savedSearch, json.toJson()); } QVariantMap Metadata::savedSearches() { - auto searches = m_customData->value("KPXC_SavedSearch"); + auto searches = m_customData->value(customDataKeys::savedSearch); auto json = QJsonDocument::fromJson(searches.toUtf8()); return json.toVariant().toMap(); } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index ccefdb1c82..6e80ebc099 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -109,11 +109,13 @@ class Metadata : public ModifiableObject int databaseKeyChangeForce() const; int historyMaxItems() const; int historyMaxSize() const; + int autosaveDelayMin() const; CustomData* customData(); const CustomData* customData() const; static const int DefaultHistoryMaxItems; static const int DefaultHistoryMaxSize; + static const int DefaultAutosaveDelayMin; void setGenerator(const QString& value); void setName(const QString& value); @@ -150,6 +152,7 @@ class Metadata : public ModifiableObject void setMasterKeyChangeForce(int value); void setHistoryMaxItems(int value); void setHistoryMaxSize(int value); + void setAutosaveDelayMin(int value); void setUpdateDatetime(bool value); void addSavedSearch(const QString& name, const QString& searchtext); void deleteSavedSearch(const QString& name); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 16392b9f43..440df2afc3 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -222,6 +222,10 @@ DatabaseWidget::DatabaseWidget(QSharedPointer db, QWidget* parent) m_blockAutoSave = false; + m_autosaveTimer = new QTimer(this); + m_autosaveTimer->setSingleShot(true); + connect(m_autosaveTimer, SIGNAL(timeout()), this, SLOT(onAutosaveDelayTimeout())); + m_searchLimitGroup = config()->get(Config::SearchLimitGroup).toBool(); #ifdef WITH_XC_KEESHARE @@ -1528,13 +1532,42 @@ void DatabaseWidget::onGroupChanged() void DatabaseWidget::onDatabaseModified() { - if (!m_blockAutoSave && config()->get(Config::AutoSaveAfterEveryChange).toBool()) { + refreshSearch(); + int autosaveDelayMs = m_db->metadata()->autosaveDelayMin() * 60 * 1000; // min to msec for QTimer + bool autosaveAfterEveryChangeConfig = config()->get(Config::AutoSaveAfterEveryChange).toBool(); + if (autosaveDelayMs > 0 && autosaveAfterEveryChangeConfig) { + // reset delay when modified + m_autosaveTimer->start(autosaveDelayMs); + return; + } + if (!m_blockAutoSave && autosaveAfterEveryChangeConfig) { save(); } else { // Only block once, then reset m_blockAutoSave = false; } - refreshSearch(); +} + +void DatabaseWidget::onAutosaveDelayTimeout() +{ + const bool isAutosaveDelayEnabled = m_db->metadata()->autosaveDelayMin() > 0; + const bool autosaveAfterEveryChangeConfig = config()->get(Config::AutoSaveAfterEveryChange).toBool(); + if (!(isAutosaveDelayEnabled && autosaveAfterEveryChangeConfig)) { + // User might disable the delay/autosave while the timer is running + return; + } + if (!m_blockAutoSave) { + save(); + } else { + // Only block once, then reset + m_blockAutoSave = false; + } +} + +void DatabaseWidget::triggerAutosaveTimer() +{ + m_autosaveTimer->stop(); + QMetaObject::invokeMethod(m_autosaveTimer, "timeout"); } QString DatabaseWidget::getCurrentSearch() @@ -1986,6 +2019,7 @@ bool DatabaseWidget::save() if (performSave(errorMessage)) { m_saveAttempts = 0; m_blockAutoSave = false; + m_autosaveTimer->stop(); // stop autosave delay to avoid triggering another save return true; } diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index daca949e1b..a8ae0511ce 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -233,6 +233,7 @@ public slots: int autoHideTimeout = MessageWidget::DefaultAutoHideTimeout); void showErrorMessage(const QString& errorMessage); void hideMessage(); + void triggerAutosaveTimer(); protected: void closeEvent(QCloseEvent* event) override; @@ -251,6 +252,7 @@ private slots: void onEntryChanged(Entry* entry); void onGroupChanged(); void onDatabaseModified(); + void onAutosaveDelayTimeout(); void connectDatabaseSignals(); void loadDatabase(bool accepted); void unlockDatabase(bool accepted); @@ -309,6 +311,9 @@ private slots: // Autoreload bool m_blockAutoSave; + // Autosave delay + QPointer m_autosaveTimer; + // Auto-Type related QString m_searchStringForAutoType; }; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp index a146ebd7e1..777c464e44 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.cpp @@ -31,6 +31,7 @@ DatabaseSettingsWidgetGeneral::DatabaseSettingsWidgetGeneral(QWidget* parent) connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); + connect(m_ui->autosaveDelayCheckBox, SIGNAL(toggled(bool)), m_ui->autosaveDelaySpinBox, SLOT(setEnabled(bool))); } DatabaseSettingsWidgetGeneral::~DatabaseSettingsWidgetGeneral() = default; @@ -62,6 +63,13 @@ void DatabaseSettingsWidgetGeneral::initialize() m_ui->historyMaxSizeSpinBox->setEnabled(false); m_ui->historyMaxSizeCheckBox->setChecked(false); } + if (meta->autosaveDelayMin() > 0) { + m_ui->autosaveDelaySpinBox->setValue(meta->autosaveDelayMin()); + m_ui->autosaveDelayCheckBox->setChecked(true); + } else { + m_ui->autosaveDelayCheckBox->setChecked(false); + m_ui->autosaveDelaySpinBox->setEnabled(false); + } } void DatabaseSettingsWidgetGeneral::uninitialize() @@ -132,6 +140,12 @@ bool DatabaseSettingsWidgetGeneral::save() truncate = true; } + int autosaveDelayMin = 0; + if (m_ui->autosaveDelayCheckBox->isChecked()) { + autosaveDelayMin = m_ui->autosaveDelaySpinBox->value(); + } + meta->setAutosaveDelayMin(autosaveDelayMin); + if (truncate) { const QList allEntries = m_db->rootGroup()->entriesRecursive(false); for (Entry* entry : allEntries) { diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui index 952b444b1e..2cdf002ad4 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetGeneral.ui @@ -7,7 +7,7 @@ 0 0 453 - 374 + 394 @@ -202,6 +202,58 @@ removed from the database. + + + + + + Autosave delay since last change + + + Autosave delay since last change checkbox + + + Autosave delay + + + + + + + Autosave delay since last change in minutes + + + Autosave delay since last change in minutes + + + min + + + 0 + + + 420000000 + + + 5 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 668a28d38d..a1dc7c967f 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -1470,7 +1470,10 @@ void TestGui::testDatabaseSettings() auto* dbSettingsStackedWidget = dbSettingsDialog->findChild("stackedWidget"); auto* transformRoundsSpinBox = dbSettingsDialog->findChild("transformRoundsSpinBox"); auto advancedToggle = dbSettingsDialog->findChild("advancedSettingsToggle"); + auto* autosaveDelayCheckBox = dbSettingsDialog->findChild("autosaveDelayCheckBox"); + auto* autosaveDelaySpinBox = dbSettingsDialog->findChild("autosaveDelaySpinBox"); auto* dbSettingsButtonBox = dbSettingsDialog->findChild("buttonBox"); + int autosaveDelayTestValue = 2; advancedToggle->setChecked(true); QApplication::processEvents(); @@ -1503,7 +1506,115 @@ void TestGui::testDatabaseSettings() QCOMPARE(historyMaxSizeCheckBox->isChecked(), false); QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Cancel), Qt::LeftButton); + // Test loading default values and setting autosaveDelay + triggerAction("actionDatabaseSettings"); + QVERIFY(autosaveDelayCheckBox->isChecked() == false); + autosaveDelayCheckBox->toggle(); + autosaveDelaySpinBox->setValue(autosaveDelayTestValue); + QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + QTRY_COMPARE(m_db->metadata()->autosaveDelayMin(), autosaveDelayTestValue); + checkSaveDatabase(); + + // Test loading autosaveDelay non-default values + triggerAction("actionDatabaseSettings"); + QTRY_COMPARE(autosaveDelayCheckBox->isChecked(), true); + QTRY_COMPARE(autosaveDelaySpinBox->value(), autosaveDelayTestValue); + QTest::mouseClick(dbSettingsButtonBox->button(QDialogButtonBox::Cancel), Qt::LeftButton); + + // test autosave delay + + // 1 init + config()->set(Config::AutoSaveAfterEveryChange, true); + QSignalSpy writeDbSignalSpy(m_db.data(), &Database::databaseSaved); + + // 2 create new entries + + // 2.a) Click the new entry button and set the title + auto* entryNewAction = m_mainWindow->findChild("actionEntryNew"); + QVERIFY(entryNewAction->isEnabled()); + + auto* toolBar = m_mainWindow->findChild("toolBar"); + QVERIFY(toolBar); + + QWidget* entryNewWidget = toolBar->widgetForAction(entryNewAction); + + QTest::mouseClick(entryNewWidget, Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); + + auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); + QVERIFY(editEntryWidget); + auto* titleEdit = editEntryWidget->findChild("titleEdit"); + QVERIFY(titleEdit); + + QTest::keyClicks(titleEdit, "Test autosaveDelay 1"); + + // 2.b) Save changes + editEntryWidget->setCurrentPage(0); + auto* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + + // 2.c) Make sure file was not modified yet + Tools::wait(150); // due to modify timer + QTRY_COMPARE(writeDbSignalSpy.count(), 0); + + // 2.d) Create second entry to test delay timer reset + QTest::mouseClick(entryNewWidget, Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); + QTest::keyClicks(titleEdit, "Test autosaveDelay 2"); + + // 2.e) Save changes + editEntryWidget->setCurrentPage(0); + editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + + // 3 Double check both true negative and true positive + // 3.a) Test unmodified prior to delay timeout + Tools::wait(150); // due to modify timer + QTRY_COMPARE(writeDbSignalSpy.count(), 0); + + // 3.b) Test modification time after expected + m_dbWidget->triggerAutosaveTimer(); + QTRY_COMPARE(writeDbSignalSpy.count(), 1); + + // 4 Test no delay when disabled autosave or autosaveDelay + // 4.a) create new entry + QTest::mouseClick(entryNewWidget, Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); + QTest::keyClicks(titleEdit, "Test autosaveDelay 3"); + + // 4.b) Save changes + editEntryWidget->setCurrentPage(0); + editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + + // 4.c) Start timer + Tools::wait(150); // due to modify timer + + // 4.d) Disable autosave + config()->set(Config::AutoSaveAfterEveryChange, false); + + // 4.e) Make sure changes are not saved + m_dbWidget->triggerAutosaveTimer(); + QTRY_COMPARE(writeDbSignalSpy.count(), 1); + + // 4.f) Repeat for autosaveDelay + config()->set(Config::AutoSaveAfterEveryChange, true); + QTest::mouseClick(entryNewWidget, Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditMode); + QTest::keyClicks(titleEdit, "Test autosaveDelay 4"); + editEntryWidget->setCurrentPage(0); + editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + Tools::wait(150); // due to modify timer + m_db->metadata()->setAutosaveDelayMin(0); + + // 4.g) Make sure changes are not saved + m_dbWidget->triggerAutosaveTimer(); + QTRY_COMPARE(writeDbSignalSpy.count(), 1); + + // 5 Cleanup + config()->set(Config::AutoSaveAfterEveryChange, false); } void TestGui::testKeePass1Import()