TF-123 Implement caching mailbox when get all mailbox

This commit is contained in:
dab246
2021-09-28 15:05:24 +07:00
committed by Dat H. Pham
parent b8b3cf0db0
commit 8f5171d581
21 changed files with 438 additions and 61 deletions
@@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
@@ -99,7 +100,9 @@ class MailboxController extends BaseController {
}
@override
void onError(error) {}
void onError(error) {
print('$error');
}
void _buildTree(List<PresentationMailbox> folderMailboxList) async {
final _folderMailboxTree = await _treeBuilder.generateMailboxTree(folderMailboxList);
@@ -119,20 +122,32 @@ class MailboxController extends BaseController {
}
void _setUpMapMailboxIdDefault(List<PresentationMailbox> defaultMailboxList) {
final mapMailboxId = Map<Role, MailboxId>.fromIterable(
defaultMailboxList,
key: (presentationMailbox) => presentationMailbox.role!,
value: (presentationMailbox) => presentationMailbox.id);
final mapMailboxDefault = Map<Role, PresentationMailbox>.fromIterable(
defaultMailboxList,
key: (presentationMailbox) => presentationMailbox.role!,
value: (presentationMailbox) => presentationMailbox);
mailboxDashBoardController.setMapMailboxId(mapMailboxId);
var mailboxCurrent = mailboxDashBoardController.selectedMailbox.value;
defaultMailboxList.forEach((presentationMailbox) {
if (mailboxCurrent == null && presentationMailbox.role == PresentationMailbox.roleInbox) {
mailboxCurrent = presentationMailbox;
} else if (mailboxCurrent?.role == presentationMailbox.role) {
mailboxCurrent = presentationMailbox;
}
mailboxDashBoardController.addMailboxIdToMap(presentationMailbox.role!, presentationMailbox.id);
});
if (mailboxCurrent != null) {
mailboxDashBoardController.setNewFirstSelectedMailbox(mailboxCurrent);
if (mapMailboxDefault.containsKey(mailboxCurrent.role)) {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[mailboxCurrent.role]);
} else {
mailboxDashBoardController.setNewFirstSelectedMailbox(mailboxCurrent);
}
} else {
if (mapMailboxDefault.containsKey(PresentationMailbox.roleInbox)) {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault[PresentationMailbox.roleInbox]);
} else {
mailboxDashBoardController.setNewFirstSelectedMailbox(mapMailboxDefault.values.first);
}
}
}