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
@@ -5,8 +5,10 @@ import 'package:tmail_ui_user/features/login/data/repository/credential_reposito
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_cache_manager.dart';
import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
@@ -21,7 +23,11 @@ class MailboxBindings extends Bindings {
Get.lazyPut(() => DeleteCredentialInteractor(Get.find<CredentialRepository>()));
Get.lazyPut(() => MailboxDataSourceImpl(Get.find<MailboxAPI>()));
Get.lazyPut<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>());
Get.lazyPut(() => MailboxRepositoryImpl(Get.find<MailboxDataSource>()));
Get.lazyPut(() => MailboxCacheDataSourceImpl(Get.find<MailboxCacheManager>()));
Get.lazyPut(() => MailboxRepositoryImpl({
DataSourceType.network: Get.find<MailboxDataSource>(),
DataSourceType.local: Get.find<MailboxCacheDataSourceImpl>(),
}));
Get.lazyPut<MailboxRepository>(() => Get.find<MailboxRepositoryImpl>());
Get.lazyPut(() => GetAllMailboxInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => TreeBuilder());
@@ -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);
}
}
}
@@ -2,8 +2,7 @@ import 'dart:collection';
import 'package:collection/collection.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/domain/extensions/mailbox_name_extension.dart';
import 'package:model/model.dart';
import 'mailbox_node.dart';
import 'mailbox_tree.dart';
@@ -77,7 +77,7 @@ class MailBoxFolderTileBuilder {
title: Padding(
padding: EdgeInsets.only(left: 8),
child: Text(
_mailboxNode.item.name!.name,
'${_mailboxNode.item.name?.name}',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
@@ -68,7 +68,7 @@ class MailboxTileBuilder {
title: Padding(
padding: EdgeInsets.only(left: 8),
child: Text(
_presentationMailbox.name!.name,
'${_presentationMailbox.name?.name}',
maxLines: 1,
overflow:TextOverflow.ellipsis,
style: TextStyle(