diff --git a/app/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/TimelineEventController.kt b/app/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/TimelineEventController.kt index c4197eef..4a08705c 100644 --- a/app/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/TimelineEventController.kt +++ b/app/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/TimelineEventController.kt @@ -5,6 +5,7 @@ import com.airbnb.epoxy.EpoxyAsyncUtil import com.airbnb.epoxy.EpoxyController import im.vector.matrix.android.api.session.events.model.EnrichedEvent import im.vector.matrix.android.api.session.events.model.EventType +import im.vector.matrix.android.api.session.events.model.localId import im.vector.riotredesign.core.extensions.localDateTime import im.vector.riotredesign.features.home.LoadingItemModel_ @@ -62,11 +63,11 @@ class TimelineEventController(private val roomId: String, val item = when (event.root.type) { EventType.MESSAGE -> messageItemFactory.create(event, nextEvent, addDaySeparator, date) - else -> textItemFactory.create(event) + else -> textItemFactory.create(event) } item ?.onBind { timeline?.loadAround(index) } - ?.id(event.root.eventId) + ?.id(event.localId()) ?.addTo(this) if (addDaySeparator) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/EnrichedEvent.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/EnrichedEvent.kt index d2936ca0..4fbe4578 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/EnrichedEvent.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/EnrichedEvent.kt @@ -20,12 +20,18 @@ data class EnrichedEvent(val root: Event) { } companion object { + const val ROOM_MEMBER = "ROOM_MEMBER" const val IS_LAST_EVENT = "IS_LAST_EVENT" const val READ_RECEIPTS = "READ_RECEIPTS" + const val LOCAL_ID = "LOCAL_ID" } } fun EnrichedEvent.roomMember(): RoomMember? { - return getMetadata(EventType.STATE_ROOM_MEMBER) + return getMetadata(EnrichedEvent.ROOM_MEMBER) +} + +fun EnrichedEvent.localId(): String? { + return getMetadata(EnrichedEvent.LOCAL_ID) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/EventEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/EventEntity.kt index 2ea581bf..0bec8a6a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/EventEntity.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/model/EventEntity.kt @@ -3,8 +3,11 @@ package im.vector.matrix.android.internal.database.model import io.realm.RealmObject import io.realm.RealmResults import io.realm.annotations.LinkingObjects +import io.realm.annotations.PrimaryKey +import java.util.* -internal open class EventEntity(var eventId: String = "", +internal open class EventEntity(@PrimaryKey var localId: String = UUID.randomUUID().toString(), + var eventId: String = "", var type: String = "", var content: String = "", var prevContent: String? = null, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/events/interceptor/MessageEventInterceptor.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/events/interceptor/MessageEventInterceptor.kt index e6f565fd..838279d4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/events/interceptor/MessageEventInterceptor.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/events/interceptor/MessageEventInterceptor.kt @@ -18,16 +18,15 @@ internal class MessageEventInterceptor(private val monarchy: Monarchy, override fun enrich(event: EnrichedEvent) { monarchy.doWithRealm { realm -> - if (event.root.eventId == null) { return@doWithRealm } - val rootEntity = EventEntity.where(realm, eventId = event.root.eventId).findFirst() - ?: return@doWithRealm + ?: return@doWithRealm + event.enrichWith(EnrichedEvent.LOCAL_ID, rootEntity.localId) val roomMember = RoomMemberExtractor(realm, roomId).extractFrom(rootEntity) - event.enrichWith(EventType.STATE_ROOM_MEMBER, roomMember) + event.enrichWith(EnrichedEvent.ROOM_MEMBER, roomMember) } }