Merge pull request #7282 from vector-im/feature/bma/remove_original_event
Stop using `original_event` field
This commit is contained in:
		
						commit
						997341b962
					
				
							
								
								
									
										1
									
								
								changelog.d/7282.sdk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								changelog.d/7282.sdk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Stop using `original_event` field from `/relations` endpoint
 | 
			
		||||
@ -22,6 +22,7 @@ import org.matrix.android.sdk.internal.crypto.CryptoSessionInfoProvider
 | 
			
		||||
import org.matrix.android.sdk.internal.network.GlobalErrorReceiver
 | 
			
		||||
import org.matrix.android.sdk.internal.network.executeRequest
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.RoomAPI
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.timeline.TimelineEventDataSource
 | 
			
		||||
import org.matrix.android.sdk.internal.task.Task
 | 
			
		||||
import javax.inject.Inject
 | 
			
		||||
 | 
			
		||||
@ -35,7 +36,8 @@ internal interface FetchEditHistoryTask : Task<FetchEditHistoryTask.Params, List
 | 
			
		||||
internal class DefaultFetchEditHistoryTask @Inject constructor(
 | 
			
		||||
        private val roomAPI: RoomAPI,
 | 
			
		||||
        private val globalErrorReceiver: GlobalErrorReceiver,
 | 
			
		||||
        private val cryptoSessionInfoProvider: CryptoSessionInfoProvider
 | 
			
		||||
        private val cryptoSessionInfoProvider: CryptoSessionInfoProvider,
 | 
			
		||||
        private val eventDataSource: TimelineEventDataSource,
 | 
			
		||||
) : FetchEditHistoryTask {
 | 
			
		||||
 | 
			
		||||
    override suspend fun execute(params: FetchEditHistoryTask.Params): List<Event> {
 | 
			
		||||
@ -50,10 +52,14 @@ internal class DefaultFetchEditHistoryTask @Inject constructor(
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Filter out edition form other users, and redacted editions
 | 
			
		||||
        val originalSenderId = response.originalEvent?.senderId
 | 
			
		||||
        val originalEvent = eventDataSource.getTimelineEvent(
 | 
			
		||||
                roomId = params.roomId,
 | 
			
		||||
                eventId = params.eventId,
 | 
			
		||||
        )
 | 
			
		||||
        val originalSenderId = originalEvent?.senderInfo?.userId
 | 
			
		||||
        val events = response.chunks
 | 
			
		||||
                .filter { it.senderId == originalSenderId }
 | 
			
		||||
                .filter { !it.isRedacted() }
 | 
			
		||||
        return events + listOfNotNull(response.originalEvent)
 | 
			
		||||
        return events + listOfNotNull(originalEvent?.root)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,6 @@ import org.matrix.android.sdk.api.session.events.model.Event
 | 
			
		||||
@JsonClass(generateAdapter = true)
 | 
			
		||||
internal data class RelationsResponse(
 | 
			
		||||
        @Json(name = "chunk") val chunks: List<Event>,
 | 
			
		||||
        @Json(name = "original_event") val originalEvent: Event?,
 | 
			
		||||
        @Json(name = "next_batch") val nextBatch: String?,
 | 
			
		||||
        @Json(name = "prev_batch") val prevBatch: String?
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ package org.matrix.android.sdk.internal.session.room.relation.threads
 | 
			
		||||
 | 
			
		||||
import com.zhuinden.monarchy.Monarchy
 | 
			
		||||
import io.realm.Realm
 | 
			
		||||
import org.matrix.android.sdk.api.extensions.tryOrNull
 | 
			
		||||
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
 | 
			
		||||
import org.matrix.android.sdk.api.session.crypto.model.OlmDecryptionResult
 | 
			
		||||
import org.matrix.android.sdk.api.session.events.model.Event
 | 
			
		||||
@ -24,6 +25,7 @@ import org.matrix.android.sdk.api.session.events.model.EventType
 | 
			
		||||
import org.matrix.android.sdk.api.session.room.model.RoomMemberContent
 | 
			
		||||
import org.matrix.android.sdk.api.session.room.send.SendState
 | 
			
		||||
import org.matrix.android.sdk.internal.crypto.DefaultCryptoService
 | 
			
		||||
import org.matrix.android.sdk.internal.database.RealmSessionProvider
 | 
			
		||||
import org.matrix.android.sdk.internal.database.helper.addTimelineEvent
 | 
			
		||||
import org.matrix.android.sdk.internal.database.mapper.asDomain
 | 
			
		||||
import org.matrix.android.sdk.internal.database.mapper.toEntity
 | 
			
		||||
@ -46,6 +48,7 @@ import org.matrix.android.sdk.internal.network.executeRequest
 | 
			
		||||
import org.matrix.android.sdk.internal.session.events.getFixedRoomMemberContent
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.RoomAPI
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask
 | 
			
		||||
import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection
 | 
			
		||||
import org.matrix.android.sdk.internal.task.Task
 | 
			
		||||
import org.matrix.android.sdk.internal.util.awaitTransaction
 | 
			
		||||
@ -87,6 +90,8 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
 | 
			
		||||
        @SessionDatabase private val monarchy: Monarchy,
 | 
			
		||||
        private val cryptoService: DefaultCryptoService,
 | 
			
		||||
        private val clock: Clock,
 | 
			
		||||
        private val realmSessionProvider: RealmSessionProvider,
 | 
			
		||||
        private val getEventTask: GetEventTask,
 | 
			
		||||
) : FetchThreadTimelineTask {
 | 
			
		||||
 | 
			
		||||
    enum class Result {
 | 
			
		||||
@ -114,11 +119,26 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
 | 
			
		||||
            params: FetchThreadTimelineTask.Params
 | 
			
		||||
    ): Result {
 | 
			
		||||
        val threadList = response.chunks
 | 
			
		||||
        val threadRootEvent = response.originalEvent
 | 
			
		||||
        val hasReachEnd = response.nextBatch == null
 | 
			
		||||
 | 
			
		||||
        monarchy.awaitTransaction { realm ->
 | 
			
		||||
        val isRootThreadTimelineEventEntityKnown: Boolean
 | 
			
		||||
        var threadRootEvent: Event? = null
 | 
			
		||||
 | 
			
		||||
        if (hasReachEnd) {
 | 
			
		||||
            isRootThreadTimelineEventEntityKnown = realmSessionProvider.withRealm { realm ->
 | 
			
		||||
                TimelineEventEntity
 | 
			
		||||
                        .where(realm, roomId = params.roomId, eventId = params.rootThreadEventId)
 | 
			
		||||
                        .findFirst()
 | 
			
		||||
            } != null
 | 
			
		||||
            if (!isRootThreadTimelineEventEntityKnown) {
 | 
			
		||||
                // Fetch the root event from the server
 | 
			
		||||
                threadRootEvent = tryOrNull {
 | 
			
		||||
                    getEventTask.execute(GetEventTask.Params(roomId = params.roomId, eventId = params.rootThreadEventId))
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        monarchy.awaitTransaction { realm ->
 | 
			
		||||
            val threadChunk = ChunkEntity.findLastForwardChunkOfThread(realm, params.roomId, params.rootThreadEventId)
 | 
			
		||||
                    ?: run {
 | 
			
		||||
                        return@awaitTransaction
 | 
			
		||||
@ -173,7 +193,7 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
 | 
			
		||||
                    // Case when thread event is not in the device
 | 
			
		||||
                    Timber.i("###THREADS FetchThreadTimelineTask root thread event: ${params.rootThreadEventId} NOT FOUND! Lets create a temp one")
 | 
			
		||||
                    val eventEntity = createEventEntity(params.roomId, threadRootEvent, realm)
 | 
			
		||||
                    roomMemberContentsByUser.addSenderState(realm, params.roomId, threadRootEvent.senderId)
 | 
			
		||||
                    roomMemberContentsByUser.addSenderState(realm, params.roomId, threadRootEvent.senderId!!)
 | 
			
		||||
                    threadChunk.addTimelineEvent(
 | 
			
		||||
                            roomId = params.roomId,
 | 
			
		||||
                            eventEntity = eventEntity,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user