diff --git a/lib/features/base/mixin/mailbox_action_handler_mixin.dart b/lib/features/base/mixin/mailbox_action_handler_mixin.dart index f9c495eeb..ec629da2e 100644 --- a/lib/features/base/mixin/mailbox_action_handler_mixin.dart +++ b/lib/features/base/mixin/mailbox_action_handler_mixin.dart @@ -19,12 +19,14 @@ mixin MailboxActionHandlerMixin { Function(BuildContext)? onCallbackAction } ) { + final session = dashboardController.sessionCurrent; final accountId = dashboardController.accountId.value; final mailboxId = presentationMailbox.id; final mailboxName = presentationMailbox.name; final countEmailsUnread = presentationMailbox.unreadEmails?.value.value ?? 0; - if (accountId != null && mailboxName != null) { + if (session != null && accountId != null && mailboxName != null) { dashboardController.markAsReadMailbox( + session, accountId, mailboxId, mailboxName, diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index 0713bb908..3c9d505b5 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -322,10 +322,11 @@ class DestinationPickerController extends BaseMailboxController { } void _dispatchCreateNewMailboxFolder( - AccountId accountId, - CreateNewMailboxRequest request + Session session, + AccountId accountId, + CreateNewMailboxRequest request ) async { - consumeState(_createNewMailboxInteractor.execute(accountId, request)); + consumeState(_createNewMailboxInteractor.execute(session, accountId, request)); } void _createNewMailboxSuccess(CreateNewMailboxSuccess success) { @@ -404,6 +405,7 @@ class DestinationPickerController extends BaseMailboxController { : mailboxDestination.value?.id; _dispatchCreateNewMailboxFolder( + _session!, accountId!, CreateNewMailboxRequest( generateCreateId, diff --git a/lib/features/mailbox/data/datasource/mailbox_datasource.dart b/lib/features/mailbox/data/datasource/mailbox_datasource.dart index ddbf23682..7baabf59d 100644 --- a/lib/features/mailbox/data/datasource/mailbox_datasource.dart +++ b/lib/features/mailbox/data/datasource/mailbox_datasource.dart @@ -28,21 +28,22 @@ abstract class MailboxDataSource { Future update({List? updated, List? created, List? destroyed}); - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest); + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest); Future> deleteMultipleMailbox(Session session, AccountId accountId, List mailboxIds); - Future renameMailbox(AccountId accountId, RenameMailboxRequest request); + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request); - Future moveMailbox(AccountId accountId, MoveMailboxRequest request); + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request); Future> markAsMailboxRead( + Session session, AccountId accountId, MailboxId mailboxId, int totalEmailUnread, StreamController> onProgressController); - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request); + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request); - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); + Future> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); } \ No newline at end of file diff --git a/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart index eb4a036f0..b6eceb883 100644 --- a/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart @@ -55,7 +55,7 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource { } @override - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { throw UnimplementedError(); } @@ -65,17 +65,18 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource { } @override - Future renameMailbox(AccountId accountId, RenameMailboxRequest request) { + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) { throw UnimplementedError(); } @override - Future moveMailbox(AccountId accountId, MoveMailboxRequest request) { + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) { throw UnimplementedError(); } @override Future> markAsMailboxRead( + Session session, AccountId accountId, MailboxId mailboxId, int totalEmailUnread, @@ -84,12 +85,12 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource { } @override - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) { throw UnimplementedError(); } @override - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { + Future> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { throw UnimplementedError(); } } \ No newline at end of file diff --git a/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart index f99ac8a69..55ec5594d 100644 --- a/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart @@ -56,9 +56,9 @@ class MailboxDataSourceImpl extends MailboxDataSource { } @override - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { return Future.sync(() async { - return await mailboxAPI.createNewMailbox(accountId, newMailboxRequest); + return await mailboxAPI.createNewMailbox(session, accountId, newMailboxRequest); }).catchError(_exceptionThrower.throwException); } @@ -70,27 +70,29 @@ class MailboxDataSourceImpl extends MailboxDataSource { } @override - Future renameMailbox(AccountId accountId, RenameMailboxRequest request) { + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) { return Future.sync(() async { - return await mailboxAPI.renameMailbox(accountId, request); + return await mailboxAPI.renameMailbox(session, accountId, request); }).catchError(_exceptionThrower.throwException); } @override - Future moveMailbox(AccountId accountId, MoveMailboxRequest request) { + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) { return Future.sync(() async { - return await mailboxAPI.moveMailbox(accountId, request); + return await mailboxAPI.moveMailbox(session, accountId, request); }).catchError(_exceptionThrower.throwException); } @override Future> markAsMailboxRead( + Session session, AccountId accountId, MailboxId mailboxId, int totalEmailUnread, StreamController> onProgressController) { return Future.sync(() async { return await _mailboxIsolateWorker.markAsMailboxRead( + session, accountId, mailboxId, totalEmailUnread, @@ -99,16 +101,20 @@ class MailboxDataSourceImpl extends MailboxDataSource { } @override - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) { return Future.sync(() async { - return await mailboxAPI.subscribeMailbox(accountId, request); + return await mailboxAPI.subscribeMailbox(session, accountId, request); }).catchError(_exceptionThrower.throwException); } @override - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { + Future> subscribeMultipleMailbox( + Session session, + AccountId accountId, + SubscribeMultipleMailboxRequest subscribeRequest + ) { return Future.sync(() async { - return await mailboxAPI.subscribeMultipleMailbox(accountId, subscribeRequest); + return await mailboxAPI.subscribeMultipleMailbox(session, accountId, subscribeRequest); }).catchError(_exceptionThrower.throwException); } } \ No newline at end of file diff --git a/lib/features/mailbox/data/network/mailbox_api.dart b/lib/features/mailbox/data/network/mailbox_api.dart index dd09e277a..091316d19 100644 --- a/lib/features/mailbox/data/network/mailbox_api.dart +++ b/lib/features/mailbox/data/network/mailbox_api.dart @@ -135,7 +135,7 @@ class MailboxAPI with HandleSetErrorMixin { updatedProperties: resultChanges?.updatedProperties); } - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest request) async { + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest request) async { final setMailboxMethod = SetMailboxMethod(accountId) ..addCreate( request.creationId, @@ -151,7 +151,7 @@ class MailboxAPI with HandleSetErrorMixin { final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final response = await (requestBuilder - ..usings(setMailboxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -190,7 +190,6 @@ class MailboxAPI with HandleSetErrorMixin { } Future> deleteMultipleMailbox(Session session, AccountId accountId, List mailboxIds) async { - requireCapability(session, accountId, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]); final coreCapability = session.getCapabilityProperties( accountId, CapabilityIdentifier.jmapCore); @@ -219,7 +218,7 @@ class MailboxAPI with HandleSetErrorMixin { .toList(); final response = await (requestBuilder - ..usings({CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail})) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -252,7 +251,7 @@ class MailboxAPI with HandleSetErrorMixin { return remainedErrors; } - Future renameMailbox(AccountId accountId, RenameMailboxRequest request) async { + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) async { final setMailboxMethod = SetMailboxMethod(accountId) ..addUpdates({request.mailboxId.id : PatchObject({'name' : request.newName.name})}); @@ -261,7 +260,7 @@ class MailboxAPI with HandleSetErrorMixin { final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final response = await (requestBuilder - ..usings(setMailboxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -276,7 +275,7 @@ class MailboxAPI with HandleSetErrorMixin { }); } - Future moveMailbox(AccountId accountId, MoveMailboxRequest request) async { + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) async { final setMailboxMethod = SetMailboxMethod(accountId) ..addUpdates({ request.mailboxId.id : PatchObject({ @@ -289,7 +288,7 @@ class MailboxAPI with HandleSetErrorMixin { final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final response = await (requestBuilder - ..usings(setMailboxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -304,7 +303,7 @@ class MailboxAPI with HandleSetErrorMixin { }); } - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) async { + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) async { final setMailboxMethod = SetMailboxMethod(accountId) ..addUpdates({ request.mailboxId.id : PatchObject({ @@ -317,7 +316,7 @@ class MailboxAPI with HandleSetErrorMixin { final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final response = await (requestBuilder - ..usings(setMailboxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); @@ -332,7 +331,11 @@ class MailboxAPI with HandleSetErrorMixin { }); } - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) async { + Future> subscribeMultipleMailbox( + Session session, + AccountId accountId, + SubscribeMultipleMailboxRequest subscribeRequest + ) async { final mapMailboxUpdated = subscribeRequest.mailboxIdsSubscribe .generateMapUpdateObjectSubscribeMailbox(subscribeRequest.subscribeState); @@ -344,7 +347,7 @@ class MailboxAPI with HandleSetErrorMixin { final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final response = await (requestBuilder - ..usings(setMailboxMethod.requiredCapabilities)) + ..usings(_capabilitiesForMailboxMethod(session, accountId))) .build() .execute(); diff --git a/lib/features/mailbox/data/network/mailbox_isolate_worker.dart b/lib/features/mailbox/data/network/mailbox_isolate_worker.dart index d0f46ae50..4429e700c 100644 --- a/lib/features/mailbox/data/network/mailbox_isolate_worker.dart +++ b/lib/features/mailbox/data/network/mailbox_isolate_worker.dart @@ -7,6 +7,7 @@ import 'package:core/utils/build_utils.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; @@ -34,10 +35,11 @@ class MailboxIsolateWorker { MailboxIsolateWorker(this._threadApi, this._emailApi, this._isolateExecutor); Future> markAsMailboxRead( - AccountId accountId, - MailboxId mailboxId, - int totalEmailUnread, - StreamController> onProgressController + Session session, + AccountId accountId, + MailboxId mailboxId, + int totalEmailUnread, + StreamController> onProgressController ) async { if (BuildUtils.isWeb) { return _handleMarkAsMailboxReadActionOnWeb( diff --git a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart index 885472c2d..f546cdc6d 100644 --- a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart +++ b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart @@ -154,8 +154,8 @@ class MailboxRepositoryImpl extends MailboxRepository { } @override - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { - return mapDataSource[DataSourceType.network]!.createNewMailbox(accountId, newMailboxRequest); + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { + return mapDataSource[DataSourceType.network]!.createNewMailbox(session, accountId, newMailboxRequest); } @override @@ -164,17 +164,19 @@ class MailboxRepositoryImpl extends MailboxRepository { } @override - Future renameMailbox(AccountId accountId, RenameMailboxRequest request) { - return mapDataSource[DataSourceType.network]!.renameMailbox(accountId, request); + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) { + return mapDataSource[DataSourceType.network]!.renameMailbox(session, accountId, request); } @override Future> markAsMailboxRead( + Session session, AccountId accountId, MailboxId mailboxId, int totalEmailUnread, StreamController> onProgressController) async { return mapDataSource[DataSourceType.network]!.markAsMailboxRead( + session, accountId, mailboxId, totalEmailUnread, @@ -182,8 +184,8 @@ class MailboxRepositoryImpl extends MailboxRepository { } @override - Future moveMailbox(AccountId accountId, MoveMailboxRequest request) { - return mapDataSource[DataSourceType.network]!.moveMailbox(accountId, request); + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) { + return mapDataSource[DataSourceType.network]!.moveMailbox(session, accountId, request); } @override @@ -192,12 +194,12 @@ class MailboxRepositoryImpl extends MailboxRepository { } @override - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { - return mapDataSource[DataSourceType.network]!.subscribeMailbox(accountId, request); + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) { + return mapDataSource[DataSourceType.network]!.subscribeMailbox(session, accountId, request); } @override - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { - return mapDataSource[DataSourceType.network]!.subscribeMultipleMailbox(accountId, subscribeRequest); + Future> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { + return mapDataSource[DataSourceType.network]!.subscribeMultipleMailbox(session, accountId, subscribeRequest); } } \ No newline at end of file diff --git a/lib/features/mailbox/domain/repository/mailbox_repository.dart b/lib/features/mailbox/domain/repository/mailbox_repository.dart index 71aa228af..18f888f9b 100644 --- a/lib/features/mailbox/domain/repository/mailbox_repository.dart +++ b/lib/features/mailbox/domain/repository/mailbox_repository.dart @@ -23,23 +23,24 @@ abstract class MailboxRepository { Stream refresh(Session session, AccountId accountId, State currentState); - Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest); + Future createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest); Future> deleteMultipleMailbox(Session session, AccountId accountId, List mailboxIds); - Future renameMailbox(AccountId accountId, RenameMailboxRequest request); + Future renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request); Future> markAsMailboxRead( - AccountId accountId, - MailboxId mailboxId, - int totalEmailUnread, - StreamController> onProgressController); + Session session, + AccountId accountId, + MailboxId mailboxId, + int totalEmailUnread, + StreamController> onProgressController); - Future moveMailbox(AccountId accountId, MoveMailboxRequest request); + Future moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request); Future getMailboxState(); - Future subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request); + Future subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request); - Future> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); + Future> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); } \ No newline at end of file diff --git a/lib/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart index 43ce3d0d6..3a38d8a31 100644 --- a/lib/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart'; @@ -10,12 +11,16 @@ class CreateNewMailboxInteractor { CreateNewMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) async* { + Stream> execute( + Session session, + AccountId accountId, + CreateNewMailboxRequest newMailboxRequest + ) async* { try { yield Right(LoadingCreateNewMailbox()); final currentMailboxState = await _mailboxRepository.getMailboxState(); - final newMailbox = await _mailboxRepository.createNewMailbox(accountId, newMailboxRequest); + final newMailbox = await _mailboxRepository.createNewMailbox(session, accountId, newMailboxRequest); if (newMailbox != null) { yield Right(CreateNewMailboxSuccess( newMailbox, diff --git a/lib/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart b/lib/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart index eafb0b778..42715eaf3 100644 --- a/lib/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart +++ b/lib/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; @@ -15,11 +16,12 @@ class MarkAsMailboxReadInteractor { MarkAsMailboxReadInteractor(this._mailboxRepository, this._emailRepository); Stream> execute( - AccountId accountId, - MailboxId mailboxId, - MailboxName mailboxName, - int totalEmailUnread, - StreamController> onProgressController + Session session, + AccountId accountId, + MailboxId mailboxId, + MailboxName mailboxName, + int totalEmailUnread, + StreamController> onProgressController ) async* { try { yield Right(MarkAsMailboxReadLoading()); @@ -34,10 +36,11 @@ class MarkAsMailboxReadInteractor { final currentEmailState = listState.last; final listEmails = await _mailboxRepository.markAsMailboxRead( - accountId, - mailboxId, - totalEmailUnread, - onProgressController); + session, + accountId, + mailboxId, + totalEmailUnread, + onProgressController); if (totalEmailUnread == listEmails.length) { yield Right(MarkAsMailboxReadAllSuccess( diff --git a/lib/features/mailbox/domain/usecases/move_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/move_mailbox_interactor.dart index b5da23087..e1ac008bb 100644 --- a/lib/features/mailbox/domain/usecases/move_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/move_mailbox_interactor.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart'; @@ -10,12 +11,12 @@ class MoveMailboxInteractor { MoveMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, MoveMailboxRequest request) async* { + Stream> execute(Session session, AccountId accountId, MoveMailboxRequest request) async* { try { yield Right(LoadingMoveMailbox()); final currentMailboxState = await _mailboxRepository.getMailboxState(); - final result = await _mailboxRepository.moveMailbox(accountId, request); + final result = await _mailboxRepository.moveMailbox(session, accountId, request); if (result) { yield Right(MoveMailboxSuccess( request.mailboxId, diff --git a/lib/features/mailbox/domain/usecases/rename_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/rename_mailbox_interactor.dart index bd06dd70d..bfadd4d15 100644 --- a/lib/features/mailbox/domain/usecases/rename_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/rename_mailbox_interactor.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart'; @@ -10,13 +11,13 @@ class RenameMailboxInteractor { RenameMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, RenameMailboxRequest request) async* { + Stream> execute(Session session, AccountId accountId, RenameMailboxRequest request) async* { try { yield Right(LoadingRenameMailbox()); final currentMailboxState = await _mailboxRepository.getMailboxState(); - final result = await _mailboxRepository.renameMailbox(accountId, request); + final result = await _mailboxRepository.renameMailbox(session, accountId, request); if (result) { yield Right(RenameMailboxSuccess(currentMailboxState: currentMailboxState)); } else { diff --git a/lib/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart index ee63f242a..28faf317b 100644 --- a/lib/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart @@ -2,6 +2,7 @@ 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/session/session.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart'; @@ -11,13 +12,13 @@ class SubscribeMailboxInteractor { SubscribeMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, SubscribeMailboxRequest request) async* { + Stream> execute(Session session, AccountId accountId, SubscribeMailboxRequest request) async* { try { yield Right(LoadingSubscribeMailbox()); final currentMailboxState = await _mailboxRepository.getMailboxState(); - final result = await _mailboxRepository.subscribeMailbox(accountId, request); + final result = await _mailboxRepository.subscribeMailbox(session, accountId, request); if (result) { yield Right(SubscribeMailboxSuccess( diff --git a/lib/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart index 019d526df..6bb7f6531 100644 --- a/lib/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart @@ -2,6 +2,7 @@ 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/session/session.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart'; @@ -11,12 +12,16 @@ class SubscribeMultipleMailboxInteractor { SubscribeMultipleMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) async* { + Stream> execute( + Session session, + AccountId accountId, + SubscribeMultipleMailboxRequest subscribeRequest + ) async* { try { yield Right(LoadingSubscribeMultipleMailbox()); final currentMailboxState = await _mailboxRepository.getMailboxState(); - final listResult = await _mailboxRepository.subscribeMultipleMailbox(accountId, subscribeRequest); + final listResult = await _mailboxRepository.subscribeMultipleMailbox(session, accountId, subscribeRequest); final matchedSize = listResult.length == subscribeRequest.mailboxIdsSubscribe.length; final allMatchedMailboxIdSubscribe = subscribeRequest.mailboxIdsSubscribe diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 05aa32f58..dae059b77 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; @@ -470,7 +471,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM void goToCreateNewMailboxView(BuildContext context) async { final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null) { + final session = mailboxDashBoardController.sessionCurrent; + if (session !=null && accountId != null) { final arguments = MailboxCreatorArguments( accountId, defaultMailboxTree.value, @@ -484,7 +486,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM arguments: arguments, onCreatedMailbox: (newMailboxArguments) { final generateCreateId = Id(_uuid.v1()); - _createNewMailboxAction(accountId, CreateNewMailboxRequest( + _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( generateCreateId, newMailboxArguments.newName, parentId: newMailboxArguments.mailboxLocation?.id)); @@ -496,7 +498,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) { final generateCreateId = Id(_uuid.v1()); - _createNewMailboxAction(accountId, CreateNewMailboxRequest( + _createNewMailboxAction(session, accountId, CreateNewMailboxRequest( generateCreateId, newMailboxArguments.newName, parentId: newMailboxArguments.mailboxLocation?.id)); @@ -505,8 +507,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } - void _createNewMailboxAction(AccountId accountId, CreateNewMailboxRequest request) async { - consumeState(_createNewMailboxInteractor.execute(accountId, request)); + void _createNewMailboxAction(Session session, AccountId accountId, CreateNewMailboxRequest request) async { + consumeState(_createNewMailboxInteractor.execute(session, accountId, request)); } void _createNewMailboxSuccess(CreateNewMailboxSuccess success) { @@ -763,9 +765,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { final accountId = mailboxDashBoardController.accountId.value; + final session = mailboxDashBoardController.sessionCurrent; - if (accountId != null) { + if (session != null && accountId != null) { consumeState(_renameMailboxInteractor.execute( + session, accountId, RenameMailboxRequest(presentationMailbox.id, newMailboxName)) ); @@ -775,17 +779,21 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } void _handleMovingMailbox( - AccountId accountId, - MoveAction moveAction, - PresentationMailbox mailboxSelected, - {PresentationMailbox? destinationMailbox}) { - consumeState(_moveMailboxInteractor.execute(accountId, - MoveMailboxRequest( - mailboxSelected.id, - moveAction, - destinationMailboxId: destinationMailbox?.id, - destinationMailboxName: destinationMailbox?.name, - parentId: mailboxSelected.parentId))); + Session session, + AccountId accountId, + MoveAction moveAction, + PresentationMailbox mailboxSelected, + {PresentationMailbox? destinationMailbox} + ) { + consumeState(_moveMailboxInteractor.execute( + session, + accountId, + MoveMailboxRequest( + mailboxSelected.id, + moveAction, + destinationMailboxId: destinationMailbox?.id, + destinationMailboxName: destinationMailbox?.name, + parentId: mailboxSelected.parentId))); } void _moveMailboxSuccess(MoveMailboxSuccess success) { @@ -815,9 +823,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { + final session = mailboxDashBoardController.sessionCurrent; final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null) { - consumeState(_moveMailboxInteractor.execute(accountId, newMoveRequest)); + if (session != null && accountId != null) { + consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest)); } } @@ -934,8 +943,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) { final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null) { + final session = mailboxDashBoardController.sessionCurrent; + if (session != null && accountId != null) { _handleMovingMailbox( + session, accountId, MoveAction.moving, mailboxSelected, @@ -1004,8 +1015,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM void _unsubscribeMailboxAction(MailboxId mailboxId) { final accountId = mailboxDashBoardController.accountId.value; - - if (accountId != null) { + final session = mailboxDashBoardController.sessionCurrent; + if (session != null && accountId != null) { final subscribeRequest = generateSubscribeRequest( mailboxId, MailboxSubscribeState.disabled, @@ -1013,9 +1024,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM ); if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); } } } @@ -1103,8 +1114,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM {List? listDescendantMailboxIds} ) { final accountId = mailboxDashBoardController.accountId.value; + final session = mailboxDashBoardController.sessionCurrent; - if (accountId != null) { + if (session != null && accountId != null) { SubscribeRequest? subscribeRequest; if (listDescendantMailboxIds != null) { @@ -1123,9 +1135,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); } } } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 0a6be2e44..799c4dc04 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1190,27 +1190,30 @@ class MailboxDashBoardController extends ReloadableController { } void markAsReadMailboxAction() { + final session = sessionCurrent; final currentAccountId = accountId.value; final mailboxId = selectedMailbox.value?.id; final mailboxName = selectedMailbox.value?.name; final countEmailsUnread = selectedMailbox.value?.unreadEmails?.value.value ?? 0; - if (currentAccountId != null && mailboxId != null && mailboxName != null) { - markAsReadMailbox(currentAccountId, mailboxId, mailboxName, countEmailsUnread.toInt()); + if (session != null && currentAccountId != null && mailboxId != null && mailboxName != null) { + markAsReadMailbox(session, currentAccountId, mailboxId, mailboxName, countEmailsUnread.toInt()); } } void markAsReadMailbox( - AccountId accountId, - MailboxId mailboxId, - MailboxName mailboxName, - int totalEmailsUnread + Session session, + AccountId accountId, + MailboxId mailboxId, + MailboxName mailboxName, + int totalEmailsUnread ) { consumeState(_markAsMailboxReadInteractor.execute( - accountId, - mailboxId, - mailboxName, - totalEmailsUnread, - _progressStateController)); + session, + accountId, + mailboxId, + mailboxName, + totalEmailsUnread, + _progressStateController)); } void _markAsReadMailboxSuccess(Success success) { diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart index 8bdc3f475..147477c65 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart @@ -124,7 +124,8 @@ class MailboxVisibilityController extends BaseMailboxController { void _subscribeMailboxAction(SubscribeMailboxRequest subscribeMailboxRequest) { final accountId = _accountDashBoardController.accountId.value; - if (accountId != null) { + final session = _accountDashBoardController.sessionCurrent.value; + if (session != null && accountId != null) { final subscribeRequest = generateSubscribeRequest( subscribeMailboxRequest.mailboxId, subscribeMailboxRequest.subscribeState, @@ -132,9 +133,9 @@ class MailboxVisibilityController extends BaseMailboxController { ); if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor!.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor!.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor!.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor!.execute(session, accountId, subscribeRequest)); } } } diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index d6c71562e..3e2afe318 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -12,6 +12,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_email_extension.dart'; @@ -292,8 +293,10 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { final accountId = dashboardController.accountId.value; - if (accountId != null) { + final session = dashboardController.sessionCurrent; + if (session != null && accountId != null) { consumeState(_renameMailboxInteractor.execute( + session, accountId, RenameMailboxRequest(presentationMailbox.id, newMailboxName) )); @@ -302,8 +305,10 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) { final accountId = dashboardController.accountId.value; - if (accountId != null) { + final session = dashboardController.sessionCurrent; + if (session != null && accountId != null) { _handleMovingMailbox( + session, accountId, MoveAction.moving, mailboxSelected, @@ -313,12 +318,14 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } void _handleMovingMailbox( + Session session, AccountId accountId, MoveAction moveAction, PresentationMailbox mailboxSelected, {PresentationMailbox? destinationMailbox} ) { consumeState(_moveMailboxInteractor.execute( + session, accountId, MoveMailboxRequest( mailboxSelected.id, @@ -357,8 +364,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { final accountId = dashboardController.accountId.value; - if (accountId != null) { - consumeState(_moveMailboxInteractor.execute(accountId, newMoveRequest)); + final session = dashboardController.sessionCurrent; + if (session != null && accountId != null) { + consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest)); } } @@ -417,13 +425,15 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa MailboxSubscribeAction subscribeAction ) { final accountId = dashboardController.accountId.value; - if (accountId != null) { + final session = dashboardController.sessionCurrent; + + if (session != null && accountId != null) { final subscribeRequest = generateSubscribeRequest(mailboxId, subscribeState, subscribeAction); if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); } } } @@ -524,7 +534,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa {List? listDescendantMailboxIds} ) { final accountId = dashboardController.accountId.value; - if (accountId != null) { + final session = dashboardController.sessionCurrent; + if (session != null && accountId != null) { SubscribeRequest? subscribeRequest; if (listDescendantMailboxIds != null) { @@ -543,9 +554,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); } } } @@ -555,7 +566,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa {List? listDescendantMailboxIds} ) { final accountId = dashboardController.accountId.value; - if (accountId != null) { + final session = dashboardController.sessionCurrent; + if (session != null && accountId != null) { SubscribeRequest? subscribeRequest; if (listDescendantMailboxIds != null) { @@ -574,9 +586,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa } if (subscribeRequest is SubscribeMultipleMailboxRequest) { - consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest)); } else if (subscribeRequest is SubscribeMailboxRequest) { - consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); + consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest)); } } }