Merge pull request #7282 from vector-im/feature/bma/remove_original_event

Stop using `original_event` field
This commit is contained in:
Benoit Marty 2022-10-17 14:43:22 +02:00 committed by GitHub
commit 997341b962
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 7 deletions

1
changelog.d/7282.sdk Normal file
View file

@ -0,0 +1 @@
Stop using `original_event` field from `/relations` endpoint

View file

@ -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)
}
}

View file

@ -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?
)

View file

@ -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,