TF-3385 Optimize misc

This commit is contained in:
DatDang
2025-01-03 17:00:16 +07:00
committed by Dat H. Pham
parent 0248b9138c
commit ee63f239e7
4 changed files with 37 additions and 30 deletions
@@ -244,19 +244,21 @@ class MailboxRepositoryImpl extends MailboxRepository {
totalEmailUnread, totalEmailUnread,
onProgressController); onProgressController);
try { try {
await mapDataSource[DataSourceType.local]!.markAsMailboxRead( await Future.wait([
session, mapDataSource[DataSourceType.local]!.markAsMailboxRead(
accountId, session,
mailboxId, accountId,
totalEmailUnread - result.length, mailboxId,
onProgressController, totalEmailUnread - result.length,
); onProgressController,
await emailDataSource?.markAsRead( ),
session, emailDataSource?.markAsRead(
accountId, session,
result, accountId,
ReadActions.markAsRead, result,
); ReadActions.markAsRead,
) ?? Future.value(),
]);
} catch (e) { } catch (e) {
logError('MailboxRepositoryImpl::markAsMailboxRead: Exception: $e'); logError('MailboxRepositoryImpl::markAsMailboxRead: Exception: $e');
} }
@@ -95,12 +95,14 @@ class EmailCacheManager {
return _emailCacheClient.insertItem(keyCache, emailCache); return _emailCacheClient.insertItem(keyCache, emailCache);
} }
Future<void> storeMultipleEmails(AccountId accountId, UserName userName, List<EmailCache> emailsCache) { Future<void> storeMultipleEmails(AccountId accountId, UserName userName, List<EmailCache> emailsCache) async {
return Future.wait(emailsCache.map((emailCache) => storeEmail( final emailsToCache = Map.fromEntries(emailsCache.map(
accountId, (emailCache) => MapEntry(
userName, TupleKey(emailCache.id, accountId.asString, userName.value).encodeKey,
emailCache, emailCache,
))); ),
));
await _emailCacheClient.insertMultipleItem(emailsToCache);
} }
Future<EmailCache> getStoredEmail(AccountId accountId, UserName userName, EmailId emailId) async { Future<EmailCache> getStoredEmail(AccountId accountId, UserName userName, EmailId emailId) async {
@@ -369,7 +369,9 @@ class ThreadController extends BaseController with EmailActionController {
destinationMailboxId: reactionState.destinationMailboxId, destinationMailboxId: reactionState.destinationMailboxId,
moveAction: reactionState.moveAction, moveAction: reactionState.moveAction,
); );
_checkIfCurrentMailboxCanLoadMore(); WidgetsBinding.instance.addPostFrameCallback((_) {
_checkIfCurrentMailboxCanLoadMore();
});
} else if (reactionState is DeleteEmailPermanentlySuccess } else if (reactionState is DeleteEmailPermanentlySuccess
|| reactionState is DeleteMultipleEmailsPermanentlyAllSuccess || reactionState is DeleteMultipleEmailsPermanentlyAllSuccess
|| reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure || reactionState is DeleteMultipleEmailsPermanentlyHasSomeEmailFailure
@@ -396,7 +398,7 @@ class ThreadController extends BaseController with EmailActionController {
final currentMailbox = mailboxDashBoardController.selectedMailbox.value; final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
if (currentMailbox == null) return; if (currentMailbox == null) return;
final totalEmailsCount = currentMailbox.totalEmails?.value.value ?? 0; final totalEmailsCount = currentMailbox.countTotalEmails;
if (totalEmailsCount == 0 if (totalEmailsCount == 0
|| mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty || mailboxDashBoardController.emailsInCurrentMailbox.isNotEmpty
) return; ) return;
@@ -22,16 +22,17 @@ extension ListPresentationEmailExtension on List<PresentationEmail> {
List<EmailId> get listEmailIds => map((email) => email.id).whereNotNull().toList(); List<EmailId> get listEmailIds => map((email) => email.id).whereNotNull().toList();
Map<MailboxId, List<EmailId>> get emailIdsByMailboxId => Map.from( Map<MailboxId, List<EmailId>> get emailIdsByMailboxId {
where((email) => email.mailboxContain?.mailboxId != null && email.id != null) final Map<MailboxId, List<EmailId>> result = {};
.fold(<MailboxId, List<EmailId>>{}, (combine, email) { for (final email in this) {
final mailboxId = email.mailboxContain!.mailboxId!; final mailboxId = email.mailboxContain?.mailboxId;
combine[mailboxId] ??= []; final emailId = email.id;
combine[mailboxId]!.add(email.id!); if (mailboxId != null && emailId != null) {
return combine; (result[mailboxId] ??= []).add(emailId);
} }
), }
); return result;
}
bool isAllCanDeletePermanently(Map<MailboxId, PresentationMailbox> mapMailbox) { bool isAllCanDeletePermanently(Map<MailboxId, PresentationMailbox> mapMailbox) {
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox)) final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))