From 10786de3d0230f422b45c59c4f06ecf610a074bf Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sat, 12 Oct 2024 22:56:23 +0300 Subject: [PATCH] Fix renaming extension key name in Database Settings --- src/browser/BrowserService.cpp | 2 +- src/core/CustomData.cpp | 4 +-- .../DatabaseSettingsWidgetBrowser.cpp | 35 +++++++++++++------ .../DatabaseSettingsWidgetBrowser.h | 4 ++- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index d60a55109f..91d85aca28 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -611,7 +611,7 @@ QString BrowserService::storeKey(const QString& key) hideWindow(); db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key); - db->metadata()->customData()->set(QString("%1_%2").arg(CustomData::Created, id), + db->metadata()->customData()->set(QString("%1%2").arg(CustomData::Created, id), QLocale::system().toString(Clock::currentDateTime(), QLocale::ShortFormat)); return id; } diff --git a/src/core/CustomData.cpp b/src/core/CustomData.cpp index 1772cd62bc..bbd1d3b5e2 100644 --- a/src/core/CustomData.cpp +++ b/src/core/CustomData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 KeePassXC Team + * Copyright (C) 2024 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ #include "core/Global.h" const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED"); -const QString CustomData::Created = QStringLiteral("_CREATED"); +const QString CustomData::Created = QStringLiteral("_CREATED_"); const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_"); const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: "); const QString CustomData::ExcludeFromReportsLegacy = QStringLiteral("KnownBad"); diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp index 7658475b3d..524d2a6401 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 KeePassXC Team + * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2018 Sami Vänttinen * * This program is free software: you can redistribute it and/or modify @@ -124,7 +124,7 @@ void DatabaseSettingsWidgetBrowser::updateModel() if (key.startsWith(CustomData::BrowserKeyPrefix)) { QString strippedKey = key; strippedKey.remove(CustomData::BrowserKeyPrefix); - auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey)); + auto created = customData()->value(getKeyWithPrefix(CustomData::Created, strippedKey)); auto createdItem = new QStandardItem(created); createdItem->setEditable(false); m_customDataModel->appendRow(QList() @@ -267,18 +267,16 @@ void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item) if (itemSelectionModel) { auto indexList = itemSelectionModel->selectedRows(item->column()); - if (indexList.length() > 0) { - QString newValue = item->index().data().toString(); + if (!indexList.isEmpty()) { + auto newValue = item->index().data().toString(); // The key is edited if (item->column() == 0) { - // Get the old key/value pair, remove it and replace it - m_valueInEdit.insert(0, CustomData::BrowserKeyPrefix); - auto tempValue = customData()->value(m_valueInEdit); - newValue.insert(0, CustomData::BrowserKeyPrefix); + // Update created timestamp with the new key + replaceKey(CustomData::Created, m_valueInEdit, newValue); - m_db->metadata()->customData()->remove(m_valueInEdit); - m_db->metadata()->customData()->set(newValue, tempValue); + // Get the old key/value pair, remove it and replace it + replaceKey(CustomData::BrowserKeyPrefix, m_valueInEdit, newValue); } else { // Replace just the value for (const QString& key : m_db->metadata()->customData()->keys()) { @@ -301,3 +299,20 @@ void DatabaseSettingsWidgetBrowser::updateSharedKeyList() { updateModel(); } + +// Replaces a key and the created timestamp for it +void DatabaseSettingsWidgetBrowser::replaceKey(const QString& prefix, + const QString& oldName, + const QString& newName) const +{ + const auto oldKey = getKeyWithPrefix(prefix, oldName); + const auto newKey = getKeyWithPrefix(prefix, newName); + const auto tempValue = customData()->value(oldKey); + m_db->metadata()->customData()->remove(oldKey); + m_db->metadata()->customData()->set(newKey, tempValue); +} + +QString DatabaseSettingsWidgetBrowser::getKeyWithPrefix(const QString& prefix, const QString& key) const +{ + return QString("%1%2").arg(prefix, key); +} diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h index e032e414f7..1f20bf46b4 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 KeePassXC Team + * Copyright (C) 2024 KeePassXC Team * Copyright (C) 2018 Sami Vänttinen * * This program is free software: you can redistribute it and/or modify @@ -62,6 +62,8 @@ private slots: private: void updateModel(); void settingsWarning(); + void replaceKey(const QString& prefix, const QString& oldName, const QString& newName) const; + QString getKeyWithPrefix(const QString& prefix, const QString& key) const; protected: void showEvent(QShowEvent* event) override;