diff options
Diffstat (limited to 'src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp')
-rw-r--r-- | src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp | 86 |
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 |