TF-548 Inject TmailContactDataSource in composer of TMail

This commit is contained in:
dab246
2022-05-13 10:48:38 +07:00
committed by Dat H. Pham
parent 7e2786089d
commit 909db3c5df
12 changed files with 54 additions and 26 deletions
@@ -1,4 +1,4 @@
import 'package:contact/data/datasource/auto_complete_datasource.dart';
import 'package:contact/contact_module.dart';
import 'package:core/core.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:get/get.dart';
@@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/upload_mutiple_attachment_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
@@ -32,6 +33,7 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.dart';
@@ -43,6 +45,10 @@ import 'package:uuid/uuid.dart';
import 'package:jmap_dart_client/http/http_client.dart' as jmap_http_client;
class ComposerBindings extends BaseBindings {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final Set<AutoCompleteDataSource> dataSources = {};
@override
void dependencies() {
_bindingsUtils();
@@ -56,6 +62,12 @@ class ComposerBindings extends BaseBindings {
@override
void bindingsDataSourceImpl() {
if (mailboxDashBoardController.sessionCurrent?.hasSupportAutoComplete == true) {
Get.lazyPut(() => ContactAPI(Get.find<jmap_http_client.HttpClient>()));
Get.lazyPut(() => TMailContactDataSourceImpl(Get.find<ContactAPI>()));
dataSources.add(Get.find<TMailContactDataSourceImpl>());
}
Get.lazyPut(() => ComposerDataSourceImpl(Get.find<ComposerAPI>()));
Get.lazyPut(() => ContactDataSourceImpl());
Get.lazyPut(() => EmailDataSourceImpl(Get.find<EmailAPI>()));
@@ -78,9 +90,7 @@ class ComposerBindings extends BaseBindings {
@override
void bindingsRepositoryImpl() {
Get.lazyPut(() => ComposerRepositoryImpl(Get.find<ComposerDataSource>()));
Get.lazyPut(() => AutoCompleteRepositoryImpl({
Get.find<AutoCompleteDataSource>(),
}));
Get.lazyPut(() => AutoCompleteRepositoryImpl(dataSources));
Get.lazyPut(() => ContactRepositoryImpl(Get.find<ContactDataSource>()));
Get.lazyPut(() => EmailRepositoryImpl(
Get.find<EmailDataSource>(),
@@ -88,7 +88,7 @@ class ComposerController extends BaseController {
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
List<EmailAddress> listBccEmailAddress = <EmailAddress>[];
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.localContact;
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
HtmlEditorApi? htmlEditorApi;
final html_editor_browser.HtmlEditorController htmlControllerBrowser =
html_editor_browser.HtmlEditorController(processNewLineAsBr: true);
@@ -152,7 +152,10 @@ class ComposerController extends BaseController {
void onReady() async {
_initEmail();
_getAllIdentities();
Future.delayed(const Duration(milliseconds: 500), () => _checkContactPermission());
if (!BuildUtils.isWeb) {
Future.delayed(const Duration(milliseconds: 500), () =>
_checkContactPermission());
}
super.onReady();
}
@@ -579,12 +582,13 @@ class ComposerController extends BaseController {
{required String word}) async {
if (_contactSuggestionSource == ContactSuggestionSource.all) {
return await _getAutoCompleteWithDeviceContactInteractor
.execute(AutoCompletePattern(word: word))
.execute(AutoCompletePattern(word: word, accountId: mailboxDashBoardController.accountId.value))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
}
return await _getAutoCompleteInteractor.execute(AutoCompletePattern(word: word))
return await _getAutoCompleteInteractor
.execute(AutoCompletePattern(word: word, accountId: mailboxDashBoardController.accountId.value))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
@@ -0,0 +1,9 @@
import 'package:contact/contact_module.dart' as contact;
import 'package:jmap_dart_client/jmap/core/session/session.dart';
extension SessionExtension on Session {
bool get hasSupportAutoComplete =>
capabilities.containsKey(contact.capabilityContact);
}