mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Realm: remove usage of freeze as it was not necessary (unique thread)
This commit is contained in:
parent
116f7d0575
commit
fcca75ee23
@ -90,8 +90,7 @@ internal class TimelineChunk(private val chunkEntity: ChunkEntity,
|
|||||||
private val timelineEventsChangeListener =
|
private val timelineEventsChangeListener =
|
||||||
OrderedRealmCollectionChangeListener { results: RealmResults<TimelineEventEntity>, changeSet: OrderedCollectionChangeSet ->
|
OrderedRealmCollectionChangeListener { results: RealmResults<TimelineEventEntity>, changeSet: OrderedCollectionChangeSet ->
|
||||||
Timber.v("on timeline events chunk update")
|
Timber.v("on timeline events chunk update")
|
||||||
val frozenResults = results.freeze()
|
handleDatabaseChangeSet(results, changeSet)
|
||||||
handleDatabaseChangeSet(frozenResults, changeSet)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var timelineEventEntities: RealmResults<TimelineEventEntity> = chunkEntity.sortedTimelineEvents(timelineSettings.rootThreadEventId)
|
private var timelineEventEntities: RealmResults<TimelineEventEntity> = chunkEntity.sortedTimelineEvents(timelineSettings.rootThreadEventId)
|
||||||
@ -287,7 +286,7 @@ internal class TimelineChunk(private val chunkEntity: ChunkEntity,
|
|||||||
* @return the number of events loaded. If we are in a thread timeline it also returns
|
* @return the number of events loaded. If we are in a thread timeline it also returns
|
||||||
* whether or not we reached the end/root message
|
* whether or not we reached the end/root message
|
||||||
*/
|
*/
|
||||||
private suspend fun loadFromStorage(count: Int, direction: Timeline.Direction): LoadedFromStorage {
|
private fun loadFromStorage(count: Int, direction: Timeline.Direction): LoadedFromStorage {
|
||||||
val displayIndex = getNextDisplayIndex(direction) ?: return LoadedFromStorage()
|
val displayIndex = getNextDisplayIndex(direction) ?: return LoadedFromStorage()
|
||||||
val baseQuery = timelineEventEntities.where()
|
val baseQuery = timelineEventEntities.where()
|
||||||
|
|
||||||
@ -428,10 +427,10 @@ internal class TimelineChunk(private val chunkEntity: ChunkEntity,
|
|||||||
* This method is responsible for managing insertions and updates of events on this chunk.
|
* This method is responsible for managing insertions and updates of events on this chunk.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private fun handleDatabaseChangeSet(frozenResults: RealmResults<TimelineEventEntity>, changeSet: OrderedCollectionChangeSet) {
|
private fun handleDatabaseChangeSet(results: RealmResults<TimelineEventEntity>, changeSet: OrderedCollectionChangeSet) {
|
||||||
val insertions = changeSet.insertionRanges
|
val insertions = changeSet.insertionRanges
|
||||||
for (range in insertions) {
|
for (range in insertions) {
|
||||||
val newItems = frozenResults
|
val newItems = results
|
||||||
.subList(range.startIndex, range.startIndex + range.length)
|
.subList(range.startIndex, range.startIndex + range.length)
|
||||||
.map { it.buildAndDecryptIfNeeded() }
|
.map { it.buildAndDecryptIfNeeded() }
|
||||||
builtEventsIndexes.entries.filter { it.value >= range.startIndex }.forEach { it.setValue(it.value + range.length) }
|
builtEventsIndexes.entries.filter { it.value >= range.startIndex }.forEach { it.setValue(it.value + range.length) }
|
||||||
@ -447,7 +446,7 @@ internal class TimelineChunk(private val chunkEntity: ChunkEntity,
|
|||||||
val modifications = changeSet.changeRanges
|
val modifications = changeSet.changeRanges
|
||||||
for (range in modifications) {
|
for (range in modifications) {
|
||||||
for (modificationIndex in (range.startIndex until range.startIndex + range.length)) {
|
for (modificationIndex in (range.startIndex until range.startIndex + range.length)) {
|
||||||
val updatedEntity = frozenResults[modificationIndex] ?: continue
|
val updatedEntity = results[modificationIndex] ?: continue
|
||||||
try {
|
try {
|
||||||
builtEvents[modificationIndex] = updatedEntity.buildAndDecryptIfNeeded()
|
builtEvents[modificationIndex] = updatedEntity.buildAndDecryptIfNeeded()
|
||||||
} catch (failure: Throwable) {
|
} catch (failure: Throwable) {
|
||||||
@ -458,20 +457,20 @@ internal class TimelineChunk(private val chunkEntity: ChunkEntity,
|
|||||||
if (insertions.isNotEmpty() || modifications.isNotEmpty()) {
|
if (insertions.isNotEmpty() || modifications.isNotEmpty()) {
|
||||||
onBuiltEvents(true)
|
onBuiltEvents(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNextDisplayIndex(direction: Timeline.Direction): Int? {
|
private fun getNextDisplayIndex(direction: Timeline.Direction): Int? {
|
||||||
val frozenTimelineEvents = timelineEventEntities.freeze()
|
if (timelineEventEntities.isEmpty()) {
|
||||||
if (frozenTimelineEvents.isEmpty()) {
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return if (builtEvents.isEmpty()) {
|
return if (builtEvents.isEmpty()) {
|
||||||
if (initialEventId != null) {
|
if (initialEventId != null) {
|
||||||
frozenTimelineEvents.where().equalTo(TimelineEventEntityFields.EVENT_ID, initialEventId).findFirst()?.displayIndex
|
timelineEventEntities.where().equalTo(TimelineEventEntityFields.EVENT_ID, initialEventId).findFirst()?.displayIndex
|
||||||
} else if (direction == Timeline.Direction.BACKWARDS) {
|
} else if (direction == Timeline.Direction.BACKWARDS) {
|
||||||
frozenTimelineEvents.first(null)?.displayIndex
|
timelineEventEntities.first(null)?.displayIndex
|
||||||
} else {
|
} else {
|
||||||
frozenTimelineEvents.last(null)?.displayIndex
|
timelineEventEntities.last(null)?.displayIndex
|
||||||
}
|
}
|
||||||
} else if (direction == Timeline.Direction.FORWARDS) {
|
} else if (direction == Timeline.Direction.FORWARDS) {
|
||||||
builtEvents.first().displayIndex + 1
|
builtEvents.first().displayIndex + 1
|
||||||
|
Loading…
Reference in New Issue
Block a user