From d6dc75961b47c690c0722b5abc5bbd79eec953d8 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Fri, 24 Oct 2025 12:47:11 +0200 Subject: [PATCH] fix: lastmodificationTime equals #2223 --- .../keepass/database/element/DateInstant.kt | 4 ++++ .../database/merge/DatabaseKDBXMerger.kt | 18 +++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt index 198f1a1cb..c4f12fcd6 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt @@ -224,6 +224,10 @@ class DateInstant : Parcelable { return this.mInstant.isAfter(dateInstant.mInstant) } + fun isEquals(dateInstant: DateInstant): Boolean { + return this.mInstant.isEqual(dateInstant.mInstant) + } + fun compareTo(other: DateInstant): Int { return mInstant.compareTo(other.mInstant) } diff --git a/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt b/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt index 54b46e71d..b0912a235 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt @@ -34,6 +34,7 @@ import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.NodeIdInt import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.database.element.node.NodeVersioned +import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException import com.kunzisoft.keepass.utils.readAllBytes import java.io.IOException import java.util.UUID @@ -486,8 +487,7 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { // Merge independently custom data mergeCustomData(entry.customData, entryToMerge.customData) // Merge by modification time - if (entry.lastModificationTime.isBefore(entryToMerge.lastModificationTime) - ) { + if (entry.lastModificationTime.isBefore(entryToMerge.lastModificationTime)) { // Update entry with databaseEntryToMerge and merge history addHistory(entry, entryToMerge) if (parentEntryToMerge == entry.parent) { @@ -498,10 +498,9 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { database.addEntryTo(entryToMerge, parentEntryToMerge) } } - } else if (entry.lastModificationTime.isAfter(entryToMerge.lastModificationTime) - ) { + } else if (entry.lastModificationTime.isAfter(entryToMerge.lastModificationTime)) { addHistory(entryToMerge, entry) - } else { + } else if (entry.lastModificationTime.isEquals(entryToMerge.lastModificationTime)) { // If it's the same modification time, simply move entry to the right location parentEntryToMerge?.let { database.removeEntryFrom(entry, entry.parent) @@ -567,8 +566,7 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { // Merge independently custom data mergeCustomData(group.customData, groupToMerge.customData) // Merge by modification time - if (group.lastModificationTime.isBefore(groupToMerge.lastModificationTime) - ) { + if (group.lastModificationTime.isBefore(groupToMerge.lastModificationTime)) { if (parentGroupToMerge == group.parent) { group.updateWith(groupToMerge, false) } else { @@ -577,6 +575,12 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { database.addGroupTo(groupToMerge, parentGroupToMerge) } } + } else if (group.lastModificationTime.isEquals(groupToMerge.lastModificationTime)) { + // If it's the same modification time, simply move group to the right location + parentGroupToMerge?.let { + database.removeGroupFrom(group, group.parent) + database.addGroupTo(groupToMerge, parentGroupToMerge) + } } } }