Skip to content

Commit 60e838a

Browse files
committed
Check encrypted event status using the Event model
1 parent ee3cbd9 commit 60e838a

File tree

1 file changed

+34
-17
lines changed

1 file changed

+34
-17
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/EventInsertLiveObserver.kt

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,32 +55,46 @@ internal class EventInsertLiveObserver @Inject constructor(
5555
if (!results.isLoaded || results.isEmpty()) {
5656
return@withLock
5757
}
58-
val idsToDeleteAfterProcess = ArrayList<String>()
59-
val idsOfEncryptedEvents = ArrayList<String>()
60-
val filteredEvents = ArrayList<EventInsertEntity>(results.size)
58+
val eventsToProcess = ArrayList<EventInsertEntity>(results.size)
59+
val eventsToIgnore = ArrayList<EventInsertEntity>(results.size)
60+
6161
Timber.v("EventInsertEntity updated with ${results.size} results in db")
6262
results.forEach {
63-
if (shouldProcess(it)) {
64-
// don't use copy from realm over there
65-
val copiedEvent = EventInsertEntity(
66-
eventId = it.eventId,
67-
eventType = it.eventType
68-
).apply {
69-
insertType = it.insertType
70-
}
71-
filteredEvents.add(copiedEvent)
63+
// don't use copy from realm over there
64+
val copiedEvent = EventInsertEntity(
65+
eventId = it.eventId,
66+
eventType = it.eventType
67+
).apply {
68+
insertType = it.insertType
7269
}
73-
if (it.eventType == EventType.ENCRYPTED) {
74-
idsOfEncryptedEvents.add(it.eventId)
70+
71+
if (shouldProcess(it)) {
72+
eventsToProcess.add(copiedEvent)
7573
} else {
76-
idsToDeleteAfterProcess.add(it.eventId)
74+
eventsToIgnore.add(copiedEvent)
7775
}
7876
}
77+
7978
awaitTransaction(realmConfiguration) { realm ->
80-
Timber.v("##Transaction: There are ${filteredEvents.size} events to process ")
81-
filteredEvents.forEach { eventInsert ->
79+
Timber.v("##Transaction: There are ${eventsToProcess.size} events to process")
80+
81+
val idsToDeleteAfterProcess = ArrayList<String>()
82+
val idsOfEncryptedEvents = ArrayList<String>()
83+
val getAndTriageEvent: (EventInsertEntity) -> Event? = { eventInsert ->
8284
val eventId = eventInsert.eventId
8385
val event = getEvent(realm, eventId)
86+
if (event?.getClearType() == EventType.ENCRYPTED) {
87+
idsOfEncryptedEvents.add(eventId)
88+
} else {
89+
idsToDeleteAfterProcess.add(eventId)
90+
}
91+
event
92+
}
93+
94+
eventsToProcess.forEach { eventInsert ->
95+
val eventId = eventInsert.eventId
96+
val event = getAndTriageEvent(eventInsert)
97+
8498
if (event != null && canProcessEvent(event)) {
8599
processors.filter {
86100
it.shouldProcess(eventId, event.getClearType(), eventInsert.insertType)
@@ -92,6 +106,9 @@ internal class EventInsertLiveObserver @Inject constructor(
92106
return@forEach
93107
}
94108
}
109+
110+
eventsToIgnore.forEach { getAndTriageEvent(it) }
111+
95112
realm.where(EventInsertEntity::class.java)
96113
.`in`(EventInsertEntityFields.EVENT_ID, idsToDeleteAfterProcess.toTypedArray())
97114
.findAll()

0 commit comments

Comments
 (0)