mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-01-11 15:29:51 -05:00
Fix sorting of advanced attribute list
Sort advanced attribute list using locale aware sort. Fixes #6175
This commit is contained in:
parent
f7fd3881e3
commit
052993a96a
@ -19,6 +19,18 @@
|
||||
|
||||
#include "core/EntryAttributes.h"
|
||||
|
||||
#include <QCollator>
|
||||
|
||||
namespace
|
||||
{
|
||||
void sortLocaleAware(QList<QString>& strings)
|
||||
{
|
||||
QCollator collator;
|
||||
collator.setNumericMode(true);
|
||||
std::sort(strings.begin(), strings.end(), collator);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
EntryAttributesModel::EntryAttributesModel(QObject* parent)
|
||||
: QAbstractListModel(parent)
|
||||
, m_entryAttributes(nullptr)
|
||||
@ -150,7 +162,7 @@ void EntryAttributesModel::attributeAboutToAdd(const QString& key)
|
||||
{
|
||||
QList<QString> rows = m_attributes;
|
||||
rows.append(key);
|
||||
std::sort(rows.begin(), rows.end());
|
||||
sortLocaleAware(rows);
|
||||
int row = rows.indexOf(key);
|
||||
beginInsertRows(QModelIndex(), row, row);
|
||||
}
|
||||
@ -180,7 +192,7 @@ void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const Q
|
||||
QList<QString> rows = m_attributes;
|
||||
rows.removeOne(oldKey);
|
||||
rows.append(newKey);
|
||||
std::sort(rows.begin(), rows.end());
|
||||
sortLocaleAware(rows);
|
||||
int newRow = rows.indexOf(newKey);
|
||||
if (newRow > oldRow) {
|
||||
newRow++;
|
||||
@ -232,4 +244,5 @@ void EntryAttributesModel::updateAttributes()
|
||||
m_attributes.append(key);
|
||||
}
|
||||
}
|
||||
sortLocaleAware(m_attributes);
|
||||
}
|
||||
|
@ -201,6 +201,9 @@ void TestEntryModel::testAttributesModel()
|
||||
|
||||
// make sure these don't generate messages
|
||||
entryAttributes->set("Title", "test");
|
||||
entryAttributes->set("UserName", "test");
|
||||
entryAttributes->set("Password", "test");
|
||||
entryAttributes->set("URL", "test");
|
||||
entryAttributes->set("Notes", "test");
|
||||
|
||||
QCOMPARE(spyDataChanged.count(), 1);
|
||||
@ -214,6 +217,16 @@ void TestEntryModel::testAttributesModel()
|
||||
entryAttributes->set("2nd", value, true);
|
||||
QVERIFY(entryAttributes->isProtected("2nd"));
|
||||
QCOMPARE(entryAttributes->value("2nd"), value);
|
||||
entryAttributes->clear();
|
||||
|
||||
// test attribute sorting
|
||||
entryAttributes->set("Test1", "1");
|
||||
entryAttributes->set("Test11", "11");
|
||||
entryAttributes->set("Test2", "2");
|
||||
QCOMPARE(model->rowCount(), 3);
|
||||
QCOMPARE(model->data(model->index(0, 0)).toString(), QString("Test1"));
|
||||
QCOMPARE(model->data(model->index(1, 0)).toString(), QString("Test2"));
|
||||
QCOMPARE(model->data(model->index(2, 0)).toString(), QString("Test11"));
|
||||
|
||||
QSignalSpy spyReset(model, SIGNAL(modelReset()));
|
||||
entryAttributes->clear();
|
||||
|
Loading…
Reference in New Issue
Block a user