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