diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index c745b789a..1e4131a0f 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -158,14 +158,14 @@ class DestinationPickerController extends BaseMailboxController { } void getAllMailboxAction() { - if (accountId != null) { + if (accountId != null && _session != null) { consumeState(_getAllMailboxInteractor.execute(_session!, accountId!)); } } void _refreshMailboxChanges(jmap.State currentMailboxState) { - if (accountId != null) { - consumeState(_refreshAllMailboxInteractor.execute(accountId!, currentMailboxState)); + if (accountId != null && _session != null) { + consumeState(_refreshAllMailboxInteractor.execute(_session!, accountId!, currentMailboxState)); } } diff --git a/lib/features/mailbox/data/datasource/mailbox_datasource.dart b/lib/features/mailbox/data/datasource/mailbox_datasource.dart index 9830546fb..7aabd07dc 100644 --- a/lib/features/mailbox/data/datasource/mailbox_datasource.dart +++ b/lib/features/mailbox/data/datasource/mailbox_datasource.dart @@ -23,7 +23,7 @@ abstract class MailboxDataSource { Future> getAllMailboxCache(); - Future getChanges(AccountId accountId, State sinceState); + Future getChanges(Session session, AccountId accountId, State sinceState); Future update({List? updated, List? created, List? destroyed}); 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 272c224a3..6e36a76a3 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 @@ -34,7 +34,7 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource { } @override - Future getChanges(AccountId accountId, State sinceState) { + Future getChanges(Session session, AccountId accountId, State sinceState) { throw UnimplementedError(); } 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 be2b26176..30b72b330 100644 --- a/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart @@ -40,9 +40,9 @@ class MailboxDataSourceImpl extends MailboxDataSource { } @override - Future getChanges(AccountId accountId, State sinceState) { + Future getChanges(Session session, AccountId accountId, State sinceState) { return Future.sync(() async { - return await mailboxAPI.getChanges(accountId, sinceState); + return await mailboxAPI.getChanges(session, accountId, sinceState); }).catchError((error) { _exceptionThrower.throwException(error); }); diff --git a/lib/features/mailbox/data/network/mailbox_api.dart b/lib/features/mailbox/data/network/mailbox_api.dart index a8f29de67..ee181fdbb 100644 --- a/lib/features/mailbox/data/network/mailbox_api.dart +++ b/lib/features/mailbox/data/network/mailbox_api.dart @@ -49,7 +49,7 @@ class MailboxAPI with HandleSetErrorMixin { final queryInvocation = jmapRequestBuilder.invocation(getMailboxCreated); - final capabilities = capabilitiesSupportedMailboxes(session, accountId); + final capabilities = capabilitiesForGetMailboxMethod(session, accountId); final result = await (jmapRequestBuilder ..usings(capabilities)) @@ -63,7 +63,7 @@ class MailboxAPI with HandleSetErrorMixin { return MailboxResponse(mailboxes: resultCreated?.list, state: resultCreated?.state); } - Set capabilitiesSupportedMailboxes(Session session, AccountId accountId) { + Set capabilitiesForGetMailboxMethod(Session session, AccountId accountId) { final getMailboxCreated = GetMailboxMethod(accountId); try { requireCapability( @@ -76,7 +76,7 @@ class MailboxAPI with HandleSetErrorMixin { } } - Future getChanges(AccountId accountId, State sinceState) async { + Future getChanges(Session session, AccountId accountId, State sinceState) async { final processingInvocation = ProcessingInvocation(); final jmapRequestBuilder = JmapRequestBuilder(httpClient, processingInvocation); @@ -101,8 +101,10 @@ class MailboxAPI with HandleSetErrorMixin { final getMailboxUpdatedInvocation = jmapRequestBuilder.invocation(getMailboxUpdated); final getMailboxCreatedInvocation = jmapRequestBuilder.invocation(getMailboxCreated); + final capabilities = capabilitiesForGetMailboxMethod(session, accountId); + final result = await (jmapRequestBuilder - ..usings(getMailboxCreated.requiredCapabilities)) + ..usings(capabilities)) .build() .execute(); diff --git a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart index 0e706b045..98aae6ee8 100644 --- a/lib/features/mailbox/data/repository/mailbox_repository_impl.dart +++ b/lib/features/mailbox/data/repository/mailbox_repository_impl.dart @@ -51,7 +51,7 @@ class MailboxRepositoryImpl extends MailboxRepository { State? sinceState = localMailboxResponse.state!; while(hasMoreChanges && sinceState != null) { - final changesResponse = await mapDataSource[DataSourceType.network]!.getChanges(accountId, sinceState); + final changesResponse = await mapDataSource[DataSourceType.network]!.getChanges(session, accountId, sinceState); hasMoreChanges = changesResponse.hasMoreChanges; sinceState = changesResponse.newStateChanges; @@ -115,14 +115,14 @@ class MailboxRepositoryImpl extends MailboxRepository { } @override - Stream refresh(AccountId accountId, State currentState) async* { + Stream refresh(Session session, AccountId accountId, State currentState) async* { final localMailboxList = await mapDataSource[DataSourceType.local]!.getAllMailboxCache(); bool hasMoreChanges = true; State? sinceState = currentState; while(hasMoreChanges && sinceState != null) { - final changesResponse = await mapDataSource[DataSourceType.network]!.getChanges(accountId, sinceState); + final changesResponse = await mapDataSource[DataSourceType.network]!.getChanges(session, accountId, sinceState); hasMoreChanges = changesResponse.hasMoreChanges; sinceState = changesResponse.newStateChanges; diff --git a/lib/features/mailbox/domain/repository/mailbox_repository.dart b/lib/features/mailbox/domain/repository/mailbox_repository.dart index c9f345f2e..63ba06851 100644 --- a/lib/features/mailbox/domain/repository/mailbox_repository.dart +++ b/lib/features/mailbox/domain/repository/mailbox_repository.dart @@ -20,7 +20,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_re abstract class MailboxRepository { Stream getAllMailbox(Session session, AccountId accountId, {Properties? properties}); - Stream refresh(AccountId accountId, State currentState); + Stream refresh(Session session, AccountId accountId, State currentState); Future createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest); diff --git a/lib/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart index f9716a2ac..4eb288474 100644 --- a/lib/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/refresh_all_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:jmap_dart_client/jmap/core/state.dart' as jmapState; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_response.dart'; @@ -12,12 +13,12 @@ class RefreshAllMailboxInteractor { RefreshAllMailboxInteractor(this._mailboxRepository); - Stream> execute(AccountId accountId, jmapState.State currentState) async* { + Stream> execute(Session session, AccountId accountId, jmapState.State currentState) async* { try { yield Right(RefreshingState()); yield* _mailboxRepository - .refresh(accountId, currentState) + .refresh(session, accountId, currentState) .map(_toGetMailboxState); } catch (e) { yield Left(RefreshChangesAllMailboxFailure(e)); diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index acfdde150..c9c420d5a 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -330,8 +330,9 @@ class MailboxController extends BaseMailboxController { final newMailboxState = currentMailboxState ?? _currentMailboxState; log('MailboxController::refreshMailboxChanges(): newMailboxState: $newMailboxState'); final accountId = mailboxDashBoardController.accountId.value; - if (accountId != null && newMailboxState != null) { - consumeState(_refreshAllMailboxInteractor.execute(accountId, newMailboxState)); + final session = mailboxDashBoardController.sessionCurrent; + if (accountId != null && session != null && newMailboxState != null) { + consumeState(_refreshAllMailboxInteractor.execute(session, accountId, newMailboxState)); } }