From ec5ec3375a3a709c55d556db8397f2b88a6ef6bc Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 2 Jul 2019 18:05:14 +0200 Subject: [PATCH] Fix / sometime sent reaction is count twice Now use eventId format to check if local echo instead of state --- .../room/EventRelationsAggregationTask.kt | 25 ++++++++----------- .../room/EventRelationsAggregationUpdater.kt | 4 +-- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationTask.kt index 401cb096..dd4b59fc 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationTask.kt @@ -20,13 +20,12 @@ import com.zhuinden.monarchy.Monarchy import im.vector.matrix.android.api.session.events.model.* import im.vector.matrix.android.api.session.room.model.message.MessageContent import im.vector.matrix.android.api.session.room.model.relation.ReactionContent -import im.vector.matrix.android.api.session.room.send.SendState import im.vector.matrix.android.internal.database.mapper.ContentMapper import im.vector.matrix.android.internal.database.mapper.EventMapper import im.vector.matrix.android.internal.database.model.* import im.vector.matrix.android.internal.database.query.create import im.vector.matrix.android.internal.database.query.where -import im.vector.matrix.android.internal.session.SessionScope +import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory import im.vector.matrix.android.internal.task.Task import im.vector.matrix.android.internal.util.tryTransactionSync import io.realm.Realm @@ -36,7 +35,7 @@ import javax.inject.Inject internal interface EventRelationsAggregationTask : Task { data class Params( - val events: List>, + val events: List, val userId: String ) } @@ -59,17 +58,15 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(private } } - private fun update(realm: Realm, events: List>, userId: String) { - events.forEach { pair -> + private fun update(realm: Realm, events: List, userId: String) { + events.forEach { event -> try { //Temporary catch, should be removed - val roomId = pair.first.roomId + val roomId = event.roomId if (roomId == null) { - Timber.w("Event has no room id ${pair.first.eventId}") + Timber.w("Event has no room id ${event.eventId}") return@forEach } - val event = pair.first - val sendState = pair.second - val isLocalEcho = sendState == SendState.UNSENT + val isLocalEcho = LocalEchoEventFactory.isLocalEchoId(event.eventId ?: "") when (event.type) { EventType.REACTION -> { //we got a reaction!! @@ -96,8 +93,8 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(private when (eventToPrune.type) { EventType.MESSAGE -> { Timber.d("REDACTION for message ${eventToPrune.eventId}") - val unsignedData = EventMapper.map(eventToPrune).unsignedData - ?: UnsignedData(null, null) +// val unsignedData = EventMapper.map(eventToPrune).unsignedData +// ?: UnsignedData(null, null) //was this event a m.replace val contentModel = ContentMapper.map(eventToPrune.content)?.toModel() @@ -128,7 +125,7 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(private //ok, this is a replace var existing = EventAnnotationsSummaryEntity.where(realm, targetEventId).findFirst() if (existing == null) { - Timber.v("###REPLACE creating new relation summary for ${targetEventId}") + Timber.v("###REPLACE creating new relation summary for $targetEventId") existing = EventAnnotationsSummaryEntity.create(realm, targetEventId) existing.roomId = roomId } @@ -168,7 +165,7 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(private existingSummary.sourceEvents.add(eventId) } else { //ignore this event for the summary - Timber.v("###REPLACE ignoring event for summary, it's to old ${eventId}") + Timber.v("###REPLACE ignoring event for summary, it's to old $eventId") } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationUpdater.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationUpdater.kt index a7b6edd6..23318887 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationUpdater.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/EventRelationsAggregationUpdater.kt @@ -22,8 +22,6 @@ import im.vector.matrix.android.internal.database.RealmLiveEntityObserver import im.vector.matrix.android.internal.database.mapper.asDomain import im.vector.matrix.android.internal.database.model.EventEntity import im.vector.matrix.android.internal.database.query.types -import im.vector.matrix.android.internal.database.query.where -import im.vector.matrix.android.internal.session.SessionScope import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.configureWith import timber.log.Timber @@ -53,7 +51,7 @@ internal class EventRelationsAggregationUpdater @Inject constructor(monarchy: Mo override fun processChanges(inserted: List, updated: List, deleted: List) { Timber.v("EventRelationsAggregationUpdater called with ${inserted.size} insertions") val domainInserted = inserted - .map { it.asDomain() to it.sendState } + .map { it.asDomain() } val params = EventRelationsAggregationTask.Params( domainInserted,