diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index a42048b34..09bcebd44 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -97,4 +97,8 @@ abstract class EmailDataSource { Future> getAllSendingEmails(AccountId accountId, UserName userName); Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId); + + Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds); + + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails); } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart index d9733ad6f..77dde0ff2 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -195,7 +195,7 @@ class EmailDataSourceImpl extends EmailDataSource { } @override - Future> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) { + Future> getAllSendingEmails(AccountId accountId, UserName userName) { throw UnimplementedError(); } @@ -208,4 +208,14 @@ class EmailDataSourceImpl extends EmailDataSource { Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail) { throw UnimplementedError(); } + + @override + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails) { + throw UnimplementedError(); + } + + @override + Future> deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart index 8dde0f895..9f8cc12d1 100644 --- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart @@ -35,6 +35,7 @@ import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/extensions/list_sending_email_extension.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart'; @@ -256,25 +257,40 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { } @override - Future> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) { + Future> getAllSendingEmails(AccountId accountId, UserName userName) { return Future.sync(() async { - final sendingEmailsCache = await _sendingEmailCacheManager.getAllSendingEmailsByTupleKey(accountId, userName, needToReopen: needToReopen); + final sendingEmailsCache = await _sendingEmailCacheManager.getAllSendingEmailsByTupleKey(accountId, userName); return sendingEmailsCache.toSendingEmails(); }).catchError(_exceptionThrower.throwException); } @override - Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) { + Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) { return Future.sync(() async { - return await _sendingEmailCacheManager.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen); + return await _sendingEmailCacheManager.deleteSendingEmail(accountId, userName, sendingId); }).catchError(_exceptionThrower.throwException); } @override - Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false}) { + Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail) { return Future.sync(() async { - final sendingEmailsCache = await _sendingEmailCacheManager.updateSendingEmail(accountId, userName, newSendingEmail.toHiveCache(), needToReopen: needToReopen); + final sendingEmailsCache = await _sendingEmailCacheManager.updateSendingEmail(accountId, userName, newSendingEmail.toHiveCache()); return sendingEmailsCache.toSendingEmail(); }).catchError(_exceptionThrower.throwException); } + + @override + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails) { + return Future.sync(() async { + final listSendingEmailsCache = await _sendingEmailCacheManager.updateMultipleSendingEmail(accountId, userName, newSendingEmails.toHiveCache()); + return listSendingEmailsCache.toSendingEmails(); + }).catchError(_exceptionThrower.throwException); + } + + @override + Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { + return Future.sync(() async { + return await _sendingEmailCacheManager.deleteMultipleSendingEmail(accountId, userName, sendingIds); + }).catchError(_exceptionThrower.throwException); + } } \ No newline at end of file diff --git a/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart b/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart index 3cc03423c..6c21ac4d8 100644 --- a/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart +++ b/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart @@ -11,22 +11,32 @@ class SendingQueueRepositoryImpl extends SendingQueueRepository { SendingQueueRepositoryImpl(this._emailHiveCacheDataSourceImpl); @override - Future> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) { - return _emailHiveCacheDataSourceImpl.getAllSendingEmails(accountId, userName, needToReopen: needToReopen); + Future> getAllSendingEmails(AccountId accountId, UserName userName) { + return _emailHiveCacheDataSourceImpl.getAllSendingEmails(accountId, userName); } @override - Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) { - return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen); + Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) { + return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId); } @override - Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false}) { - return _emailHiveCacheDataSourceImpl.updateSendingEmail(accountId, userName, newSendingEmail, needToReopen: needToReopen); + Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail) { + return _emailHiveCacheDataSourceImpl.updateSendingEmail(accountId, userName, newSendingEmail); } @override Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) { return _emailHiveCacheDataSourceImpl.storeSendingEmail(accountId, userName, sendingEmail); } + + @override + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails) { + return _emailHiveCacheDataSourceImpl.updateMultipleSendingEmail(accountId, userName, newSendingEmails); + } + + @override + Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { + return _emailHiveCacheDataSourceImpl.deleteMultipleSendingEmail(accountId, userName, sendingIds); + } } \ No newline at end of file diff --git a/lib/features/sending_queue/domain/repository/sending_queue_repository.dart b/lib/features/sending_queue/domain/repository/sending_queue_repository.dart index 1354bb4f4..62fe689ba 100644 --- a/lib/features/sending_queue/domain/repository/sending_queue_repository.dart +++ b/lib/features/sending_queue/domain/repository/sending_queue_repository.dart @@ -4,11 +4,15 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; abstract class SendingQueueRepository { - Future> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}); + Future> getAllSendingEmails(AccountId accountId, UserName userName); Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); - Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}); + Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId); - Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false}); + Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds); + + Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail); + + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails); } \ No newline at end of file diff --git a/lib/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart b/lib/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart index 3b052dd43..cd3db7f42 100644 --- a/lib/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart +++ b/lib/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart @@ -4,16 +4,13 @@ import 'package:core/presentation/state/success.dart'; class DeleteMultipleSendingEmailLoading extends UIState {} -class DeleteMultipleSendingEmailAllSuccess extends UIState {} +class DeleteMultipleSendingEmailSuccess extends UIState { + final List sendingIds; -class DeleteMultipleSendingEmailHasSomeSuccess extends UIState {} - -class DeleteMultipleSendingEmailAllFailure extends FeatureFailure { - - DeleteMultipleSendingEmailAllFailure(dynamic exception) : super(exception: exception); + DeleteMultipleSendingEmailSuccess(this.sendingIds); @override - List get props => [exception]; + List get props => [sendingIds]; } class DeleteMultipleSendingEmailFailure extends FeatureFailure { diff --git a/lib/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart b/lib/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart index c0964a572..a2b1ed87b 100644 --- a/lib/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart +++ b/lib/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart @@ -3,32 +3,19 @@ import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart'; -import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_single_sending_email_interactor.dart'; class DeleteMultipleSendingEmailInteractor { - final DeleteSingleSendingEmailInteractor _deleteSingleSendingEmailInteractor; + final SendingQueueRepository _sendingQueueRepository; - DeleteMultipleSendingEmailInteractor(this._deleteSingleSendingEmailInteractor); + DeleteMultipleSendingEmailInteractor(this._sendingQueueRepository); Stream> execute(AccountId accountId, UserName userName, List sendingIds) async* { try { yield Right(DeleteMultipleSendingEmailLoading()); - final listResult = await Future.wait( - sendingIds.map((sendingId) => _deleteSingleSendingEmailInteractor.execute(accountId, userName, sendingId)), - eagerError: true - ); - - bool isAllSuccess = listResult.every((either) => either.isRight()); - bool isAllFailure = listResult.every((either) => either.isLeft()); - - if (isAllSuccess) { - yield Right(DeleteMultipleSendingEmailAllSuccess()); - } else if (isAllFailure) { - yield Left(DeleteMultipleSendingEmailAllFailure(null)); - } else { - yield Right(DeleteMultipleSendingEmailHasSomeSuccess()); - } + await _sendingQueueRepository.deleteMultipleSendingEmail(accountId, userName, sendingIds); + yield Right(DeleteMultipleSendingEmailSuccess(sendingIds)); } catch (e) { yield Left(DeleteMultipleSendingEmailFailure(e)); } diff --git a/lib/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart b/lib/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart index 6ceaee52d..267931468 100644 --- a/lib/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart +++ b/lib/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart @@ -11,10 +11,10 @@ class DeleteSendingEmailInteractor { DeleteSendingEmailInteractor(this._sendingQueueRepository); - Stream> execute(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) async* { + Stream> execute(AccountId accountId, UserName userName, String sendingId) async* { try { yield Right(DeleteSendingEmailLoading()); - await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen); + await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId); yield Right(DeleteSendingEmailSuccess()); } catch (e) { yield Left(DeleteSendingEmailFailure(e)); diff --git a/lib/features/sending_queue/domain/usecases/delete_single_sending_email_interactor.dart b/lib/features/sending_queue/domain/usecases/delete_single_sending_email_interactor.dart deleted file mode 100644 index b32036565..000000000 --- a/lib/features/sending_queue/domain/usecases/delete_single_sending_email_interactor.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:core/presentation/state/failure.dart'; -import 'package:core/presentation/state/success.dart'; -import 'package:dartz/dartz.dart'; -import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:jmap_dart_client/jmap/core/user_name.dart'; -import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart'; -import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart'; - -class DeleteSingleSendingEmailInteractor { - final SendingQueueRepository _sendingQueueRepository; - - DeleteSingleSendingEmailInteractor(this._sendingQueueRepository); - - Future> execute(AccountId accountId, UserName userName, String sendingId) async { - try { - await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId); - return Right(DeleteSendingEmailSuccess()); - } catch (e) { - return Left(DeleteSendingEmailFailure(e)); - } - } -} \ No newline at end of file diff --git a/lib/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart b/lib/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart index 0f590fbdd..ad2e1bf9b 100644 --- a/lib/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart +++ b/lib/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart @@ -11,10 +11,10 @@ class GetAllSendingEmailInteractor { GetAllSendingEmailInteractor(this._sendingQueueRepository); - Stream> execute(AccountId accountId, UserName userName, {bool needToReopen = false}) async* { + Stream> execute(AccountId accountId, UserName userName) async* { try { yield Right(GetAllSendingEmailLoading()); - final sendingEmails = await _sendingQueueRepository.getAllSendingEmails(accountId, userName, needToReopen: needToReopen); + final sendingEmails = await _sendingQueueRepository.getAllSendingEmails(accountId, userName); yield Right(GetAllSendingEmailSuccess(sendingEmails)); } catch (e) { yield Left(GetAllSendingEmailFailure(e));