Makes the timeline a little more polished

This commit is contained in:
ganfra
2018-10-31 13:03:36 +01:00
parent ecf728aef8
commit 6f2beef726
13 changed files with 179 additions and 70 deletions

View File

@ -1,5 +1,7 @@
package im.vector.matrix.android.api.session.events.model
import im.vector.matrix.android.api.session.room.model.RoomMember
data class EnrichedEvent(val root: Event) {
val metadata = HashMap<String, Any>()
@ -30,4 +32,8 @@ data class EnrichedEvent(val root: Event) {
const val READ_RECEIPTS = "READ_RECEIPTS"
}
}
}
fun EnrichedEvent.roomMember(): RoomMember? {
return getMetadata<Event>(EventType.STATE_ROOM_MEMBER)?.content<RoomMember>()
}

View File

@ -1,37 +0,0 @@
package im.vector.matrix.android.internal.session.events.interceptor
import com.zhuinden.monarchy.Monarchy
import im.vector.matrix.android.api.session.events.interceptor.EnrichedEventInterceptor
import im.vector.matrix.android.api.session.events.model.EnrichedEvent
import im.vector.matrix.android.internal.database.model.ChunkEntity
import im.vector.matrix.android.internal.database.model.EventEntity
import im.vector.matrix.android.internal.database.model.EventEntityFields
import im.vector.matrix.android.internal.database.query.findAllIncludingEvents
import im.vector.matrix.android.internal.database.query.where
import io.realm.Sort
import java.util.*
class IsLastEventInterceptor(val monarchy: Monarchy) : EnrichedEventInterceptor {
override fun canEnrich(event: EnrichedEvent): Boolean {
return true
}
override fun enrich(roomId: String, event: EnrichedEvent) {
monarchy.doWithRealm { realm ->
if (event.root.eventId == null) {
return@doWithRealm
}
val eventEntity = EventEntity.where(realm, event.root.eventId).findFirst()
val chunkEntity = ChunkEntity.findAllIncludingEvents(realm, Collections.singletonList(event.root.eventId)).firstOrNull()
if (eventEntity == null || chunkEntity == null) {
return@doWithRealm
}
val sortedChunkEvents = chunkEntity.events.where().sort(EventEntityFields.ORIGIN_SERVER_TS, Sort.ASCENDING).findAll()
val isLastEvent = chunkEntity.prevToken == null && sortedChunkEvents?.indexOf(eventEntity) == 0
event.enrichWith(EnrichedEvent.IS_LAST_EVENT, isLastEvent)
}
}
}

View File

@ -11,7 +11,6 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
import im.vector.matrix.android.internal.database.model.ChunkEntity
import im.vector.matrix.android.internal.database.model.EventEntityFields
import im.vector.matrix.android.internal.database.query.where
import im.vector.matrix.android.internal.session.events.interceptor.IsLastEventInterceptor
import im.vector.matrix.android.internal.session.events.interceptor.MessageEventInterceptor
import io.realm.Sort
@ -24,7 +23,6 @@ class DefaultTimelineHolder(private val roomId: String,
init {
eventInterceptors.add(MessageEventInterceptor(monarchy))
eventInterceptors.add(IsLastEventInterceptor(monarchy))
}
override fun liveTimeline(): LiveData<PagedList<EnrichedEvent>> {