From 88755a79b4f19c94d285d7256215343886b010d8 Mon Sep 17 00:00:00 2001 From: Ganard Date: Mon, 3 Feb 2020 15:18:19 +0100 Subject: [PATCH] In memory sending: fix broken filtering --- .../session/room/timeline/DefaultTimeline.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt index b69b25d09a..0d7e4ccc59 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt @@ -19,11 +19,15 @@ package im.vector.matrix.android.internal.session.room.timeline import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.session.crypto.CryptoService import im.vector.matrix.android.api.session.events.model.EventType +import im.vector.matrix.android.api.session.events.model.RelationType +import im.vector.matrix.android.api.session.events.model.toModel import im.vector.matrix.android.api.session.room.model.ReadReceipt +import im.vector.matrix.android.api.session.room.model.message.MessageContent import im.vector.matrix.android.api.session.room.send.SendState import im.vector.matrix.android.api.session.room.timeline.Timeline import im.vector.matrix.android.api.session.room.timeline.TimelineEvent import im.vector.matrix.android.api.session.room.timeline.TimelineSettings +import im.vector.matrix.android.api.session.room.timeline.hasBeenEdited import im.vector.matrix.android.api.util.CancelableBag import im.vector.matrix.android.internal.database.mapper.TimelineEventMapper import im.vector.matrix.android.internal.database.mapper.asDomain @@ -407,7 +411,7 @@ internal class DefaultTimeline( private fun buildSendingEvents(): List { val sendingEvents = ArrayList() if (hasReachedEnd(Timeline.Direction.FORWARDS) && !hasMoreInCache(Timeline.Direction.FORWARDS)) { - sendingEvents.addAll(inMemorySendingEvents) + sendingEvents.addAll(inMemorySendingEvents.filterEventsWithSettings()) roomEntity?.sendingTimelineEvents ?.where() ?.filterEventsWithSettings() @@ -727,6 +731,23 @@ internal class DefaultTimeline( return this } + private fun List.filterEventsWithSettings(): List { + return filter { + val filterType = if (settings.filterTypes) { + settings.allowedTypes.contains(it.root.type) + } else { + true + } + val filterEdits = if (settings.filterEdits && it.root.type == EventType.MESSAGE) { + val messageContent = it.root.content.toModel() + messageContent?.relatesTo?.type != RelationType.REPLACE + } else { + true + } + filterType && filterEdits + } + } + private data class State( val hasReachedEnd: Boolean = false, val hasMoreInCache: Boolean = true,