diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 21bceb8ba..13fb938ac 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -245,7 +245,11 @@ class ThreadController extends BaseController { void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) { log('ThreadController::_refreshChangesAllEmailSuccess(): ${success.emailList.length}'); _currentEmailState = success.currentEmailState; - emailList.value = success.emailList; + + final emailsBeforeChanges = emailList; + final emailsAfterChanges = success.emailList; + final newListEmail = emailsAfterChanges.combine(emailsBeforeChanges); + emailList.value = newListEmail; } void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) { @@ -675,7 +679,10 @@ class ThreadController extends BaseController { .map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox)) .toList(); - emailListSearch.value = resultEmailSearchList; + final emailsSearchBeforeChanges = emailListSearch; + final emailsSearchAfterChanges = resultEmailSearchList; + final newListEmailSearch = emailsSearchAfterChanges.combine(emailsSearchBeforeChanges); + emailListSearch.value = newListEmailSearch; } void searchMoreEmails() { diff --git a/model/lib/extensions/list_presentation_email_extension.dart b/model/lib/extensions/list_presentation_email_extension.dart index 2cf0b9f2b..f4908c133 100644 --- a/model/lib/extensions/list_presentation_email_extension.dart +++ b/model/lib/extensions/list_presentation_email_extension.dart @@ -1,5 +1,6 @@ -import 'package:model/email/presentation_email.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:model/model.dart'; extension ListPresentationEmailExtension on List { bool get isAllEmailRead => every((email) => email.isReadEmail()); @@ -7,4 +8,23 @@ extension ListPresentationEmailExtension on List { bool get isAllEmailStarred => every((email) => email.isFlaggedEmail()); List get allEmailUnread => where((email) => email.isUnReadEmail()).toList(); + + PresentationEmail? findEmail(EmailId emailId) { + try { + return firstWhere((email) => email.id == emailId); + } catch(e) { + return null; + } + } + + List combine(List listEmailBefore) { + return map((presentationEmail) { + final emailBefore = listEmailBefore.findEmail(presentationEmail.id); + if (emailBefore != null) { + return presentationEmail.toSelectedEmail(selectMode: emailBefore.selectMode); + } else { + return presentationEmail; + } + }).toList(); + } } \ No newline at end of file