Skip to content

Commit 2c0e144

Browse files
authored
refactor: Decouple impacted folder ids computation in thread algo deleted uids handling (#2203)
2 parents b3da5cb + cbba190 commit 2c0e144

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/RefreshController.kt

+12-18
Original file line numberDiff line numberDiff line change
@@ -452,38 +452,32 @@ class RefreshController @Inject constructor(
452452

453453
val message = MessageController.getMessage(uid = shortUid.toLongUid(folderId), realm = this) ?: return@forEach
454454

455-
for (thread in message.threads.asReversed()) {
455+
message.threads.forEach { thread ->
456456
scope.ensureActive()
457457

458458
val isSuccess = thread.messages.remove(message)
459-
val numberOfMessagesInFolder = thread.messages.count { it.folderId == thread.folderId }
460-
461-
// We need to save this value because the Thread could be deleted before we use this `folderId`.
462-
val threadFolderId = thread.folderId
463-
464-
if (numberOfMessagesInFolder == 0) {
465-
threads.removeIf { it.uid == thread.uid }
466-
delete(thread)
467-
} else if (isSuccess) {
468-
threads += thread
469-
} else {
470-
continue
471-
}
472-
473-
impactedFolders.add(threadFolderId)
459+
if (isSuccess) threads += thread
474460
}
475461

476462
MessageController.deleteMessage(appContext, mailbox, message, realm = this)
477463
}
478464

479-
threads.forEach {
465+
threads.forEach { thread ->
480466
scope.ensureActive()
481467

482-
it.recomputeThread(realm = this)
468+
impactedFolders.add(thread.folderId)
469+
470+
if (thread.getNumberOfMessagesInFolder() == 0) {
471+
delete(thread)
472+
} else {
473+
thread.recomputeThread(realm = this)
474+
}
483475
}
484476

485477
return impactedFolders
486478
}
479+
480+
private fun Thread.getNumberOfMessagesInFolder() = messages.count { message -> message.folderId == folderId }
487481
//endregion
488482

489483
//region Updated Messages

0 commit comments

Comments
 (0)