From 7527693a0567ef0125efb420c2b867b9f679af2b Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 20 Oct 2022 11:57:13 +0200 Subject: [PATCH] Realm-kotlin: implements equals where needed as objects are frozen now --- .../sdk/internal/database/model/ChunkEntity.kt | 14 ++++++++++++++ .../database/model/ReadReceiptEntity.kt | 17 +++++++++++++++++ .../database/model/TimelineEventEntity.kt | 16 +++++++++++++++- .../session/room/read/SetReadMarkersTask.kt | 2 +- .../sync/handler/room/ReadReceiptHandler.kt | 8 ++------ 5 files changed, 49 insertions(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt index 80b4c0b501..9e8fbbc6b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt @@ -50,6 +50,20 @@ internal class ChunkEntity : RealmObject { // If true, then this chunk was previously a last forward chunk fun hasBeenALastForwardChunk() = nextToken == null && !isLastForward + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ChunkEntity + + if (chunkId != other.chunkId) return false + + return true + } + + override fun hashCode(): Int { + return chunkId.hashCode() + } companion object } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt index c66999405c..2ee2956c01 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt @@ -26,5 +26,22 @@ internal class ReadReceiptEntity : RealmObject { var userId: String = "" var originServerTs: Double = 0.0 + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ReadReceiptEntity + + if (primaryKey != other.primaryKey) return false + + return true + } + + override fun hashCode(): Int { + return primaryKey.hashCode() + } + companion object + + } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt index 91bdf036ea..693cd1469e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt @@ -32,13 +32,27 @@ internal class TimelineEventEntity : RealmObject { var senderName: String? = null var isUniqueDisplayName: Boolean = false var senderAvatar: String? = null - var senderMembershipEventId: String? = null // ownedByThreadChunk indicates that the current TimelineEventEntity belongs // to a thread chunk and is a temporarily event. var ownedByThreadChunk: Boolean = false var readReceipts: ReadReceiptsSummaryEntity? = null + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as TimelineEventEntity + + if (localId != other.localId) return false + + return true + } + + override fun hashCode(): Int { + return localId.hashCode() + } + companion object } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt index 02a9da566c..6d17f5b2f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt @@ -115,7 +115,7 @@ internal class DefaultSetReadMarkersTask @Inject constructor( } } - private suspend fun latestSyncedEventId(realm: TypedRealm, roomId: String): String? = + private fun latestSyncedEventId(realm: TypedRealm, roomId: String): String? = TimelineEventEntity.latestEvent(realm, roomId = roomId, includesSending = false)?.eventId private suspend fun updateDatabase(roomId: String, markers: Map, shouldUpdateRoomSummary: Boolean) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/ReadReceiptHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/ReadReceiptHandler.kt index faec8b1439..3025301884 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/ReadReceiptHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/ReadReceiptHandler.kt @@ -21,6 +21,7 @@ import io.realm.kotlin.UpdatePolicy import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.internal.database.model.ReadReceiptEntity import org.matrix.android.sdk.internal.database.model.ReadReceiptsSummaryEntity +import org.matrix.android.sdk.internal.database.query.createUnmanaged import org.matrix.android.sdk.internal.database.query.getOrCreate import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.session.sync.RoomSyncEphemeralTemporaryStore @@ -100,12 +101,7 @@ internal class ReadReceiptHandler @Inject constructor( } for ((userId, paramsDict) in userIdsDict) { val ts = paramsDict[TIMESTAMP_KEY] ?: 0.0 - val receiptEntity = ReadReceiptEntity().apply { - this.roomId = roomId - this.eventId = eventId - this.userId = userId - this.originServerTs = ts - } + val receiptEntity = ReadReceiptEntity.createUnmanaged(roomId, eventId, userId, ts) readReceiptsSummary.readReceipts.add(receiptEntity) } realm.copyToRealm(readReceiptsSummary, updatePolicy = UpdatePolicy.ALL)