@@ -79,30 +79,31 @@ interface DefaultRefreshStrategy : RefreshStrategy {
79
79
scope : CoroutineScope ,
80
80
remoteMessage : Message ,
81
81
isConversationMode : Boolean ,
82
+ impactedThreadsManaged : MutableSet <Thread >,
82
83
realm : MutableRealm ,
83
- ): Set <Thread > {
84
- val impactedThreads = mutableSetOf<Thread >()
84
+ ) {
85
85
val newThread = if (isConversationMode) {
86
- val (thread, otherThreads) = realm.handleAddedMessage(scope, remoteMessage)
87
- impactedThreads + = otherThreads
88
- thread
86
+ realm.handleAddedMessage(scope, remoteMessage, impactedThreadsManaged)
89
87
} else {
90
88
remoteMessage.toThread()
91
89
}
92
- newThread?.let { impactedThreads + = realm.putNewThreadInRealm(it) }
93
- return impactedThreads
90
+ newThread?.let { impactedThreadsManaged + = realm.putNewThreadInRealm(it) }
94
91
}
95
92
96
- private fun MutableRealm.handleAddedMessage (scope : CoroutineScope , remoteMessage : Message ): Pair <Thread ?, Set <Thread >> {
93
+ private fun MutableRealm.handleAddedMessage (
94
+ scope : CoroutineScope ,
95
+ remoteMessage : Message ,
96
+ impactedThreadsManaged : MutableSet <Thread >,
97
+ ): Thread ? {
97
98
98
99
// Other pre-existing Threads that will also require this Message and will provide the prior Messages for this new Thread.
99
100
val existingThreads = ThreadController .getThreadsByMessageIds(remoteMessage.messageIds, realm = this )
100
101
val existingMessages = getExistingMessages(existingThreads)
101
102
102
103
val thread = createNewThreadIfRequired(scope, remoteMessage, existingThreads, existingMessages)
103
- val impactedThreads = updateExistingThreads(scope, remoteMessage, existingThreads, existingMessages)
104
+ updateExistingThreads(scope, remoteMessage, existingThreads, existingMessages, impactedThreadsManaged )
104
105
105
- return thread to impactedThreads
106
+ return thread
106
107
}
107
108
108
109
private fun TypedRealm.createNewThreadIfRequired (
@@ -128,21 +129,17 @@ interface DefaultRefreshStrategy : RefreshStrategy {
128
129
remoteMessage : Message ,
129
130
existingThreads : RealmResults <Thread >,
130
131
existingMessages : Set <Message >,
131
- ): Set <Thread > {
132
-
133
- val impactedThreads = mutableSetOf<Thread >()
134
-
132
+ impactedThreadsManaged : MutableSet <Thread >,
133
+ ) {
135
134
// Update already existing Threads (i.e. in other Folders, or specific cases like Snoozed)
136
- impactedThreads + = addAllMessagesToAllThreads(scope, remoteMessage, existingThreads, existingMessages)
135
+ impactedThreadsManaged + = addAllMessagesToAllThreads(scope, remoteMessage, existingThreads, existingMessages)
137
136
138
137
// Some Messages don't have references to all previous Messages of the Thread (ex: these from the iOS Mail app).
139
138
// Because we are missing the links between Messages, it will create multiple Threads for the same Folder.
140
139
// Hence, we need to find these duplicates, and remove them.
141
140
val duplicatedThreads = identifyExtraDuplicatedThreads(remoteMessage.messageIds)
142
- impactedThreads - = duplicatedThreads
141
+ impactedThreadsManaged - = duplicatedThreads
143
142
duplicatedThreads.forEach(::delete) // Delete the other Threads. Sorry bro, you won't be missed.
144
-
145
- return impactedThreads
146
143
}
147
144
148
145
private fun MutableRealm.addAllMessagesToAllThreads (
0 commit comments