Check encrypted event status using the Event model

This commit is contained in:
Maxime NATUREL 2023-01-13 16:48:53 +01:00
parent ee3cbd9884
commit 60e838a82c

View file

@ -55,32 +55,46 @@ internal class EventInsertLiveObserver @Inject constructor(
if (!results.isLoaded || results.isEmpty()) { if (!results.isLoaded || results.isEmpty()) {
return@withLock return@withLock
} }
val idsToDeleteAfterProcess = ArrayList<String>() val eventsToProcess = ArrayList<EventInsertEntity>(results.size)
val idsOfEncryptedEvents = ArrayList<String>() val eventsToIgnore = ArrayList<EventInsertEntity>(results.size)
val filteredEvents = ArrayList<EventInsertEntity>(results.size)
Timber.v("EventInsertEntity updated with ${results.size} results in db") Timber.v("EventInsertEntity updated with ${results.size} results in db")
results.forEach { results.forEach {
if (shouldProcess(it)) { // don't use copy from realm over there
// don't use copy from realm over there val copiedEvent = EventInsertEntity(
val copiedEvent = EventInsertEntity( eventId = it.eventId,
eventId = it.eventId, eventType = it.eventType
eventType = it.eventType ).apply {
).apply { insertType = it.insertType
insertType = it.insertType
}
filteredEvents.add(copiedEvent)
} }
if (it.eventType == EventType.ENCRYPTED) {
idsOfEncryptedEvents.add(it.eventId) if (shouldProcess(it)) {
eventsToProcess.add(copiedEvent)
} else { } else {
idsToDeleteAfterProcess.add(it.eventId) eventsToIgnore.add(copiedEvent)
} }
} }
awaitTransaction(realmConfiguration) { realm -> awaitTransaction(realmConfiguration) { realm ->
Timber.v("##Transaction: There are ${filteredEvents.size} events to process ") Timber.v("##Transaction: There are ${eventsToProcess.size} events to process")
filteredEvents.forEach { eventInsert ->
val idsToDeleteAfterProcess = ArrayList<String>()
val idsOfEncryptedEvents = ArrayList<String>()
val getAndTriageEvent: (EventInsertEntity) -> Event? = { eventInsert ->
val eventId = eventInsert.eventId val eventId = eventInsert.eventId
val event = getEvent(realm, eventId) val event = getEvent(realm, eventId)
if (event?.getClearType() == EventType.ENCRYPTED) {
idsOfEncryptedEvents.add(eventId)
} else {
idsToDeleteAfterProcess.add(eventId)
}
event
}
eventsToProcess.forEach { eventInsert ->
val eventId = eventInsert.eventId
val event = getAndTriageEvent(eventInsert)
if (event != null && canProcessEvent(event)) { if (event != null && canProcessEvent(event)) {
processors.filter { processors.filter {
it.shouldProcess(eventId, event.getClearType(), eventInsert.insertType) it.shouldProcess(eventId, event.getClearType(), eventInsert.insertType)
@ -92,6 +106,9 @@ internal class EventInsertLiveObserver @Inject constructor(
return@forEach return@forEach
} }
} }
eventsToIgnore.forEach { getAndTriageEvent(it) }
realm.where(EventInsertEntity::class.java) realm.where(EventInsertEntity::class.java)
.`in`(EventInsertEntityFields.EVENT_ID, idsToDeleteAfterProcess.toTypedArray()) .`in`(EventInsertEntityFields.EVENT_ID, idsToDeleteAfterProcess.toTypedArray())
.findAll() .findAll()