From edb045bb8cc9b8f971c8ee705dbeca71a76fca89 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Wed, 10 May 2023 14:31:57 +0300 Subject: [PATCH] Revert previos replies changes for threads --- .../api/session/room/timeline/TimelineEvent.kt | 17 ++++++++++++++++- .../timeline/decorator/UpdatedReplyDecorator.kt | 12 ++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt index 2921cc46..46633741 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt @@ -28,6 +28,7 @@ import org.matrix.android.sdk.api.session.events.model.isLiveLocation import org.matrix.android.sdk.api.session.events.model.isPoll import org.matrix.android.sdk.api.session.events.model.isReply import org.matrix.android.sdk.api.session.events.model.isSticker +import org.matrix.android.sdk.api.session.events.model.toContent import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary import org.matrix.android.sdk.api.session.room.model.ReadReceipt @@ -157,7 +158,20 @@ fun TimelineEvent.getLastMessageContent(): MessageContent? { } } -fun TimelineEvent.getLastEditNewContent(): Content? = annotations?.editSummary?.latestEdit?.getClearContent()?.toModel<MessageContent>()?.newContent +fun TimelineEvent.getLastEditNewContent(): Content? { + val lastContent = annotations?.editSummary?.latestEdit?.getClearContent()?.toModel<MessageContent>()?.newContent + return if (isReply()) { + val previousFormattedBody = root.getClearContent().toModel<MessageTextContent>()?.formattedBody + if (previousFormattedBody?.isNotEmpty() == true) { + val lastMessageContent = lastContent.toModel<MessageTextContent>() + lastMessageContent?.let { ensureCorrectFormattedBodyInTextReply(it, previousFormattedBody) }?.toContent() ?: lastContent + } else { + lastContent + } + } else { + lastContent + } +} private const val MX_REPLY_END_TAG = "</mx-reply>" @@ -176,6 +190,7 @@ private fun ensureCorrectFormattedBodyInTextReply(messageTextContent: MessageTex format = MessageFormat.FORMAT_MATRIX_HTML, ) } + else -> messageTextContent } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/decorator/UpdatedReplyDecorator.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/decorator/UpdatedReplyDecorator.kt index b334f7ce..2b12fe81 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/decorator/UpdatedReplyDecorator.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/decorator/UpdatedReplyDecorator.kt @@ -19,10 +19,12 @@ package org.matrix.android.sdk.internal.session.room.timeline.decorator import io.realm.Realm import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.events.model.isThread import org.matrix.android.sdk.api.session.events.model.toContent import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.api.session.room.timeline.getLastMessageContent import org.matrix.android.sdk.api.session.room.timeline.getRelationContent +import org.matrix.android.sdk.api.session.room.timeline.isReply import org.matrix.android.sdk.internal.database.mapper.TimelineEventMapper import org.matrix.android.sdk.internal.database.mapper.asDomain import org.matrix.android.sdk.internal.database.model.TimelineEventEntity @@ -37,8 +39,14 @@ internal class UpdatedReplyDecorator( private val timelineEventMapper: TimelineEventMapper, ) : TimelineEventDecorator { - //Changed to support media replies - override fun decorate(timelineEvent: TimelineEvent): TimelineEvent = timelineEvent + override fun decorate(timelineEvent: TimelineEvent): TimelineEvent { + return if (timelineEvent.isReply() && !timelineEvent.root.isThread()) { + val newRepliedEvent = createNewRepliedEvent(timelineEvent) ?: return timelineEvent + timelineEvent.copy(root = newRepliedEvent) + } else { + timelineEvent + } + } private fun createNewRepliedEvent(currentTimelineEvent: TimelineEvent): Event? { val relatesEventId = currentTimelineEvent.getRelationContent()?.inReplyTo?.eventId ?: return null -- GitLab