mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Better search backup group implementation
This commit is contained in:
@@ -178,19 +178,9 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
|
||||
* Retrieve backup group with his name
|
||||
*/
|
||||
private fun retrieveBackup(): GroupKDB? {
|
||||
var backupGroup: GroupKDB? = null
|
||||
val groupHandler = object: NodeHandler<GroupKDB>() {
|
||||
override fun operate(node: GroupKDB): Boolean {
|
||||
return if (node.title.equals(BACKUP_FOLDER_TITLE, ignoreCase = true)) {
|
||||
backupGroup = node
|
||||
false
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
return rootGroup?.searchChildGroup {
|
||||
it.title.equals(BACKUP_FOLDER_TITLE, ignoreCase = true)
|
||||
}
|
||||
rootGroup?.doForEachChild(null, groupHandler)
|
||||
return backupGroup
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -62,8 +62,27 @@ interface GroupVersionedInterface<Group: GroupVersionedInterface<Group, Entry>,
|
||||
return false
|
||||
}
|
||||
if (doActionForChild)
|
||||
group.doForEachChild(entryHandler, groupHandler)
|
||||
group.doForEachChild(entryHandler, groupHandler, stopIterationWhenGroupHandlerOperateFalse)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
fun searchChildGroup(criteria: (group: Group) -> Boolean): Group? {
|
||||
return searchChildGroup(this, criteria)
|
||||
}
|
||||
|
||||
private fun searchChildGroup(rootGroup: GroupVersionedInterface<Group, Entry>,
|
||||
criteria: (group: Group) -> Boolean): Group? {
|
||||
for (childGroup in rootGroup.getChildGroups()) {
|
||||
if (criteria.invoke(childGroup)) {
|
||||
return childGroup
|
||||
} else {
|
||||
val subGroup = searchChildGroup(childGroup, criteria)
|
||||
if (subGroup != null) {
|
||||
return subGroup
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user