mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-05-17 14:00:36 -04:00
Add tags feature
* show the tags in the entry preview * allow searching by tag * add a sidebar listing the tags in the database * filter entries by tag on click * Introduce a new TagsEdit widget that provides pill aesthetics, fast removal functionality and autocompletion * add tests for the tags feature * introduce the "is" tag for searching. Support for weak passwords and expired added.
This commit is contained in:
parent
56a1b465a1
commit
4a21cee98c
33 changed files with 1541 additions and 73 deletions
|
@ -52,7 +52,11 @@ Database::Database()
|
|||
|
||||
// other signals
|
||||
connect(m_metadata, &Metadata::modified, this, &Database::markAsModified);
|
||||
connect(this, &Database::databaseOpened, this, [this]() { updateCommonUsernames(); });
|
||||
connect(this, &Database::databaseOpened, this, [this]() {
|
||||
updateCommonUsernames();
|
||||
updateTagList();
|
||||
});
|
||||
connect(this, &Database::modified, this, [this] { updateTagList(); });
|
||||
connect(this, &Database::databaseSaved, this, [this]() { updateCommonUsernames(); });
|
||||
connect(m_fileWatcher, &FileWatcher::fileChanged, this, &Database::databaseFileChanged);
|
||||
|
||||
|
@ -504,6 +508,7 @@ void Database::releaseData()
|
|||
|
||||
m_deletedObjects.clear();
|
||||
m_commonUsernames.clear();
|
||||
m_tagList.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -700,17 +705,46 @@ void Database::addDeletedObject(const QUuid& uuid)
|
|||
addDeletedObject(delObj);
|
||||
}
|
||||
|
||||
QList<QString> Database::commonUsernames()
|
||||
const QStringList& Database::commonUsernames() const
|
||||
{
|
||||
return m_commonUsernames;
|
||||
}
|
||||
|
||||
const QStringList& Database::tagList() const
|
||||
{
|
||||
return m_tagList;
|
||||
}
|
||||
|
||||
void Database::updateCommonUsernames(int topN)
|
||||
{
|
||||
m_commonUsernames.clear();
|
||||
m_commonUsernames.append(rootGroup()->usernamesRecursive(topN));
|
||||
}
|
||||
|
||||
void Database::updateTagList()
|
||||
{
|
||||
m_tagList.clear();
|
||||
if (!m_rootGroup) {
|
||||
emit tagListUpdated();
|
||||
return;
|
||||
}
|
||||
|
||||
// Search groups recursively looking for tags
|
||||
// Use a set to prevent adding duplicates
|
||||
QSet<QString> tagSet;
|
||||
for (const auto group : m_rootGroup->groupsRecursive(true)) {
|
||||
for (const auto entry : group->entries()) {
|
||||
for (auto tag : entry->tagList()) {
|
||||
tagSet.insert(tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_tagList = tagSet.toList();
|
||||
m_tagList.sort();
|
||||
emit tagListUpdated();
|
||||
}
|
||||
|
||||
const QUuid& Database::cipher() const
|
||||
{
|
||||
return m_data.cipher;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue