From ee63f239e7b90d12ac137f862fbfbe492dbccb62 Mon Sep 17 00:00:00 2001 From: DatDang Date: Fri, 3 Jan 2025 17:00:16 +0700 Subject: [PATCH] TF-3385 Optimize misc --- .../repository/mailbox_repository_impl.dart | 28 ++++++++++--------- .../data/local/email_cache_manager.dart | 14 ++++++---- .../presentation/thread_controller.dart | 6 ++-- .../list_presentation_email_extension.dart | 19 +++++++------ 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart index 5fbf9394e..0aa44a660 100644 --- a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart +++ b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart @@ -244,19 +244,21 @@ class MailboxRepositoryImpl extends MailboxRepository { totalEmailUnread, onProgressController); try { - await mapDataSource[DataSourceType.local]!.markAsMailboxRead( - session, - accountId, - mailboxId, - totalEmailUnread - result.length, - onProgressController, - ); - await emailDataSource?.markAsRead( - session, - accountId, - result, - ReadActions.markAsRead, - ); + await Future.wait([ + mapDataSource[DataSourceType.local]!.markAsMailboxRead( + session, + accountId, + mailboxId, + totalEmailUnread - result.length, + onProgressController, + ), + emailDataSource?.markAsRead( + session, + accountId, + result, + ReadActions.markAsRead, + ) ?? Future.value(), + ]); } catch (e) { logError('MailboxRepositoryImpl::markAsMailboxRead: Exception: $e'); } diff --git a/lib/features/thread/data/local/email_cache_manager.dart b/lib/features/thread/data/local/email_cache_manager.dart index d7ea24c97..47bfe07eb 100644 --- a/lib/features/thread/data/local/email_cache_manager.dart +++ b/lib/features/thread/data/local/email_cache_manager.dart @@ -95,12 +95,14 @@ class EmailCacheManager { return _emailCacheClient.insertItem(keyCache, emailCache); } - Future storeMultipleEmails(AccountId accountId, UserName userName, List emailsCache) { - return Future.wait(emailsCache.map((emailCache) => storeEmail( - accountId, - userName, - emailCache, - ))); + Future storeMultipleEmails(AccountId accountId, UserName userName, List emailsCache) async { + final emailsToCache = Map.fromEntries(emailsCache.map( + (emailCache) => MapEntry( + TupleKey(emailCache.id, accountId.asString, userName.value).encodeKey, + emailCache, + ), + )); + await _emailCacheClient.insertMultipleItem(emailsToCache); } Future getStoredEmail(AccountId accountId, UserName userName, EmailId emailId) async { diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 1f3b927f2..0fbb49501 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -369,7 +369,9 @@ class ThreadController extends BaseController with EmailActionController { destinationMailboxId: reactionState.destinationMailboxId, moveAction: reactionState.moveAction, ); - _checkIfCurrentMailboxCanLoadMore(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _checkIfCurrentMailboxCanLoadMore(); + }); } else if (reactionState is DeleteEmailPermanentlySuccess || reactionState is DeleteMultipleEmailsPermanentlyAllSuccess || reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure @@ -396,7 +398,7 @@ class ThreadController extends BaseController with EmailActionController { final currentMailbox = mailboxDashBoardController.selectedMailbox.value; if (currentMailbox == null) return; - final totalEmailsCount = currentMailbox.totalEmails?.value.value ?? 0; + final totalEmailsCount = currentMailbox.countTotalEmails; if (totalEmailsCount == 0 || mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty ) return; diff --git a/model/lib/extensions/list_presentation_email_extension.dart b/model/lib/extensions/list_presentation_email_extension.dart index b4260a9b8..7ab345961 100644 --- a/model/lib/extensions/list_presentation_email_extension.dart +++ b/model/lib/extensions/list_presentation_email_extension.dart @@ -22,16 +22,17 @@ extension ListPresentationEmailExtension on List { List get listEmailIds => map((email) => email.id).whereNotNull().toList(); - Map> get emailIdsByMailboxId => Map.from( - where((email) => email.mailboxContain?.mailboxId != null && email.id != null) - .fold(>{}, (combine, email) { - final mailboxId = email.mailboxContain!.mailboxId!; - combine[mailboxId] ??= []; - combine[mailboxId]!.add(email.id!); - return combine; + Map> get emailIdsByMailboxId { + final Map> result = {}; + for (final email in this) { + final mailboxId = email.mailboxContain?.mailboxId; + final emailId = email.id; + if (mailboxId != null && emailId != null) { + (result[mailboxId] ??= []).add(emailId); } - ), - ); + } + return result; + } bool isAllCanDeletePermanently(Map mapMailbox) { final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))