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

View File

@@ -219,28 +219,6 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
return true 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 { fun buildNewAttachment(): BinaryData {
// Generate an unique new file // Generate an unique new file
return attachmentPool.put { uniqueBinaryId -> return attachmentPool.put { uniqueBinaryId ->

View File

@@ -305,7 +305,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
// Retrieve recycle bin in index // Retrieve recycle bin in index
val recycleBin: GroupKDBX? val recycleBin: GroupKDBX?
get() = if (recycleBinUUID == UUID_ZERO) null else getGroupByUUID(recycleBinUUID) get() = getGroupByUUID(recycleBinUUID)
val lastSelectedGroup: GroupKDBX? val lastSelectedGroup: GroupKDBX?
get() = getGroupByUUID(lastSelectedGroupUUID) get() = getGroupByUUID(lastSelectedGroupUUID)
@@ -753,30 +753,6 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return false 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> { fun getDeletedObjects(): List<DeletedObject> {
return deletedObjects return deletedObjects
} }