forked from GitHub-Mirror/riotX-android
Force passing realm to TimelineEvent factory
This commit is contained in:
parent
01e3e71f98
commit
ca2223f201
@ -16,21 +16,29 @@
|
|||||||
|
|
||||||
package im.vector.matrix.android.internal.database.mapper
|
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.RoomSummary
|
||||||
import im.vector.matrix.android.api.session.room.model.tag.RoomTag
|
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.database.model.RoomSummaryEntity
|
||||||
import im.vector.matrix.android.internal.session.room.timeline.TimelineEventFactory
|
import im.vector.matrix.android.internal.session.room.timeline.TimelineEventFactory
|
||||||
import javax.inject.Inject
|
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 {
|
fun map(roomSummaryEntity: RoomSummaryEntity): RoomSummary {
|
||||||
val tags = roomSummaryEntity.tags.map {
|
val tags = roomSummaryEntity.tags.map {
|
||||||
RoomTag(it.tagName, it.tagOrder)
|
RoomTag(it.tagName, it.tagOrder)
|
||||||
}
|
}
|
||||||
val latestEvent = roomSummaryEntity.latestEvent?.let {
|
val latestEvent = roomSummaryEntity.latestEvent?.let {
|
||||||
timelineEventFactory.create(it)
|
var ev: TimelineEvent? = null
|
||||||
|
monarchy.doWithRealm { realm ->
|
||||||
|
ev = timelineEventFactory.create(it, realm)
|
||||||
|
}
|
||||||
|
ev
|
||||||
}
|
}
|
||||||
return RoomSummary(
|
return RoomSummary(
|
||||||
roomId = roomSummaryEntity.roomId,
|
roomId = roomSummaryEntity.roomId,
|
||||||
|
@ -129,7 +129,7 @@ internal class DefaultTimeline(
|
|||||||
builtEventsIdMap[eventId]?.let { builtIndex ->
|
builtEventsIdMap[eventId]?.let { builtIndex ->
|
||||||
//Update the relation of existing event
|
//Update the relation of existing event
|
||||||
builtEvents[builtIndex]?.let { te ->
|
builtEvents[builtIndex]?.let { te ->
|
||||||
builtEvents[builtIndex] = timelineEventFactory.create(eventEntity)
|
builtEvents[builtIndex] = timelineEventFactory.create(eventEntity, eventEntity.realm)
|
||||||
hasChanged = true
|
hasChanged = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,7 +290,7 @@ internal class DefaultTimeline(
|
|||||||
roomEntity?.sendingTimelineEvents
|
roomEntity?.sendingTimelineEvents
|
||||||
?.filter { allowedTypes?.contains(it.type) ?: false }
|
?.filter { allowedTypes?.contains(it.type) ?: false }
|
||||||
?.forEach {
|
?.forEach {
|
||||||
val timelineEvent = timelineEventFactory.create(it)
|
val timelineEvent = timelineEventFactory.create(it, it.realm)
|
||||||
sendingEvents.add(timelineEvent)
|
sendingEvents.add(timelineEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -418,7 +418,7 @@ internal class DefaultTimeline(
|
|||||||
nextDisplayIndex = offsetIndex + 1
|
nextDisplayIndex = offsetIndex + 1
|
||||||
}
|
}
|
||||||
offsetResults.forEach { eventEntity ->
|
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
|
val position = if (direction == Timeline.Direction.FORWARDS) 0 else builtEvents.size
|
||||||
builtEvents.add(position, timelineEvent)
|
builtEvents.add(position, timelineEvent)
|
||||||
//Need to shift :/
|
//Need to shift :/
|
||||||
|
@ -60,14 +60,14 @@ internal class DefaultTimelineService @Inject constructor(private val roomId: St
|
|||||||
}
|
}
|
||||||
val result = MediatorLiveData<TimelineEvent>()
|
val result = MediatorLiveData<TimelineEvent>()
|
||||||
result.addSource(liveEventEntity) { realmResults ->
|
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) {
|
result.addSource(liveAnnotationsEntity) {
|
||||||
liveEventEntity.value?.let {
|
liveEventEntity.value?.let {
|
||||||
result.value = liveEventEntity.value?.let { realmResults ->
|
result.value = liveEventEntity.value?.let { realmResults ->
|
||||||
//recreate the timeline event
|
//recreate the timeline event
|
||||||
realmResults.firstOrNull()?.let { timelineEventFactory.create(it) }
|
realmResults.firstOrNull()?.let { timelineEventFactory.create(it, it.realm) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import java.util.*
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal interface TimelineEventFactory {
|
internal interface TimelineEventFactory {
|
||||||
fun create(eventEntity: EventEntity, realm: Realm = eventEntity.realm): TimelineEvent
|
fun create(eventEntity: EventEntity, realm: Realm): TimelineEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
internal interface CacheableTimelineEventFactory : TimelineEventFactory {
|
internal interface CacheableTimelineEventFactory : TimelineEventFactory {
|
||||||
|
Loading…
Reference in New Issue
Block a user