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,3 +1,4 @@
import 'package:contact/contact/model/capability_contact.dart';
import 'package:contact/contact/model/contact_filter.dart';
import 'package:contact/core/method/request/autocomplete_method.dart';
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
@@ -19,7 +20,7 @@ class AutoCompleteTMailContactMethod extends AutoCompleteMethod {
@override
Set<CapabilityIdentifier> get requiredCapabilities => {
CapabilityIdentifier.jmapCore,
CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:autocomplete'))
capabilityContact
};
factory AutoCompleteTMailContactMethod.fromJson(Map<String, dynamic> json) {
@@ -0,0 +1,4 @@
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
final capabilityContact = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:autocomplete'));
+3 -1
View File
@@ -9,4 +9,6 @@ export 'data/datasource/auto_complete_datasource.dart';
export 'data/datasource_impl/tmail_contact_datasource_impl.dart';
export 'contact/autocomplete/autocomplete_tmail_contact_method.dart';
export 'contact/autocomplete/autocomplete_tmail_contact_response.dart';
export 'contact/autocomplete/autocomplete_tmail_contact_response.dart';
export 'contact/model/capability_contact.dart';
+3 -3
View File
@@ -1,11 +1,11 @@
name: contact
description: Contact Module
publish_to: 'none'
version: 0.0.1
version: 1.0.0+1
environment:
sdk: ">=2.16.1 <3.0.0"
flutter: ">=1.17.0"
sdk: ">=2.14.0 <3.0.0"
dependencies:
flutter:
@@ -1,4 +1,3 @@
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart';
import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart';
@@ -9,11 +8,6 @@ class ComposerDataSourceImpl extends ComposerDataSource {
ComposerDataSourceImpl(this._composerAPI);
@override
Future<bool> saveEmailAddresses(List<EmailAddress> listEmailAddress) {
throw UnimplementedError();
}
@override
Future<Attachment> uploadAttachment(UploadRequest uploadRequest) {
return Future.sync(() async {
@@ -16,9 +16,9 @@ class AutoCompleteRepositoryImpl extends AutoCompleteRepository {
await Future.wait(autoCompleteDataSources.map(
(datasource) => datasource.getAutoComplete(autoCompletePattern)))
.then((newListEmails) {
for (var emailAddress in newListEmails) {
listEmailAddress.addAll(emailAddress);
.then((newListResult) {
for (var listEmails in newListResult) {
listEmailAddress.addAll(listEmails);
}
});
@@ -1,4 +1,4 @@
enum ContactSuggestionSource {
all, localContact, deviceContact
all, tMailContact, deviceContact
}
@@ -12,7 +12,9 @@ class GetAutoCompleteWithDeviceContactInteractor {
final GetAutoCompleteInteractor _getAutoCompleteInteractor;
final GetDeviceContactSuggestionsInteractor _getDeviceContactSuggestionsInteractor;
GetAutoCompleteWithDeviceContactInteractor(this._getAutoCompleteInteractor, this._getDeviceContactSuggestionsInteractor);
GetAutoCompleteWithDeviceContactInteractor(
this._getAutoCompleteInteractor,
this._getDeviceContactSuggestionsInteractor);
Future<Either<Failure, Success>> execute(AutoCompletePattern autoCompletePattern) async {
try {
@@ -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);
}
+4 -2
View File
@@ -48,8 +48,10 @@ class AppPages {
GetPage(
name: AppRoutes.COMPOSER,
opaque: false,
page: () => DeferredWidget(composer.loadLibrary, () => composer.ComposerView()),
binding: ComposerBindings()),
page: () {
ComposerBindings().dependencies();
return DeferredWidget(composer.loadLibrary, () => composer.ComposerView());
}),
GetPage(
name: AppRoutes.DESTINATION_PICKER,
opaque: false,