diff --git a/lib/features/composer/data/datasource/composer_datasource.dart b/lib/features/composer/data/datasource/composer_datasource.dart index 0c090c512..2b82ecb51 100644 --- a/lib/features/composer/data/datasource/composer_datasource.dart +++ b/lib/features/composer/data/datasource/composer_datasource.dart @@ -1,8 +1,5 @@ -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/model.dart'; abstract class ComposerDataSource { - Future saveEmailAddresses(List listEmailAddress); - Future uploadAttachment(UploadRequest uploadRequest); } \ No newline at end of file diff --git a/lib/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart b/lib/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart deleted file mode 100644 index 5bbe0986a..000000000 --- a/lib/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:contact/data/datasource/auto_complete_datasource.dart'; -import 'package:core/core.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:model/autocomplete/auto_complete_pattern.dart'; -import 'package:tmail_ui_user/features/composer/data/local/email_address_database_manager.dart'; - -class LocalAutoCompleteDataSourceImpl extends AutoCompleteDataSource { - - final EmailAddressDatabaseManager emailAddressDatabaseManager; - - LocalAutoCompleteDataSourceImpl(this.emailAddressDatabaseManager); - - @override - Future> getAutoComplete(AutoCompletePattern autoCompletePattern) { - return Future.sync(() async { - if (autoCompletePattern.word.isEmpty) { - return await emailAddressDatabaseManager.getListData( - word: autoCompletePattern.word, - limit: autoCompletePattern.limit); - } else { - final condition = '${EmailAddressTable.NAME} LIKE \'%?${autoCompletePattern.word}\' OR ${EmailAddressTable.EMAIL} LIKE \'%${autoCompletePattern.word}%\''; - return await emailAddressDatabaseManager.getListDataWithCondition( - condition, - word: autoCompletePattern.word, - limit: autoCompletePattern.limit); - } - }).catchError((error) { - throw error; - }); - } -} \ No newline at end of file diff --git a/lib/features/composer/data/datasource_impl/local_composer_datasource_impl.dart b/lib/features/composer/data/datasource_impl/local_composer_datasource_impl.dart deleted file mode 100644 index 12d7bd314..000000000 --- a/lib/features/composer/data/datasource_impl/local_composer_datasource_impl.dart +++ /dev/null @@ -1,25 +0,0 @@ -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/local/email_address_database_manager.dart'; - -class LocalComposerDataSourceImpl extends ComposerDataSource { - - final EmailAddressDatabaseManager emailAddressDatabaseManager; - - LocalComposerDataSourceImpl(this.emailAddressDatabaseManager); - - @override - Future saveEmailAddresses(List listEmailAddress) { - return Future.sync(() async { - return await emailAddressDatabaseManager.insertMultipleData(listEmailAddress); - }).catchError((error) { - throw error; - }); - } - - @override - Future uploadAttachment(UploadRequest uploadRequest) { - throw UnimplementedError(); - } -} \ No newline at end of file diff --git a/lib/features/composer/data/local/email_address_database_manager.dart b/lib/features/composer/data/local/email_address_database_manager.dart deleted file mode 100644 index 50c56f161..000000000 --- a/lib/features/composer/data/local/email_address_database_manager.dart +++ /dev/null @@ -1,81 +0,0 @@ - -import 'package:core/core.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:model/model.dart'; - -class EmailAddressDatabaseManager implements DatabaseManager { - final DatabaseClient _databaseClient; - - EmailAddressDatabaseManager(this._databaseClient); - - @override - Future deleteData(String key) async { - final res = await _databaseClient.deleteData(EmailAddressTable.TABLE_NAME, EmailAddressTable.EMAIL, key); - return res > 0 ? true : false; - } - - @override - Future getData(String key) async { - final res = await _databaseClient.getData(EmailAddressTable.TABLE_NAME, EmailAddressTable.EMAIL, key); - return res.isNotEmpty ? EmailAddressCache.fromJson(res.first).toEmailAddress() : null; - } - - @override - Future> getListData({String? word, int? limit, String? orderBy}) async { - final res = await _databaseClient.getListData(EmailAddressTable.TABLE_NAME, limit: limit ?? 10, orderBy: orderBy ?? EmailAddressTable.NAME); - return res.isNotEmpty - ? res.map((mapObject) => EmailAddressCache.fromJson(mapObject).toEmailAddress()).toList() - : []; - } - - @override - Future insertData(EmailAddress emailAddress) async { - final res = await _databaseClient.insertData(EmailAddressTable.TABLE_NAME, emailAddress.toEmailAddressCache().toJson()); - return res > 0 ? true : false; - } - - @override - Future updateData(EmailAddress emailAddress) async { - final res = await _databaseClient.updateData( - EmailAddressTable.TABLE_NAME, - EmailAddressTable.EMAIL, - emailAddress.emailAddress, - emailAddress.toEmailAddressCache().toJson()); - return res > 0 ? true : false; - } - - @override - Future insertMultipleData(List listObject) async { - final listEmailAddressNotExist = await Future.wait(listObject - .map((emailAddress) async { - final emailAddressExist = await _databaseClient.getData( - EmailAddressTable.TABLE_NAME, - EmailAddressTable.EMAIL, - emailAddress.email ?? ''); - return emailAddressExist.isEmpty ? emailAddress : null;}) - .toList()); - - listEmailAddressNotExist.removeWhere((element) => element == null); - - final mapObjects = listEmailAddressNotExist - .map((emailAddress) => emailAddress!.toEmailAddressCache().toJson()) - .toList(); - - final res = await _databaseClient.insertMultipleData(EmailAddressTable.TABLE_NAME, mapObjects); - return res.isNotEmpty ? true : false; - } - - @override - Future> getListDataWithCondition(String condition, {String? word, int? limit, String? orderBy}) async { - final sqlQuery = 'SELECT * FROM ${EmailAddressTable.TABLE_NAME} ' - 'WHERE $condition ' - 'ORDER BY ${orderBy ?? EmailAddressTable.NAME} ' - 'LIMIT ${limit ?? 10}'; - - final res = await _databaseClient.getDataBySql(sqlQuery); - - return res.isNotEmpty - ? res.map((mapObject) => EmailAddressCache.fromJson(mapObject).toEmailAddress()).toList() - : []; - } -} \ No newline at end of file diff --git a/lib/features/composer/data/repository/auto_complete_repository_impl.dart b/lib/features/composer/data/repository/auto_complete_repository_impl.dart index 5fb6830b4..73167a3da 100644 --- a/lib/features/composer/data/repository/auto_complete_repository_impl.dart +++ b/lib/features/composer/data/repository/auto_complete_repository_impl.dart @@ -1,18 +1,27 @@ import 'package:contact/data/datasource/auto_complete_datasource.dart'; -import 'package:core/core.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/autocomplete/auto_complete_pattern.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/auto_complete_repository.dart'; class AutoCompleteRepositoryImpl extends AutoCompleteRepository { - final Map autoCompleteDataSources; + final Set autoCompleteDataSources; AutoCompleteRepositoryImpl(this.autoCompleteDataSources); @override - Future> getAutoComplete(AutoCompletePattern autoCompletePattern) { - return autoCompleteDataSources[DataSourceType.local]!.getAutoComplete(autoCompletePattern); + Future> getAutoComplete(AutoCompletePattern autoCompletePattern) async { + List listEmailAddress = []; + + await Future.wait(autoCompleteDataSources.map( + (datasource) => datasource.getAutoComplete(autoCompletePattern))) + .then((newListEmails) { + for (var emailAddress in newListEmails) { + listEmailAddress.addAll(emailAddress); + } + }); + + return listEmailAddress; } } \ No newline at end of file diff --git a/lib/features/composer/data/repository/composer_repository_impl.dart b/lib/features/composer/data/repository/composer_repository_impl.dart index 36290a02e..187a43694 100644 --- a/lib/features/composer/data/repository/composer_repository_impl.dart +++ b/lib/features/composer/data/repository/composer_repository_impl.dart @@ -1,23 +1,17 @@ -import 'package:core/core.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:model/model.dart'; +import 'package:model/email/attachment.dart'; +import 'package:model/upload/upload_request.dart'; import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; class ComposerRepositoryImpl extends ComposerRepository { - final Map composerDataSources; + final ComposerDataSource composerDataSource; - ComposerRepositoryImpl(this.composerDataSources); - - @override - Future saveEmailAddresses(List listEmailAddress) { - return composerDataSources[DataSourceType.local]!.saveEmailAddresses(listEmailAddress); - } + ComposerRepositoryImpl(this.composerDataSource); @override Future uploadAttachment(UploadRequest uploadRequest) { - return composerDataSources[DataSourceType.network]!.uploadAttachment(uploadRequest); + return composerDataSource.uploadAttachment(uploadRequest); } } \ No newline at end of file diff --git a/lib/features/composer/domain/repository/composer_repository.dart b/lib/features/composer/domain/repository/composer_repository.dart index 28a149983..21346337f 100644 --- a/lib/features/composer/domain/repository/composer_repository.dart +++ b/lib/features/composer/domain/repository/composer_repository.dart @@ -1,8 +1,5 @@ -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/model.dart'; abstract class ComposerRepository { - Future saveEmailAddresses(List listEmailAddress); - Future uploadAttachment(UploadRequest uploadRequest); } \ No newline at end of file diff --git a/lib/features/composer/domain/usecases/save_email_addresses_interactor.dart b/lib/features/composer/domain/usecases/save_email_addresses_interactor.dart deleted file mode 100644 index 7afd2a225..000000000 --- a/lib/features/composer/domain/usecases/save_email_addresses_interactor.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:core/core.dart'; -import 'package:dartz/dartz.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; -import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; -import 'package:tmail_ui_user/features/composer/domain/state/save_email_address_state.dart'; - -class SaveEmailAddressesInteractor { - final ComposerRepository composerRepository; - - SaveEmailAddressesInteractor(this.composerRepository); - - Future> execute(List emailAddress) async { - try { - final result = await composerRepository.saveEmailAddresses(emailAddress); - return result ? Right(SaveEmailAddressSuccess()) : Left(SaveEmailAddressFailure(result)); - } catch (e) { - return Left(SaveEmailAddressFailure(e)); - } - } -} \ No newline at end of file diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index 81053fe5f..cabc99e6a 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -7,9 +7,6 @@ import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasou import 'package:tmail_ui_user/features/composer/data/datasource/contact_datasource.dart'; import 'package:tmail_ui_user/features/composer/data/datasource_impl/composer_datasource_impl.dart'; import 'package:tmail_ui_user/features/composer/data/datasource_impl/contact_datasource_impl.dart'; -import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart'; -import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_composer_datasource_impl.dart'; -import 'package:tmail_ui_user/features/composer/data/local/email_address_database_manager.dart'; import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart'; import 'package:tmail_ui_user/features/composer/data/repository/auto_complete_repository_impl.dart'; import 'package:tmail_ui_user/features/composer/data/repository/composer_repository_impl.dart'; @@ -22,7 +19,6 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/get_device_conta import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/upload_attachment_interactor.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_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'; @@ -54,7 +50,6 @@ class ComposerBindings extends BaseBindings { } void _bindingsUtils() { - Get.lazyPut(() => EmailAddressDatabaseManager(Get.find())); Get.lazyPut(() => const Uuid()); Get.lazyPut(() => ManageAccountAPI(Get.find())); } @@ -62,8 +57,6 @@ class ComposerBindings extends BaseBindings { @override void bindingsDataSourceImpl() { Get.lazyPut(() => ComposerDataSourceImpl(Get.find())); - Get.lazyPut(() => LocalComposerDataSourceImpl(Get.find())); - Get.lazyPut(() => LocalAutoCompleteDataSourceImpl(Get.find())); Get.lazyPut(() => ContactDataSourceImpl()); Get.lazyPut(() => EmailDataSourceImpl(Get.find())); Get.lazyPut(() => HtmlDataSourceImpl( @@ -84,13 +77,9 @@ class ComposerBindings extends BaseBindings { @override void bindingsRepositoryImpl() { - Get.lazyPut(() => ComposerRepositoryImpl({ - DataSourceType.network: Get.find(), - DataSourceType.local: Get.find(), - })); + Get.lazyPut(() => ComposerRepositoryImpl(Get.find())); Get.lazyPut(() => AutoCompleteRepositoryImpl({ - DataSourceType.network: Get.find(), - DataSourceType.local: Get.find(), + Get.find(), })); Get.lazyPut(() => ContactRepositoryImpl(Get.find())); Get.lazyPut(() => EmailRepositoryImpl( @@ -111,7 +100,6 @@ class ComposerBindings extends BaseBindings { @override void bindingsInteractor() { - Get.lazyPut(() => SaveEmailAddressesInteractor(Get.find())); Get.lazyPut(() => GetAutoCompleteInteractor(Get.find())); Get.lazyPut(() => GetDeviceContactSuggestionsInteractor(Get.find())); Get.lazyPut(() => GetAutoCompleteWithDeviceContactInteractor( @@ -132,7 +120,6 @@ class ComposerBindings extends BaseBindings { void bindingsController() { Get.lazyPut(() => ComposerController( Get.find(), - Get.find(), Get.find(), Get.find(), Get.find(), diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index aa936d6f4..47767ece1 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -32,7 +32,6 @@ import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_st import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/state/upload_attachment_state.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart'; @@ -75,7 +74,6 @@ class ComposerController extends BaseController { final listIdentities = [].obs; final SendEmailInteractor _sendEmailInteractor; - final SaveEmailAddressesInteractor _saveEmailAddressInteractor; final GetAutoCompleteInteractor _getAutoCompleteInteractor; final GetAutoCompleteWithDeviceContactInteractor _getAutoCompleteWithDeviceContactInteractor; final Uuid _uuid; @@ -130,7 +128,6 @@ class ComposerController extends BaseController { ComposerController( this._sendEmailInteractor, - this._saveEmailAddressInteractor, this._getAutoCompleteInteractor, this._getAutoCompleteWithDeviceContactInteractor, this._uuid, @@ -545,7 +542,6 @@ class ComposerController extends BaseController { final userProfile = mailboxDashBoardController.userProfile.value; if (arguments != null && session != null && mapDefaultMailboxId.isNotEmpty && userProfile != null) { - _saveEmailAddress(); final email = await _generateEmail(mapDefaultMailboxId, userProfile); final accountId = session.accounts.keys.first; @@ -567,12 +563,6 @@ class ComposerController extends BaseController { } } - void _saveEmailAddress() async { - final listEmailAddressCanSave = {}; - listEmailAddressCanSave.addAll(listToEmailAddress + listCcEmailAddress + listBccEmailAddress); - await _saveEmailAddressInteractor.execute(listEmailAddressCanSave.toList()); - } - void _checkContactPermission() async { final permissionStatus = await Permission.contacts.status; if (permissionStatus.isGranted) {