Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp')
-rw-r--r--src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp86
1 files changed, 77 insertions, 9 deletions
diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
index 4ea30c1f6..746e6a66e 100644
--- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
+++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp
@@ -34,7 +34,6 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
, m_ui(new Ui::DatabaseSettingsWidgetBrowser())
, m_customData(new CustomData(this))
, m_customDataModel(new QStandardItemModel(this))
- , m_browserService(nullptr)
{
m_ui->setupUi(this);
m_ui->removeCustomDataButton->setEnabled(false);
@@ -46,6 +45,8 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
connect(m_ui->customDataTable->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
SLOT(toggleRemoveButton(QItemSelection)));
+ connect(m_ui->customDataTable, SIGNAL(doubleClicked(QModelIndex)), SLOT(editIndex(QModelIndex)));
+ connect(m_customDataModel, SIGNAL(itemChanged(QStandardItem*)), SLOT(editFinished(QStandardItem*)));
// clang-format on
connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey()));
@@ -54,6 +55,7 @@ DatabaseSettingsWidgetBrowser::DatabaseSettingsWidgetBrowser(QWidget* parent)
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(removeSharedEncryptionKeys()));
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList()));
connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SLOT(removeStoredPermissions()));
+ connect(m_ui->refreshDatabaseID, SIGNAL(clicked()), this, SLOT(refreshDatabaseID()));
}
DatabaseSettingsWidgetBrowser::~DatabaseSettingsWidgetBrowser()
@@ -105,7 +107,7 @@ void DatabaseSettingsWidgetBrowser::removeSelectedKey()
if (itemSelectionModel) {
for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) {
QString key = index.data().toString();
- key.insert(0, BrowserService::ASSOCIATE_KEY_PREFIX);
+ key.insert(0, CustomData::BrowserKeyPrefix);
customData()->remove(key);
}
updateModel();
@@ -120,14 +122,18 @@ void DatabaseSettingsWidgetBrowser::toggleRemoveButton(const QItemSelection& sel
void DatabaseSettingsWidgetBrowser::updateModel()
{
m_customDataModel->clear();
- m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")});
+ m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value"), tr("Created")});
for (const QString& key : customData()->keys()) {
- if (key.startsWith(BrowserService::ASSOCIATE_KEY_PREFIX)) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
QString strippedKey = key;
- strippedKey.remove(BrowserService::ASSOCIATE_KEY_PREFIX);
- m_customDataModel->appendRow(QList<QStandardItem*>() << new QStandardItem(strippedKey)
- << new QStandardItem(customData()->value(key)));
+ strippedKey.remove(CustomData::BrowserKeyPrefix);
+ auto created = customData()->value(QString("%1_%2").arg(CustomData::Created, strippedKey));
+ auto createdItem = new QStandardItem(created);
+ createdItem->setEditable(false);
+ m_customDataModel->appendRow(QList<QStandardItem*>()
+ << new QStandardItem(strippedKey)
+ << new QStandardItem(customData()->value(key)) << createdItem);
}
}
@@ -168,7 +174,7 @@ void DatabaseSettingsWidgetBrowser::removeSharedEncryptionKeys()
QStringList keysToRemove;
for (const QString& key : m_db->metadata()->customData()->keys()) {
- if (key.startsWith(BrowserService::ASSOCIATE_KEY_PREFIX)) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
keysToRemove << key;
}
}
@@ -251,7 +257,69 @@ void DatabaseSettingsWidgetBrowser::convertAttributesToCustomData()
return;
}
- m_browserService.convertAttributesToCustomData(m_db);
+ BrowserService::convertAttributesToCustomData(m_db);
+}
+
+void DatabaseSettingsWidgetBrowser::refreshDatabaseID()
+{
+ if (MessageBox::Yes
+ != MessageBox::question(this,
+ tr("Refresh database ID"),
+ tr("Do you really want refresh the database ID?\n"
+ "This is only necessary if your database is a copy of another and the "
+ "browser extension cannot connect."),
+ MessageBox::Yes | MessageBox::Cancel,
+ MessageBox::Cancel)) {
+ return;
+ }
+
+ m_db->rootGroup()->setUuid(QUuid::createUuid());
+}
+
+void DatabaseSettingsWidgetBrowser::editIndex(const QModelIndex& index)
+{
+ Q_ASSERT(index.isValid());
+ if (!index.isValid()) {
+ return;
+ }
+
+ m_valueInEdit = index.data().toString();
+ m_ui->customDataTable->edit(index);
+}
+
+void DatabaseSettingsWidgetBrowser::editFinished(QStandardItem* item)
+{
+ const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel();
+
+ if (itemSelectionModel) {
+ auto indexList = itemSelectionModel->selectedRows(item->column());
+ if (indexList.length() > 0) {
+ QString 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);
+
+ m_db->metadata()->customData()->remove(m_valueInEdit);
+ m_db->metadata()->customData()->set(newValue, tempValue);
+ } else {
+ // Replace just the value
+ for (const QString& key : m_db->metadata()->customData()->keys()) {
+ if (key.startsWith(CustomData::BrowserKeyPrefix)) {
+ if (m_valueInEdit == m_db->metadata()->customData()->value(key)) {
+ m_db->metadata()->customData()->set(key, newValue);
+ break;
+ }
+ }
+ }
+ }
+
+ updateModel();
+ }
+ }
}
// Updates the shared key list after the list is cleared