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.GlobalErrorReceiver
|
||||||
import org.matrix.android.sdk.internal.network.executeRequest
|
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.RoomAPI
|
||||||
|
import org.matrix.android.sdk.internal.session.room.timeline.TimelineEventDataSource
|
||||||
import org.matrix.android.sdk.internal.task.Task
|
import org.matrix.android.sdk.internal.task.Task
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -35,7 +36,8 @@ internal interface FetchEditHistoryTask : Task<FetchEditHistoryTask.Params, List
|
|||||||
internal class DefaultFetchEditHistoryTask @Inject constructor(
|
internal class DefaultFetchEditHistoryTask @Inject constructor(
|
||||||
private val roomAPI: RoomAPI,
|
private val roomAPI: RoomAPI,
|
||||||
private val globalErrorReceiver: GlobalErrorReceiver,
|
private val globalErrorReceiver: GlobalErrorReceiver,
|
||||||
private val cryptoSessionInfoProvider: CryptoSessionInfoProvider
|
private val cryptoSessionInfoProvider: CryptoSessionInfoProvider,
|
||||||
|
private val eventDataSource: TimelineEventDataSource,
|
||||||
) : FetchEditHistoryTask {
|
) : FetchEditHistoryTask {
|
||||||
|
|
||||||
override suspend fun execute(params: FetchEditHistoryTask.Params): List<Event> {
|
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
|
// 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
|
val events = response.chunks
|
||||||
.filter { it.senderId == originalSenderId }
|
.filter { it.senderId == originalSenderId }
|
||||||
.filter { !it.isRedacted() }
|
.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)
|
@JsonClass(generateAdapter = true)
|
||||||
internal data class RelationsResponse(
|
internal data class RelationsResponse(
|
||||||
@Json(name = "chunk") val chunks: List<Event>,
|
@Json(name = "chunk") val chunks: List<Event>,
|
||||||
@Json(name = "original_event") val originalEvent: Event?,
|
|
||||||
@Json(name = "next_batch") val nextBatch: String?,
|
@Json(name = "next_batch") val nextBatch: String?,
|
||||||
@Json(name = "prev_batch") val prevBatch: 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 com.zhuinden.monarchy.Monarchy
|
||||||
import io.realm.Realm
|
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.MXCryptoError
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.OlmDecryptionResult
|
import org.matrix.android.sdk.api.session.crypto.model.OlmDecryptionResult
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
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.model.RoomMemberContent
|
||||||
import org.matrix.android.sdk.api.session.room.send.SendState
|
import org.matrix.android.sdk.api.session.room.send.SendState
|
||||||
import org.matrix.android.sdk.internal.crypto.DefaultCryptoService
|
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.helper.addTimelineEvent
|
||||||
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
||||||
import org.matrix.android.sdk.internal.database.mapper.toEntity
|
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.events.getFixedRoomMemberContent
|
||||||
import org.matrix.android.sdk.internal.session.room.RoomAPI
|
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.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.session.room.timeline.PaginationDirection
|
||||||
import org.matrix.android.sdk.internal.task.Task
|
import org.matrix.android.sdk.internal.task.Task
|
||||||
import org.matrix.android.sdk.internal.util.awaitTransaction
|
import org.matrix.android.sdk.internal.util.awaitTransaction
|
||||||
@ -87,6 +90,8 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
|
|||||||
@SessionDatabase private val monarchy: Monarchy,
|
@SessionDatabase private val monarchy: Monarchy,
|
||||||
private val cryptoService: DefaultCryptoService,
|
private val cryptoService: DefaultCryptoService,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
|
private val realmSessionProvider: RealmSessionProvider,
|
||||||
|
private val getEventTask: GetEventTask,
|
||||||
) : FetchThreadTimelineTask {
|
) : FetchThreadTimelineTask {
|
||||||
|
|
||||||
enum class Result {
|
enum class Result {
|
||||||
@ -114,11 +119,26 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
|
|||||||
params: FetchThreadTimelineTask.Params
|
params: FetchThreadTimelineTask.Params
|
||||||
): Result {
|
): Result {
|
||||||
val threadList = response.chunks
|
val threadList = response.chunks
|
||||||
val threadRootEvent = response.originalEvent
|
|
||||||
val hasReachEnd = response.nextBatch == null
|
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)
|
val threadChunk = ChunkEntity.findLastForwardChunkOfThread(realm, params.roomId, params.rootThreadEventId)
|
||||||
?: run {
|
?: run {
|
||||||
return@awaitTransaction
|
return@awaitTransaction
|
||||||
@ -173,7 +193,7 @@ internal class DefaultFetchThreadTimelineTask @Inject constructor(
|
|||||||
// Case when thread event is not in the device
|
// 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")
|
Timber.i("###THREADS FetchThreadTimelineTask root thread event: ${params.rootThreadEventId} NOT FOUND! Lets create a temp one")
|
||||||
val eventEntity = createEventEntity(params.roomId, threadRootEvent, realm)
|
val eventEntity = createEventEntity(params.roomId, threadRootEvent, realm)
|
||||||
roomMemberContentsByUser.addSenderState(realm, params.roomId, threadRootEvent.senderId)
|
roomMemberContentsByUser.addSenderState(realm, params.roomId, threadRootEvent.senderId!!)
|
||||||
threadChunk.addTimelineEvent(
|
threadChunk.addTimelineEvent(
|
||||||
roomId = params.roomId,
|
roomId = params.roomId,
|
||||||
eventEntity = eventEntity,
|
eventEntity = eventEntity,
|
||||||
|
Loading…
Reference in New Issue
Block a user