TF-548 Inject TmailContactDataSource in composer of TMail
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:contact/contact/model/capability_contact.dart';
|
||||||
import 'package:contact/contact/model/contact_filter.dart';
|
import 'package:contact/contact/model/contact_filter.dart';
|
||||||
import 'package:contact/core/method/request/autocomplete_method.dart';
|
import 'package:contact/core/method/request/autocomplete_method.dart';
|
||||||
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
|
import 'package:jmap_dart_client/http/converter/account_id_converter.dart';
|
||||||
@@ -19,7 +20,7 @@ class AutoCompleteTMailContactMethod extends AutoCompleteMethod {
|
|||||||
@override
|
@override
|
||||||
Set<CapabilityIdentifier> get requiredCapabilities => {
|
Set<CapabilityIdentifier> get requiredCapabilities => {
|
||||||
CapabilityIdentifier.jmapCore,
|
CapabilityIdentifier.jmapCore,
|
||||||
CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:contact:autocomplete'))
|
capabilityContact
|
||||||
};
|
};
|
||||||
|
|
||||||
factory AutoCompleteTMailContactMethod.fromJson(Map<String, dynamic> json) {
|
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'));
|
||||||
@@ -9,4 +9,6 @@ export 'data/datasource/auto_complete_datasource.dart';
|
|||||||
export 'data/datasource_impl/tmail_contact_datasource_impl.dart';
|
export 'data/datasource_impl/tmail_contact_datasource_impl.dart';
|
||||||
|
|
||||||
export 'contact/autocomplete/autocomplete_tmail_contact_method.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';
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
name: contact
|
name: contact
|
||||||
description: Contact Module
|
description: Contact Module
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 0.0.1
|
|
||||||
|
version: 1.0.0+1
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.16.1 <3.0.0"
|
sdk: ">=2.14.0 <3.0.0"
|
||||||
flutter: ">=1.17.0"
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|
||||||
import 'package:model/model.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/datasource/composer_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart';
|
import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart';
|
||||||
@@ -9,11 +8,6 @@ class ComposerDataSourceImpl extends ComposerDataSource {
|
|||||||
|
|
||||||
ComposerDataSourceImpl(this._composerAPI);
|
ComposerDataSourceImpl(this._composerAPI);
|
||||||
|
|
||||||
@override
|
|
||||||
Future<bool> saveEmailAddresses(List<EmailAddress> listEmailAddress) {
|
|
||||||
throw UnimplementedError();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Attachment> uploadAttachment(UploadRequest uploadRequest) {
|
Future<Attachment> uploadAttachment(UploadRequest uploadRequest) {
|
||||||
return Future.sync(() async {
|
return Future.sync(() async {
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ class AutoCompleteRepositoryImpl extends AutoCompleteRepository {
|
|||||||
|
|
||||||
await Future.wait(autoCompleteDataSources.map(
|
await Future.wait(autoCompleteDataSources.map(
|
||||||
(datasource) => datasource.getAutoComplete(autoCompletePattern)))
|
(datasource) => datasource.getAutoComplete(autoCompletePattern)))
|
||||||
.then((newListEmails) {
|
.then((newListResult) {
|
||||||
for (var emailAddress in newListEmails) {
|
for (var listEmails in newListResult) {
|
||||||
listEmailAddress.addAll(emailAddress);
|
listEmailAddress.addAll(listEmails);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
enum ContactSuggestionSource {
|
enum ContactSuggestionSource {
|
||||||
all, localContact, deviceContact
|
all, tMailContact, deviceContact
|
||||||
}
|
}
|
||||||
+3
-1
@@ -12,7 +12,9 @@ class GetAutoCompleteWithDeviceContactInteractor {
|
|||||||
final GetAutoCompleteInteractor _getAutoCompleteInteractor;
|
final GetAutoCompleteInteractor _getAutoCompleteInteractor;
|
||||||
final GetDeviceContactSuggestionsInteractor _getDeviceContactSuggestionsInteractor;
|
final GetDeviceContactSuggestionsInteractor _getDeviceContactSuggestionsInteractor;
|
||||||
|
|
||||||
GetAutoCompleteWithDeviceContactInteractor(this._getAutoCompleteInteractor, this._getDeviceContactSuggestionsInteractor);
|
GetAutoCompleteWithDeviceContactInteractor(
|
||||||
|
this._getAutoCompleteInteractor,
|
||||||
|
this._getDeviceContactSuggestionsInteractor);
|
||||||
|
|
||||||
Future<Either<Failure, Success>> execute(AutoCompletePattern autoCompletePattern) async {
|
Future<Either<Failure, Success>> execute(AutoCompletePattern autoCompletePattern) async {
|
||||||
try {
|
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:core/core.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:get/get.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/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/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/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/email_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/html_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';
|
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/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/repository/email_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.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/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/datasource_impl/manage_account_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.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;
|
import 'package:jmap_dart_client/http/http_client.dart' as jmap_http_client;
|
||||||
|
|
||||||
class ComposerBindings extends BaseBindings {
|
class ComposerBindings extends BaseBindings {
|
||||||
|
|
||||||
|
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
|
final Set<AutoCompleteDataSource> dataSources = {};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dependencies() {
|
void dependencies() {
|
||||||
_bindingsUtils();
|
_bindingsUtils();
|
||||||
@@ -56,6 +62,12 @@ class ComposerBindings extends BaseBindings {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsDataSourceImpl() {
|
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(() => ComposerDataSourceImpl(Get.find<ComposerAPI>()));
|
||||||
Get.lazyPut(() => ContactDataSourceImpl());
|
Get.lazyPut(() => ContactDataSourceImpl());
|
||||||
Get.lazyPut(() => EmailDataSourceImpl(Get.find<EmailAPI>()));
|
Get.lazyPut(() => EmailDataSourceImpl(Get.find<EmailAPI>()));
|
||||||
@@ -78,9 +90,7 @@ class ComposerBindings extends BaseBindings {
|
|||||||
@override
|
@override
|
||||||
void bindingsRepositoryImpl() {
|
void bindingsRepositoryImpl() {
|
||||||
Get.lazyPut(() => ComposerRepositoryImpl(Get.find<ComposerDataSource>()));
|
Get.lazyPut(() => ComposerRepositoryImpl(Get.find<ComposerDataSource>()));
|
||||||
Get.lazyPut(() => AutoCompleteRepositoryImpl({
|
Get.lazyPut(() => AutoCompleteRepositoryImpl(dataSources));
|
||||||
Get.find<AutoCompleteDataSource>(),
|
|
||||||
}));
|
|
||||||
Get.lazyPut(() => ContactRepositoryImpl(Get.find<ContactDataSource>()));
|
Get.lazyPut(() => ContactRepositoryImpl(Get.find<ContactDataSource>()));
|
||||||
Get.lazyPut(() => EmailRepositoryImpl(
|
Get.lazyPut(() => EmailRepositoryImpl(
|
||||||
Get.find<EmailDataSource>(),
|
Get.find<EmailDataSource>(),
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class ComposerController extends BaseController {
|
|||||||
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
|
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
|
||||||
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
|
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
|
||||||
List<EmailAddress> listBccEmailAddress = <EmailAddress>[];
|
List<EmailAddress> listBccEmailAddress = <EmailAddress>[];
|
||||||
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.localContact;
|
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
|
||||||
HtmlEditorApi? htmlEditorApi;
|
HtmlEditorApi? htmlEditorApi;
|
||||||
final html_editor_browser.HtmlEditorController htmlControllerBrowser =
|
final html_editor_browser.HtmlEditorController htmlControllerBrowser =
|
||||||
html_editor_browser.HtmlEditorController(processNewLineAsBr: true);
|
html_editor_browser.HtmlEditorController(processNewLineAsBr: true);
|
||||||
@@ -152,7 +152,10 @@ class ComposerController extends BaseController {
|
|||||||
void onReady() async {
|
void onReady() async {
|
||||||
_initEmail();
|
_initEmail();
|
||||||
_getAllIdentities();
|
_getAllIdentities();
|
||||||
Future.delayed(const Duration(milliseconds: 500), () => _checkContactPermission());
|
if (!BuildUtils.isWeb) {
|
||||||
|
Future.delayed(const Duration(milliseconds: 500), () =>
|
||||||
|
_checkContactPermission());
|
||||||
|
}
|
||||||
super.onReady();
|
super.onReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -579,12 +582,13 @@ class ComposerController extends BaseController {
|
|||||||
{required String word}) async {
|
{required String word}) async {
|
||||||
if (_contactSuggestionSource == ContactSuggestionSource.all) {
|
if (_contactSuggestionSource == ContactSuggestionSource.all) {
|
||||||
return await _getAutoCompleteWithDeviceContactInteractor
|
return await _getAutoCompleteWithDeviceContactInteractor
|
||||||
.execute(AutoCompletePattern(word: word))
|
.execute(AutoCompletePattern(word: word, accountId: mailboxDashBoardController.accountId.value))
|
||||||
.then((value) => value.fold(
|
.then((value) => value.fold(
|
||||||
(failure) => <EmailAddress>[],
|
(failure) => <EmailAddress>[],
|
||||||
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <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(
|
.then((value) => value.fold(
|
||||||
(failure) => <EmailAddress>[],
|
(failure) => <EmailAddress>[],
|
||||||
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <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);
|
||||||
|
}
|
||||||
@@ -48,8 +48,10 @@ class AppPages {
|
|||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.COMPOSER,
|
name: AppRoutes.COMPOSER,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
page: () => DeferredWidget(composer.loadLibrary, () => composer.ComposerView()),
|
page: () {
|
||||||
binding: ComposerBindings()),
|
ComposerBindings().dependencies();
|
||||||
|
return DeferredWidget(composer.loadLibrary, () => composer.ComposerView());
|
||||||
|
}),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.DESTINATION_PICKER,
|
name: AppRoutes.DESTINATION_PICKER,
|
||||||
opaque: false,
|
opaque: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user