Better recycle bin implementation

This commit is contained in:
J-Jamet
2022-01-04 13:31:18 +01:00
parent f74147070a
commit 699578bb59
3 changed files with 23 additions and 77 deletions

View File

@@ -23,9 +23,7 @@ import android.content.ContentResolver
import android.content.Context
import android.content.res.Resources
import android.net.Uri
import android.os.Build
import android.util.Log
import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
import com.kunzisoft.keepass.database.action.node.NodeHandler
import com.kunzisoft.keepass.database.crypto.EncryptionAlgorithm
import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
@@ -446,10 +444,10 @@ class Database {
val recycleBin: Group?
get() {
mDatabaseKDB?.backupGroup?.let {
return Group(it)
return getGroupById(it.nodeId) ?: Group(it)
}
mDatabaseKDBX?.recycleBin?.let {
return Group(it)
return getGroupById(it.nodeId) ?: Group(it)
}
return null
}
@@ -1100,47 +1098,41 @@ class Database {
}
fun recycle(entry: Entry, resources: Resources) {
entry.entryKDB?.let {
mDatabaseKDB?.recycle(it)
ensureRecycleBinExists(resources)
entry.parent?.let { parent ->
removeEntryFrom(entry, parent)
}
entry.entryKDBX?.let {
mDatabaseKDBX?.recycle(it, resources)
recycleBin?.let {
addEntryTo(entry, it)
}
entry.afterAssignNewParent()
}
fun recycle(group: Group, resources: Resources) {
group.groupKDB?.let {
mDatabaseKDB?.recycle(it)
ensureRecycleBinExists(resources)
group.parent?.let { parent ->
removeGroupFrom(group, parent)
}
group.groupKDBX?.let {
mDatabaseKDBX?.recycle(it, resources)
recycleBin?.let {
addGroupTo(group, it)
}
group.afterAssignNewParent()
}
fun undoRecycle(entry: Entry, parent: Group) {
entry.entryKDB?.let { entryKDB ->
parent.groupKDB?.let { parentKDB ->
mDatabaseKDB?.undoRecycle(entryKDB, parentKDB)
}
}
entry.entryKDBX?.let { entryKDBX ->
parent.groupKDBX?.let { parentKDBX ->
mDatabaseKDBX?.undoRecycle(entryKDBX, parentKDBX)
}
recycleBin?.let { it ->
removeEntryFrom(entry, it)
}
addEntryTo(entry, parent)
entry.afterAssignNewParent()
}
fun undoRecycle(group: Group, parent: Group) {
group.groupKDB?.let { groupKDB ->
parent.groupKDB?.let { parentKDB ->
mDatabaseKDB?.undoRecycle(groupKDB, parentKDB)
}
}
group.groupKDBX?.let { entryKDBX ->
parent.groupKDBX?.let { parentKDBX ->
mDatabaseKDBX?.undoRecycle(entryKDBX, parentKDBX)
}
recycleBin?.let {
removeGroupFrom(group, it)
}
addGroupTo(group, parent)
group.afterAssignNewParent()
}
fun startManageEntry(entry: Entry?) {

View File

@@ -219,28 +219,6 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
return true
}
fun recycle(group: GroupKDB) {
removeGroupFrom(group, group.parent)
addGroupTo(group, backupGroup)
group.afterAssignNewParent()
}
fun recycle(entry: EntryKDB) {
removeEntryFrom(entry, entry.parent)
addEntryTo(entry, backupGroup)
entry.afterAssignNewParent()
}
fun undoRecycle(group: GroupKDB, origParent: GroupKDB) {
removeGroupFrom(group, backupGroup)
addGroupTo(group, origParent)
}
fun undoRecycle(entry: EntryKDB, origParent: GroupKDB) {
removeEntryFrom(entry, backupGroup)
addEntryTo(entry, origParent)
}
fun buildNewAttachment(): BinaryData {
// Generate an unique new file
return attachmentPool.put { uniqueBinaryId ->

View File

@@ -305,7 +305,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
// Retrieve recycle bin in index
val recycleBin: GroupKDBX?
get() = if (recycleBinUUID == UUID_ZERO) null else getGroupByUUID(recycleBinUUID)
get() = getGroupByUUID(recycleBinUUID)
val lastSelectedGroup: GroupKDBX?
get() = getGroupByUUID(lastSelectedGroupUUID)
@@ -753,30 +753,6 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return false
}
fun recycle(group: GroupKDBX, resources: Resources) {
ensureRecycleBinExists(resources)
removeGroupFrom(group, group.parent)
addGroupTo(group, recycleBin)
group.afterAssignNewParent()
}
fun recycle(entry: EntryKDBX, resources: Resources) {
ensureRecycleBinExists(resources)
removeEntryFrom(entry, entry.parent)
addEntryTo(entry, recycleBin)
entry.afterAssignNewParent()
}
fun undoRecycle(group: GroupKDBX, origParent: GroupKDBX) {
removeGroupFrom(group, recycleBin)
addGroupTo(group, origParent)
}
fun undoRecycle(entry: EntryKDBX, origParent: GroupKDBX) {
removeEntryFrom(entry, recycleBin)
addEntryTo(entry, origParent)
}
fun getDeletedObjects(): List<DeletedObject> {
return deletedObjects
}