diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/RoomSummaryMapper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/RoomSummaryMapper.kt index a235d787..0ebb7ebd 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/RoomSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/RoomSummaryMapper.kt @@ -16,21 +16,29 @@ package im.vector.matrix.android.internal.database.mapper +import com.zhuinden.monarchy.Monarchy import im.vector.matrix.android.api.session.room.model.RoomSummary import im.vector.matrix.android.api.session.room.model.tag.RoomTag +import im.vector.matrix.android.api.session.room.timeline.TimelineEvent import im.vector.matrix.android.internal.database.model.RoomSummaryEntity import im.vector.matrix.android.internal.session.room.timeline.TimelineEventFactory import javax.inject.Inject -internal class RoomSummaryMapper @Inject constructor(private val timelineEventFactory: TimelineEventFactory) { +internal class RoomSummaryMapper @Inject constructor( + private val timelineEventFactory: TimelineEventFactory, + private val monarchy: Monarchy) { fun map(roomSummaryEntity: RoomSummaryEntity): RoomSummary { val tags = roomSummaryEntity.tags.map { RoomTag(it.tagName, it.tagOrder) } val latestEvent = roomSummaryEntity.latestEvent?.let { - timelineEventFactory.create(it) + var ev: TimelineEvent? = null + monarchy.doWithRealm { realm -> + ev = timelineEventFactory.create(it, realm) + } + ev } return RoomSummary( roomId = roomSummaryEntity.roomId, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt index 5218d130..42d4a22c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimeline.kt @@ -129,7 +129,7 @@ internal class DefaultTimeline( builtEventsIdMap[eventId]?.let { builtIndex -> //Update the relation of existing event builtEvents[builtIndex]?.let { te -> - builtEvents[builtIndex] = timelineEventFactory.create(eventEntity) + builtEvents[builtIndex] = timelineEventFactory.create(eventEntity, eventEntity.realm) hasChanged = true } } @@ -290,7 +290,7 @@ internal class DefaultTimeline( roomEntity?.sendingTimelineEvents ?.filter { allowedTypes?.contains(it.type) ?: false } ?.forEach { - val timelineEvent = timelineEventFactory.create(it) + val timelineEvent = timelineEventFactory.create(it, it.realm) sendingEvents.add(timelineEvent) } } @@ -418,7 +418,7 @@ internal class DefaultTimeline( nextDisplayIndex = offsetIndex + 1 } offsetResults.forEach { eventEntity -> - val timelineEvent = timelineEventFactory.create(eventEntity) + val timelineEvent = timelineEventFactory.create(eventEntity, eventEntity.realm) val position = if (direction == Timeline.Direction.FORWARDS) 0 else builtEvents.size builtEvents.add(position, timelineEvent) //Need to shift :/ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimelineService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimelineService.kt index 98c54330..40aa4677 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimelineService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/DefaultTimelineService.kt @@ -60,14 +60,14 @@ internal class DefaultTimelineService @Inject constructor(private val roomId: St } val result = MediatorLiveData() result.addSource(liveEventEntity) { realmResults -> - result.value = realmResults.firstOrNull()?.let { timelineEventFactory.create(it) } + result.value = realmResults.firstOrNull()?.let { timelineEventFactory.create(it, it.realm) } } result.addSource(liveAnnotationsEntity) { liveEventEntity.value?.let { result.value = liveEventEntity.value?.let { realmResults -> //recreate the timeline event - realmResults.firstOrNull()?.let { timelineEventFactory.create(it) } + realmResults.firstOrNull()?.let { timelineEventFactory.create(it, it.realm) } } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/TimelineEventFactory.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/TimelineEventFactory.kt index d40bd4b2..e98e0d35 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/TimelineEventFactory.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/timeline/TimelineEventFactory.kt @@ -34,7 +34,7 @@ import java.util.* import javax.inject.Inject internal interface TimelineEventFactory { - fun create(eventEntity: EventEntity, realm: Realm = eventEntity.realm): TimelineEvent + fun create(eventEntity: EventEntity, realm: Realm): TimelineEvent } internal interface CacheableTimelineEventFactory : TimelineEventFactory {