@@ -55,32 +55,46 @@ internal class EventInsertLiveObserver @Inject constructor(
55
55
if (! results.isLoaded || results.isEmpty()) {
56
56
return @withLock
57
57
}
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
+
61
61
Timber .v(" EventInsertEntity updated with ${results.size} results in db" )
62
62
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
72
69
}
73
- if (it.eventType == EventType .ENCRYPTED ) {
74
- idsOfEncryptedEvents.add(it.eventId)
70
+
71
+ if (shouldProcess(it)) {
72
+ eventsToProcess.add(copiedEvent)
75
73
} else {
76
- idsToDeleteAfterProcess .add(it.eventId )
74
+ eventsToIgnore .add(copiedEvent )
77
75
}
78
76
}
77
+
79
78
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 ->
82
84
val eventId = eventInsert.eventId
83
85
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
+
84
98
if (event != null && canProcessEvent(event)) {
85
99
processors.filter {
86
100
it.shouldProcess(eventId, event.getClearType(), eventInsert.insertType)
@@ -92,6 +106,9 @@ internal class EventInsertLiveObserver @Inject constructor(
92
106
return @forEach
93
107
}
94
108
}
109
+
110
+ eventsToIgnore.forEach { getAndTriageEvent(it) }
111
+
95
112
realm.where(EventInsertEntity ::class .java)
96
113
.`in `(EventInsertEntityFields .EVENT_ID , idsToDeleteAfterProcess.toTypedArray())
97
114
.findAll()
0 commit comments