Skip to content

Commit 9537170

Browse files
committed
Avoid usage of Realm.freeze(). Map to TimelineEvent sooner.
1 parent e7e47f8 commit 9537170

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/SendingEventsDataSource.kt

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ internal class RealmSendingEventsDataSource(
4242

4343
private var roomEntity: RoomEntity? = null
4444
private var sendingTimelineEvents: RealmList<TimelineEventEntity>? = null
45-
private var frozenSendingTimelineEvents: RealmList<TimelineEventEntity>? = null
45+
private var mappedSendingTimelineEvents: List<TimelineEvent> = emptyList()
4646

4747
private val sendingTimelineEventsListener = RealmChangeListener<RealmList<TimelineEventEntity>> { events ->
4848
if (events.isValid) {
4949
uiEchoManager.onSentEventsInDatabase(events.map { it.eventId })
50-
updateFrozenResults(events)
50+
mapSendingEvents(events)
5151
onEventsUpdated(false)
5252
}
5353
}
@@ -57,38 +57,29 @@ internal class RealmSendingEventsDataSource(
5757
roomEntity = RoomEntity.where(safeRealm, roomId = roomId).findFirst()
5858
sendingTimelineEvents = roomEntity?.sendingTimelineEvents
5959
sendingTimelineEvents?.addChangeListener(sendingTimelineEventsListener)
60-
updateFrozenResults(sendingTimelineEvents)
60+
mapSendingEvents(sendingTimelineEvents)
6161
}
6262

6363
override fun stop() {
6464
sendingTimelineEvents?.removeChangeListener(sendingTimelineEventsListener)
65-
updateFrozenResults(null)
65+
mapSendingEvents(null)
6666
sendingTimelineEvents = null
6767
roomEntity = null
6868
}
6969

70-
private fun updateFrozenResults(sendingEvents: RealmList<TimelineEventEntity>?) {
71-
// Makes sure to close the previous frozen realm
72-
if (frozenSendingTimelineEvents?.isValid == true) {
73-
frozenSendingTimelineEvents?.realm?.close()
74-
}
75-
// Do not freeze empty list
76-
frozenSendingTimelineEvents = sendingEvents?.takeIf { it.isNotEmpty() }?.freeze()
70+
private fun mapSendingEvents(sendingEvents: RealmList<TimelineEventEntity>?) {
71+
mappedSendingTimelineEvents = sendingEvents?.map { timelineEventMapper.map(it) }.orEmpty()
7772
}
7873

7974
override fun buildSendingEvents(): List<TimelineEvent> {
8075
val builtSendingEvents = mutableListOf<TimelineEvent>()
8176
uiEchoManager.getInMemorySendingEvents()
8277
.addWithUiEcho(builtSendingEvents)
83-
if (frozenSendingTimelineEvents?.isValid == true) {
84-
frozenSendingTimelineEvents
85-
?.filter { timelineEvent ->
86-
builtSendingEvents.none { it.eventId == timelineEvent.eventId }
87-
}
88-
?.map {
89-
timelineEventMapper.map(it)
90-
}?.addWithUiEcho(builtSendingEvents)
91-
}
78+
mappedSendingTimelineEvents
79+
.filter { timelineEvent ->
80+
builtSendingEvents.none { it.eventId == timelineEvent.eventId }
81+
}
82+
.addWithUiEcho(builtSendingEvents)
9283

9384
return builtSendingEvents
9485
}

0 commit comments

Comments
 (0)