-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add warning for duplicate URLs with Additional URLs list (#9588)
- Loading branch information
1 parent
e9ea5b4
commit f30604c
Showing
4 changed files
with
37 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
/* | ||
* Copyright (C) 2023 KeePassXC Team <[email protected]> | ||
* Copyright (C) 2012 Felix Geyer <[email protected]> | ||
* Copyright (C) 2019 KeePassXC Team <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -18,6 +18,7 @@ | |
|
||
#include "EntryURLModel.h" | ||
|
||
#include "browser/BrowserService.h" | ||
#include "core/EntryAttributes.h" | ||
#include "core/Tools.h" | ||
#include "gui/Icons.h" | ||
|
@@ -53,7 +54,7 @@ void EntryURLModel::setEntryAttributes(EntryAttributes* entryAttributes) | |
|
||
endResetModel(); | ||
} | ||
|
||
#include <QDebug> | ||
QVariant EntryURLModel::data(const QModelIndex& index, int role) const | ||
{ | ||
if (!index.isValid()) { | ||
|
@@ -68,31 +69,42 @@ QVariant EntryURLModel::data(const QModelIndex& index, int role) const | |
const auto value = m_entryAttributes->value(key); | ||
const auto urlValid = Tools::checkUrlValid(value); | ||
|
||
if (role == Qt::BackgroundRole && !urlValid) { | ||
// Check for duplicate URLs in the attribute list. Excludes the current key/value from the comparison. | ||
auto customAttributeKeys = m_entryAttributes->customKeys(); | ||
customAttributeKeys.removeOne(key); | ||
const auto duplicateUrl = m_entryAttributes->values(customAttributeKeys).contains(value) || value == m_entryUrl; | ||
|
||
if (role == Qt::BackgroundRole && (!urlValid || duplicateUrl)) { | ||
StateColorPalette statePalette; | ||
return statePalette.color(StateColorPalette::ColorRole::Error); | ||
} else if (role == Qt::DecorationRole && !urlValid) { | ||
} else if (role == Qt::DecorationRole && (!urlValid || duplicateUrl)) { | ||
return m_errorIcon; | ||
} else if (role == Qt::DisplayRole || role == Qt::EditRole) { | ||
return value; | ||
} else if (role == Qt::ToolTipRole && duplicateUrl) { | ||
return tr("Duplicate URL"); | ||
} else if (role == Qt::ToolTipRole && !urlValid) { | ||
return tr("Invalid URL"); | ||
} | ||
|
||
return {}; | ||
} | ||
|
||
void EntryURLModel::setEntryUrl(const QString& entryUrl) | ||
{ | ||
m_entryUrl = entryUrl; | ||
} | ||
|
||
bool EntryURLModel::setData(const QModelIndex& index, const QVariant& value, int role) | ||
{ | ||
if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { | ||
return false; | ||
} | ||
|
||
const int row = index.row(); | ||
const QString key = m_urls.at(row).first; | ||
const QString oldValue = m_urls.at(row).second; | ||
const auto row = index.row(); | ||
const auto key = m_urls.at(row).first; | ||
|
||
if (EntryAttributes::isDefaultAttribute(key) || m_entryAttributes->containsValue(value.toString())) { | ||
if (EntryAttributes::isDefaultAttribute(key)) { | ||
return false; | ||
} | ||
|
||
|
@@ -113,7 +125,7 @@ QModelIndex EntryURLModel::indexByKey(const QString& key) const | |
} | ||
|
||
if (row == -1) { | ||
return QModelIndex(); | ||
return {}; | ||
} else { | ||
return index(row, 0); | ||
} | ||
|
@@ -122,7 +134,7 @@ QModelIndex EntryURLModel::indexByKey(const QString& key) const | |
QString EntryURLModel::keyByIndex(const QModelIndex& index) const | ||
{ | ||
if (!index.isValid()) { | ||
return QString(); | ||
return {}; | ||
} else { | ||
return m_urls.at(index.row()).first; | ||
} | ||
|
@@ -133,9 +145,9 @@ void EntryURLModel::updateAttributes() | |
clear(); | ||
m_urls.clear(); | ||
|
||
const QList<QString> attributesKeyList = m_entryAttributes->keys(); | ||
for (const QString& key : attributesKeyList) { | ||
if (!EntryAttributes::isDefaultAttribute(key) && key.contains("KP2A_URL")) { | ||
const auto attributesKeyList = m_entryAttributes->keys(); | ||
for (const auto& key : attributesKeyList) { | ||
if (!EntryAttributes::isDefaultAttribute(key) && key.contains(BrowserService::ADDITIONAL_URL)) { | ||
const auto value = m_entryAttributes->value(key); | ||
m_urls.append(qMakePair(key, value)); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
/* | ||
* Copyright (C) 2023 KeePassXC Team <[email protected]> | ||
* Copyright (C) 2012 Felix Geyer <[email protected]> | ||
* Copyright (C) 2019 KeePassXC Team <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -19,6 +19,7 @@ | |
#ifndef KEEPASSXC_ENTRYURLMODEL_H | ||
#define KEEPASSXC_ENTRYURLMODEL_H | ||
|
||
#include "core/Entry.h" | ||
#include <QStandardItemModel> | ||
#include <QStyledItemDelegate> | ||
|
||
|
@@ -43,8 +44,10 @@ class EntryURLModel : public QStandardItemModel | |
|
||
public: | ||
explicit EntryURLModel(QObject* parent = nullptr); | ||
|
||
void setEntryAttributes(EntryAttributes* entryAttributes); | ||
void insertRow(const QString& key, const QString& value); | ||
void setEntryUrl(const QString& entryUrl); | ||
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; | ||
QVariant data(const QModelIndex& index, int role) const override; | ||
QModelIndex indexByKey(const QString& key) const; | ||
|
@@ -57,6 +60,7 @@ private slots: | |
QList<QPair<QString, QString>> m_urls; | ||
EntryAttributes* m_entryAttributes; | ||
QIcon m_errorIcon; | ||
QString m_entryUrl; | ||
}; | ||
|
||
#endif // KEEPASSXC_ENTRYURLMODEL_H |