mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Move construct tree methods in Importer
This commit is contained in:
@@ -75,47 +75,6 @@ class PwDatabaseV3 : PwDatabase<PwGroupV3, PwEntryV3>() {
|
||||
numKeyEncRounds = DEFAULT_ENCRYPTION_ROUNDS
|
||||
}
|
||||
|
||||
private fun buildTreeGroups(previousGroup: PwGroupV3, currentGroup: PwGroupV3, groupIterator: Iterator<PwGroupV3>) {
|
||||
|
||||
if (currentGroup.parent == null && (previousGroup.level + 1) == currentGroup.level) {
|
||||
// Current group has an increment level compare to the previous, current group is a child
|
||||
previousGroup.addChildGroup(currentGroup)
|
||||
currentGroup.parent = previousGroup
|
||||
} else if (previousGroup.parent != null && previousGroup.level == currentGroup.level) {
|
||||
// In the same level, previous parent is the same as previous group
|
||||
previousGroup.parent!!.addChildGroup(currentGroup)
|
||||
currentGroup.parent = previousGroup.parent
|
||||
} else if (previousGroup.parent != null) {
|
||||
// Previous group has a higher level than the current group, check it's parent
|
||||
buildTreeGroups(previousGroup.parent!!, currentGroup, groupIterator)
|
||||
}
|
||||
|
||||
// Next current group
|
||||
if (groupIterator.hasNext()){
|
||||
buildTreeGroups(currentGroup, groupIterator.next(), groupIterator)
|
||||
}
|
||||
}
|
||||
|
||||
fun constructTreeFromIndex() {
|
||||
rootGroup?.let {
|
||||
|
||||
// add each group
|
||||
val groupIterator = getGroupIndexes().iterator()
|
||||
if (groupIterator.hasNext())
|
||||
buildTreeGroups(it, groupIterator.next(), groupIterator)
|
||||
|
||||
// add each child
|
||||
for (currentEntry in getEntryIndexes()) {
|
||||
if (currentEntry.parent != null) {
|
||||
// Only the parent id is known so complete the info
|
||||
val parentGroupRetrieve = getGroupById(currentEntry.parent!!.nodeId)
|
||||
parentGroupRetrieve?.addChildEntry(currentEntry)
|
||||
currentEntry.parent = parentGroupRetrieve
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates an unused random tree id
|
||||
*
|
||||
|
||||
@@ -223,11 +223,52 @@ class ImporterV3 : Importer<PwDatabaseV3>() {
|
||||
pos += 2 + 4 + fieldSize
|
||||
}
|
||||
|
||||
mDatabaseToOpen.constructTreeFromIndex()
|
||||
constructTreeFromIndex()
|
||||
|
||||
return mDatabaseToOpen
|
||||
}
|
||||
|
||||
private fun buildTreeGroups(previousGroup: PwGroupV3, currentGroup: PwGroupV3, groupIterator: Iterator<PwGroupV3>) {
|
||||
|
||||
if (currentGroup.parent == null && (previousGroup.level + 1) == currentGroup.level) {
|
||||
// Current group has an increment level compare to the previous, current group is a child
|
||||
previousGroup.addChildGroup(currentGroup)
|
||||
currentGroup.parent = previousGroup
|
||||
} else if (previousGroup.parent != null && previousGroup.level == currentGroup.level) {
|
||||
// In the same level, previous parent is the same as previous group
|
||||
previousGroup.parent!!.addChildGroup(currentGroup)
|
||||
currentGroup.parent = previousGroup.parent
|
||||
} else if (previousGroup.parent != null) {
|
||||
// Previous group has a higher level than the current group, check it's parent
|
||||
buildTreeGroups(previousGroup.parent!!, currentGroup, groupIterator)
|
||||
}
|
||||
|
||||
// Next current group
|
||||
if (groupIterator.hasNext()){
|
||||
buildTreeGroups(currentGroup, groupIterator.next(), groupIterator)
|
||||
}
|
||||
}
|
||||
|
||||
private fun constructTreeFromIndex() {
|
||||
mDatabaseToOpen.rootGroup?.let {
|
||||
|
||||
// add each group
|
||||
val groupIterator = mDatabaseToOpen.getGroupIndexes().iterator()
|
||||
if (groupIterator.hasNext())
|
||||
buildTreeGroups(it, groupIterator.next(), groupIterator)
|
||||
|
||||
// add each child
|
||||
for (currentEntry in mDatabaseToOpen.getEntryIndexes()) {
|
||||
if (currentEntry.parent != null) {
|
||||
// Only the parent id is known so complete the info
|
||||
val parentGroupRetrieve = mDatabaseToOpen.getGroupById(currentEntry.parent!!.nodeId)
|
||||
parentGroupRetrieve?.addChildEntry(currentEntry)
|
||||
currentEntry.parent = parentGroupRetrieve
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse and save one record from binary file.
|
||||
* @param buf
|
||||
|
||||
Reference in New Issue
Block a user