mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-04 21:17:32 +01:00
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