diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 996c331f6..7171fd05e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -361,7 +361,7 @@ class EntryEditActivity : LockingActivity(), mDatabase?.binaryPool?.let { binaryPool -> assignAttachments(newEntry.getAttachments(binaryPool), StreamDirection.UPLOAD) { attachment -> - newEntry.removeAttachment(attachment, binaryPool) + newEntry.removeAttachment(attachment) } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/SaveDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/SaveDatabaseRunnable.kt index 9f4756314..47133e692 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/SaveDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/SaveDatabaseRunnable.kt @@ -34,7 +34,6 @@ open class SaveDatabaseRunnable(protected var context: Context, override fun onStartRun() {} override fun onActionRun() { - // TODO as setting database.removeUnlinkedAttachments() if (saveDatabase && result.isSuccess) { try { database.saveData(context.contentResolver) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/node/DeleteNodesRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/node/DeleteNodesRunnable.kt index cb3a0175f..c3a0c002f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/node/DeleteNodesRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/node/DeleteNodesRunnable.kt @@ -64,6 +64,10 @@ class DeleteNodesRunnable(context: Context, } else { database.deleteEntry(currentNode) } + // Remove the oldest attachments + currentNode.getAttachments(database.binaryPool).forEach { + database.removeAttachmentIfNotUsed(it) + } } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt index 88603db2d..220f5fc6f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt @@ -20,6 +20,7 @@ package com.kunzisoft.keepass.database.action.node import android.content.Context +import com.kunzisoft.keepass.database.element.Attachment import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Entry import com.kunzisoft.keepass.database.element.node.Node @@ -40,6 +41,12 @@ class UpdateEntryRunnable constructor( // WARNING : Re attribute parent removed in entry edit activity to save memory mNewEntry.addParentFrom(mOldEntry) + // Build oldest attachments + val oldEntryAttachments = mOldEntry.getAttachments(database.binaryPool) + val newEntryAttachments = mNewEntry.getAttachments(database.binaryPool) + val differenceAttachments = ArrayList(oldEntryAttachments) + differenceAttachments.removeAll(newEntryAttachments) + // Update entry with new values mOldEntry.updateWith(mNewEntry) mNewEntry.touch(modified = true, touchParents = true) @@ -50,6 +57,11 @@ class UpdateEntryRunnable constructor( // Only change data in index database.updateEntry(mOldEntry) + + // Remove oldest attachments + differenceAttachments.forEach { + database.removeAttachmentIfNotUsed(it) + } } override fun nodeFinish(): ActionNodesValues { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt index 3c97317dc..abe8ad712 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Entry.kt @@ -346,9 +346,9 @@ class Entry : Node, EntryVersionedInterface { entryKDBX?.putAttachment(attachment, binaryPool) } - fun removeAttachment(attachment: Attachment, binaryPool: BinaryPool) { + fun removeAttachment(attachment: Attachment) { entryKDB?.removeAttachment(attachment) - entryKDBX?.removeAttachment(attachment, binaryPool) + entryKDBX?.removeAttachment(attachment) } fun getHistory(): ArrayList { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt index d87857e21..e842ccdc8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/entry/EntryKDBX.kt @@ -305,9 +305,8 @@ class EntryKDBX : EntryVersioned, NodeKDBXInte binaries[attachment.name] = binaryPool.put(attachment.binaryAttachment) } - fun removeAttachment(attachment: Attachment, binaryPool: BinaryPool) { + fun removeAttachment(attachment: Attachment) { binaries.remove(attachment.name) - binaryPool.remove(attachment.binaryAttachment) } private fun getAttachmentsSize(binaryPool: BinaryPool): Long {