TF-1604: Add requiredCapabilities support TeamMailbox for mailbox

(cherry picked from commit ac7a8bff08ddc13e94b9ae97923c477c7d810ba0)
This commit is contained in:
HuyNguyen
2023-03-21 14:15:54 +07:00
committed by Dat Vu
parent 13fe2300dc
commit 0b0db87260
19 changed files with 196 additions and 132 deletions
@@ -19,12 +19,14 @@ mixin MailboxActionHandlerMixin {
Function(BuildContext)? onCallbackAction Function(BuildContext)? onCallbackAction
} }
) { ) {
final session = dashboardController.sessionCurrent;
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
final mailboxId = presentationMailbox.id; final mailboxId = presentationMailbox.id;
final mailboxName = presentationMailbox.name; final mailboxName = presentationMailbox.name;
final countEmailsUnread = presentationMailbox.unreadEmails?.value.value ?? 0; final countEmailsUnread = presentationMailbox.unreadEmails?.value.value ?? 0;
if (accountId != null && mailboxName != null) { if (session != null && accountId != null && mailboxName != null) {
dashboardController.markAsReadMailbox( dashboardController.markAsReadMailbox(
session,
accountId, accountId,
mailboxId, mailboxId,
mailboxName, mailboxName,
@@ -322,10 +322,11 @@ class DestinationPickerController extends BaseMailboxController {
} }
void _dispatchCreateNewMailboxFolder( void _dispatchCreateNewMailboxFolder(
AccountId accountId, Session session,
CreateNewMailboxRequest request AccountId accountId,
CreateNewMailboxRequest request
) async { ) async {
consumeState(_createNewMailboxInteractor.execute(accountId, request)); consumeState(_createNewMailboxInteractor.execute(session, accountId, request));
} }
void _createNewMailboxSuccess(CreateNewMailboxSuccess success) { void _createNewMailboxSuccess(CreateNewMailboxSuccess success) {
@@ -404,6 +405,7 @@ class DestinationPickerController extends BaseMailboxController {
: mailboxDestination.value?.id; : mailboxDestination.value?.id;
_dispatchCreateNewMailboxFolder( _dispatchCreateNewMailboxFolder(
_session!,
accountId!, accountId!,
CreateNewMailboxRequest( CreateNewMailboxRequest(
generateCreateId, generateCreateId,
@@ -28,21 +28,22 @@ abstract class MailboxDataSource {
Future<void> update({List<Mailbox>? updated, List<Mailbox>? created, List<MailboxId>? destroyed}); Future<void> update({List<Mailbox>? updated, List<Mailbox>? created, List<MailboxId>? destroyed});
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest); Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest);
Future<Map<Id,SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds); Future<Map<Id,SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds);
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request); Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request);
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request); Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request);
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
Session session,
AccountId accountId, AccountId accountId,
MailboxId mailboxId, MailboxId mailboxId,
int totalEmailUnread, int totalEmailUnread,
StreamController<dartz.Either<Failure, Success>> onProgressController); StreamController<dartz.Either<Failure, Success>> onProgressController);
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request); Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request);
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); Future<List<MailboxId>> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest);
} }
@@ -55,7 +55,7 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) {
throw UnimplementedError(); throw UnimplementedError();
} }
@@ -65,17 +65,18 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request) { Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) {
throw UnimplementedError(); throw UnimplementedError();
} }
@override @override
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request) { Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) {
throw UnimplementedError(); throw UnimplementedError();
} }
@override @override
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
Session session,
AccountId accountId, AccountId accountId,
MailboxId mailboxId, MailboxId mailboxId,
int totalEmailUnread, int totalEmailUnread,
@@ -84,12 +85,12 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) {
throw UnimplementedError(); throw UnimplementedError();
} }
@override @override
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { Future<List<MailboxId>> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) {
throw UnimplementedError(); throw UnimplementedError();
} }
} }
@@ -56,9 +56,9 @@ class MailboxDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) {
return Future.sync(() async { return Future.sync(() async {
return await mailboxAPI.createNewMailbox(accountId, newMailboxRequest); return await mailboxAPI.createNewMailbox(session, accountId, newMailboxRequest);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@@ -70,27 +70,29 @@ class MailboxDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request) { Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) {
return Future.sync(() async { return Future.sync(() async {
return await mailboxAPI.renameMailbox(accountId, request); return await mailboxAPI.renameMailbox(session, accountId, request);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@override @override
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request) { Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) {
return Future.sync(() async { return Future.sync(() async {
return await mailboxAPI.moveMailbox(accountId, request); return await mailboxAPI.moveMailbox(session, accountId, request);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@override @override
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
Session session,
AccountId accountId, AccountId accountId,
MailboxId mailboxId, MailboxId mailboxId,
int totalEmailUnread, int totalEmailUnread,
StreamController<dartz.Either<Failure, Success>> onProgressController) { StreamController<dartz.Either<Failure, Success>> onProgressController) {
return Future.sync(() async { return Future.sync(() async {
return await _mailboxIsolateWorker.markAsMailboxRead( return await _mailboxIsolateWorker.markAsMailboxRead(
session,
accountId, accountId,
mailboxId, mailboxId,
totalEmailUnread, totalEmailUnread,
@@ -99,16 +101,20 @@ class MailboxDataSourceImpl extends MailboxDataSource {
} }
@override @override
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) {
return Future.sync(() async { return Future.sync(() async {
return await mailboxAPI.subscribeMailbox(accountId, request); return await mailboxAPI.subscribeMailbox(session, accountId, request);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@override @override
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { Future<List<MailboxId>> subscribeMultipleMailbox(
Session session,
AccountId accountId,
SubscribeMultipleMailboxRequest subscribeRequest
) {
return Future.sync(() async { return Future.sync(() async {
return await mailboxAPI.subscribeMultipleMailbox(accountId, subscribeRequest); return await mailboxAPI.subscribeMultipleMailbox(session, accountId, subscribeRequest);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
} }
@@ -135,7 +135,7 @@ class MailboxAPI with HandleSetErrorMixin {
updatedProperties: resultChanges?.updatedProperties); updatedProperties: resultChanges?.updatedProperties);
} }
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest request) async { Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest request) async {
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addCreate( ..addCreate(
request.creationId, request.creationId,
@@ -151,7 +151,7 @@ class MailboxAPI with HandleSetErrorMixin {
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities)) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -190,7 +190,6 @@ class MailboxAPI with HandleSetErrorMixin {
} }
Future<Map<Id, SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds) async { Future<Map<Id, SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds) async {
requireCapability(session, accountId, [CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]);
final coreCapability = session.getCapabilityProperties<CoreCapability>( final coreCapability = session.getCapabilityProperties<CoreCapability>(
accountId, CapabilityIdentifier.jmapCore); accountId, CapabilityIdentifier.jmapCore);
@@ -219,7 +218,7 @@ class MailboxAPI with HandleSetErrorMixin {
.toList(); .toList();
final response = await (requestBuilder final response = await (requestBuilder
..usings({CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail})) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -252,7 +251,7 @@ class MailboxAPI with HandleSetErrorMixin {
return remainedErrors; return remainedErrors;
} }
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request) async { Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) async {
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addUpdates({request.mailboxId.id : PatchObject({'name' : request.newName.name})}); ..addUpdates({request.mailboxId.id : PatchObject({'name' : request.newName.name})});
@@ -261,7 +260,7 @@ class MailboxAPI with HandleSetErrorMixin {
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities)) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -276,7 +275,7 @@ class MailboxAPI with HandleSetErrorMixin {
}); });
} }
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request) async { Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) async {
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addUpdates({ ..addUpdates({
request.mailboxId.id : PatchObject({ request.mailboxId.id : PatchObject({
@@ -289,7 +288,7 @@ class MailboxAPI with HandleSetErrorMixin {
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities)) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -304,7 +303,7 @@ class MailboxAPI with HandleSetErrorMixin {
}); });
} }
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) async { Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) async {
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addUpdates({ ..addUpdates({
request.mailboxId.id : PatchObject({ request.mailboxId.id : PatchObject({
@@ -317,7 +316,7 @@ class MailboxAPI with HandleSetErrorMixin {
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities)) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -332,7 +331,11 @@ class MailboxAPI with HandleSetErrorMixin {
}); });
} }
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) async { Future<List<MailboxId>> subscribeMultipleMailbox(
Session session,
AccountId accountId,
SubscribeMultipleMailboxRequest subscribeRequest
) async {
final mapMailboxUpdated = subscribeRequest.mailboxIdsSubscribe final mapMailboxUpdated = subscribeRequest.mailboxIdsSubscribe
.generateMapUpdateObjectSubscribeMailbox(subscribeRequest.subscribeState); .generateMapUpdateObjectSubscribeMailbox(subscribeRequest.subscribeState);
@@ -344,7 +347,7 @@ class MailboxAPI with HandleSetErrorMixin {
final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod); final setMailboxInvocation = requestBuilder.invocation(setMailboxMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(setMailboxMethod.requiredCapabilities)) ..usings(_capabilitiesForMailboxMethod(session, accountId)))
.build() .build()
.execute(); .execute();
@@ -7,6 +7,7 @@ import 'package:core/utils/build_utils.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
@@ -34,10 +35,11 @@ class MailboxIsolateWorker {
MailboxIsolateWorker(this._threadApi, this._emailApi, this._isolateExecutor); MailboxIsolateWorker(this._threadApi, this._emailApi, this._isolateExecutor);
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
AccountId accountId, Session session,
MailboxId mailboxId, AccountId accountId,
int totalEmailUnread, MailboxId mailboxId,
StreamController<Either<Failure, Success>> onProgressController int totalEmailUnread,
StreamController<Either<Failure, Success>> onProgressController
) async { ) async {
if (BuildUtils.isWeb) { if (BuildUtils.isWeb) {
return _handleMarkAsMailboxReadActionOnWeb( return _handleMarkAsMailboxReadActionOnWeb(
@@ -154,8 +154,8 @@ class MailboxRepositoryImpl extends MailboxRepository {
} }
@override @override
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) { Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest) {
return mapDataSource[DataSourceType.network]!.createNewMailbox(accountId, newMailboxRequest); return mapDataSource[DataSourceType.network]!.createNewMailbox(session, accountId, newMailboxRequest);
} }
@override @override
@@ -164,17 +164,19 @@ class MailboxRepositoryImpl extends MailboxRepository {
} }
@override @override
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request) { Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request) {
return mapDataSource[DataSourceType.network]!.renameMailbox(accountId, request); return mapDataSource[DataSourceType.network]!.renameMailbox(session, accountId, request);
} }
@override @override
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
Session session,
AccountId accountId, AccountId accountId,
MailboxId mailboxId, MailboxId mailboxId,
int totalEmailUnread, int totalEmailUnread,
StreamController<dartz.Either<Failure, Success>> onProgressController) async { StreamController<dartz.Either<Failure, Success>> onProgressController) async {
return mapDataSource[DataSourceType.network]!.markAsMailboxRead( return mapDataSource[DataSourceType.network]!.markAsMailboxRead(
session,
accountId, accountId,
mailboxId, mailboxId,
totalEmailUnread, totalEmailUnread,
@@ -182,8 +184,8 @@ class MailboxRepositoryImpl extends MailboxRepository {
} }
@override @override
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request) { Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request) {
return mapDataSource[DataSourceType.network]!.moveMailbox(accountId, request); return mapDataSource[DataSourceType.network]!.moveMailbox(session, accountId, request);
} }
@override @override
@@ -192,12 +194,12 @@ class MailboxRepositoryImpl extends MailboxRepository {
} }
@override @override
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request) { Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request) {
return mapDataSource[DataSourceType.network]!.subscribeMailbox(accountId, request); return mapDataSource[DataSourceType.network]!.subscribeMailbox(session, accountId, request);
} }
@override @override
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) { Future<List<MailboxId>> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) {
return mapDataSource[DataSourceType.network]!.subscribeMultipleMailbox(accountId, subscribeRequest); return mapDataSource[DataSourceType.network]!.subscribeMultipleMailbox(session, accountId, subscribeRequest);
} }
} }
@@ -23,23 +23,24 @@ abstract class MailboxRepository {
Stream<MailboxResponse> refresh(Session session, AccountId accountId, State currentState); Stream<MailboxResponse> refresh(Session session, AccountId accountId, State currentState);
Future<Mailbox?> createNewMailbox(AccountId accountId, CreateNewMailboxRequest newMailboxRequest); Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest newMailboxRequest);
Future<Map<Id,SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds); Future<Map<Id,SetError>> deleteMultipleMailbox(Session session, AccountId accountId, List<MailboxId> mailboxIds);
Future<bool> renameMailbox(AccountId accountId, RenameMailboxRequest request); Future<bool> renameMailbox(Session session, AccountId accountId, RenameMailboxRequest request);
Future<List<Email>> markAsMailboxRead( Future<List<Email>> markAsMailboxRead(
AccountId accountId, Session session,
MailboxId mailboxId, AccountId accountId,
int totalEmailUnread, MailboxId mailboxId,
StreamController<dartz.Either<Failure, Success>> onProgressController); int totalEmailUnread,
StreamController<dartz.Either<Failure, Success>> onProgressController);
Future<bool> moveMailbox(AccountId accountId, MoveMailboxRequest request); Future<bool> moveMailbox(Session session, AccountId accountId, MoveMailboxRequest request);
Future<State?> getMailboxState(); Future<State?> getMailboxState();
Future<bool> subscribeMailbox(AccountId accountId, SubscribeMailboxRequest request); Future<bool> subscribeMailbox(Session session, AccountId accountId, SubscribeMailboxRequest request);
Future<List<MailboxId>> subscribeMultipleMailbox(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest); Future<List<MailboxId>> subscribeMultipleMailbox(Session session, AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest);
} }
@@ -1,6 +1,7 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/create_new_mailbox_state.dart';
@@ -10,12 +11,16 @@ class CreateNewMailboxInteractor {
CreateNewMailboxInteractor(this._mailboxRepository); CreateNewMailboxInteractor(this._mailboxRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewMailboxRequest newMailboxRequest) async* { Stream<Either<Failure, Success>> execute(
Session session,
AccountId accountId,
CreateNewMailboxRequest newMailboxRequest
) async* {
try { try {
yield Right<Failure, Success>(LoadingCreateNewMailbox()); yield Right<Failure, Success>(LoadingCreateNewMailbox());
final currentMailboxState = await _mailboxRepository.getMailboxState(); final currentMailboxState = await _mailboxRepository.getMailboxState();
final newMailbox = await _mailboxRepository.createNewMailbox(accountId, newMailboxRequest); final newMailbox = await _mailboxRepository.createNewMailbox(session, accountId, newMailboxRequest);
if (newMailbox != null) { if (newMailbox != null) {
yield Right<Failure, Success>(CreateNewMailboxSuccess( yield Right<Failure, Success>(CreateNewMailboxSuccess(
newMailbox, newMailbox,
@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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: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/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_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); MarkAsMailboxReadInteractor(this._mailboxRepository, this._emailRepository);
Stream<Either<Failure, Success>> execute( Stream<Either<Failure, Success>> execute(
AccountId accountId, Session session,
MailboxId mailboxId, AccountId accountId,
MailboxName mailboxName, MailboxId mailboxId,
int totalEmailUnread, MailboxName mailboxName,
StreamController<Either<Failure, Success>> onProgressController int totalEmailUnread,
StreamController<Either<Failure, Success>> onProgressController
) async* { ) async* {
try { try {
yield Right<Failure, Success>(MarkAsMailboxReadLoading()); yield Right<Failure, Success>(MarkAsMailboxReadLoading());
@@ -34,10 +36,11 @@ class MarkAsMailboxReadInteractor {
final currentEmailState = listState.last; final currentEmailState = listState.last;
final listEmails = await _mailboxRepository.markAsMailboxRead( final listEmails = await _mailboxRepository.markAsMailboxRead(
accountId, session,
mailboxId, accountId,
totalEmailUnread, mailboxId,
onProgressController); totalEmailUnread,
onProgressController);
if (totalEmailUnread == listEmails.length) { if (totalEmailUnread == listEmails.length) {
yield Right(MarkAsMailboxReadAllSuccess( yield Right(MarkAsMailboxReadAllSuccess(
@@ -1,6 +1,7 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart';
@@ -10,12 +11,12 @@ class MoveMailboxInteractor {
MoveMailboxInteractor(this._mailboxRepository); MoveMailboxInteractor(this._mailboxRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveMailboxRequest request) async* { Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MoveMailboxRequest request) async* {
try { try {
yield Right<Failure, Success>(LoadingMoveMailbox()); yield Right<Failure, Success>(LoadingMoveMailbox());
final currentMailboxState = await _mailboxRepository.getMailboxState(); final currentMailboxState = await _mailboxRepository.getMailboxState();
final result = await _mailboxRepository.moveMailbox(accountId, request); final result = await _mailboxRepository.moveMailbox(session, accountId, request);
if (result) { if (result) {
yield Right<Failure, Success>(MoveMailboxSuccess( yield Right<Failure, Success>(MoveMailboxSuccess(
request.mailboxId, request.mailboxId,
@@ -1,6 +1,7 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
@@ -10,13 +11,13 @@ class RenameMailboxInteractor {
RenameMailboxInteractor(this._mailboxRepository); RenameMailboxInteractor(this._mailboxRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, RenameMailboxRequest request) async* { Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, RenameMailboxRequest request) async* {
try { try {
yield Right<Failure, Success>(LoadingRenameMailbox()); yield Right<Failure, Success>(LoadingRenameMailbox());
final currentMailboxState = await _mailboxRepository.getMailboxState(); final currentMailboxState = await _mailboxRepository.getMailboxState();
final result = await _mailboxRepository.renameMailbox(accountId, request); final result = await _mailboxRepository.renameMailbox(session, accountId, request);
if (result) { if (result) {
yield Right<Failure, Success>(RenameMailboxSuccess(currentMailboxState: currentMailboxState)); yield Right<Failure, Success>(RenameMailboxSuccess(currentMailboxState: currentMailboxState));
} else { } else {
@@ -2,6 +2,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
@@ -11,13 +12,13 @@ class SubscribeMailboxInteractor {
SubscribeMailboxInteractor(this._mailboxRepository); SubscribeMailboxInteractor(this._mailboxRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, SubscribeMailboxRequest request) async* { Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, SubscribeMailboxRequest request) async* {
try { try {
yield Right<Failure, Success>(LoadingSubscribeMailbox()); yield Right<Failure, Success>(LoadingSubscribeMailbox());
final currentMailboxState = await _mailboxRepository.getMailboxState(); final currentMailboxState = await _mailboxRepository.getMailboxState();
final result = await _mailboxRepository.subscribeMailbox(accountId, request); final result = await _mailboxRepository.subscribeMailbox(session, accountId, request);
if (result) { if (result) {
yield Right<Failure, Success>(SubscribeMailboxSuccess( yield Right<Failure, Success>(SubscribeMailboxSuccess(
@@ -2,6 +2,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart';
@@ -11,12 +12,16 @@ class SubscribeMultipleMailboxInteractor {
SubscribeMultipleMailboxInteractor(this._mailboxRepository); SubscribeMultipleMailboxInteractor(this._mailboxRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, SubscribeMultipleMailboxRequest subscribeRequest) async* { Stream<Either<Failure, Success>> execute(
Session session,
AccountId accountId,
SubscribeMultipleMailboxRequest subscribeRequest
) async* {
try { try {
yield Right<Failure, Success>(LoadingSubscribeMultipleMailbox()); yield Right<Failure, Success>(LoadingSubscribeMultipleMailbox());
final currentMailboxState = await _mailboxRepository.getMailboxState(); 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 matchedSize = listResult.length == subscribeRequest.mailboxIdsSubscribe.length;
final allMatchedMailboxIdSubscribe = subscribeRequest.mailboxIdsSubscribe final allMatchedMailboxIdSubscribe = subscribeRequest.mailboxIdsSubscribe
@@ -9,6 +9,7 @@ import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.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/error/method/error_method_response.dart';
import 'package:jmap_dart_client/jmap/core/id.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/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.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 { void goToCreateNewMailboxView(BuildContext context) async {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
if (accountId != null) { final session = mailboxDashBoardController.sessionCurrent;
if (session !=null && accountId != null) {
final arguments = MailboxCreatorArguments( final arguments = MailboxCreatorArguments(
accountId, accountId,
defaultMailboxTree.value, defaultMailboxTree.value,
@@ -484,7 +486,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
arguments: arguments, arguments: arguments,
onCreatedMailbox: (newMailboxArguments) { onCreatedMailbox: (newMailboxArguments) {
final generateCreateId = Id(_uuid.v1()); final generateCreateId = Id(_uuid.v1());
_createNewMailboxAction(accountId, CreateNewMailboxRequest( _createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId, generateCreateId,
newMailboxArguments.newName, newMailboxArguments.newName,
parentId: newMailboxArguments.mailboxLocation?.id)); parentId: newMailboxArguments.mailboxLocation?.id));
@@ -496,7 +498,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) { if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) {
final generateCreateId = Id(_uuid.v1()); final generateCreateId = Id(_uuid.v1());
_createNewMailboxAction(accountId, CreateNewMailboxRequest( _createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId, generateCreateId,
newMailboxArguments.newName, newMailboxArguments.newName,
parentId: newMailboxArguments.mailboxLocation?.id)); parentId: newMailboxArguments.mailboxLocation?.id));
@@ -505,8 +507,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
} }
void _createNewMailboxAction(AccountId accountId, CreateNewMailboxRequest request) async { void _createNewMailboxAction(Session session, AccountId accountId, CreateNewMailboxRequest request) async {
consumeState(_createNewMailboxInteractor.execute(accountId, request)); consumeState(_createNewMailboxInteractor.execute(session, accountId, request));
} }
void _createNewMailboxSuccess(CreateNewMailboxSuccess success) { void _createNewMailboxSuccess(CreateNewMailboxSuccess success) {
@@ -763,9 +765,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (accountId != null) { if (session != null && accountId != null) {
consumeState(_renameMailboxInteractor.execute( consumeState(_renameMailboxInteractor.execute(
session,
accountId, accountId,
RenameMailboxRequest(presentationMailbox.id, newMailboxName)) RenameMailboxRequest(presentationMailbox.id, newMailboxName))
); );
@@ -775,17 +779,21 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _handleMovingMailbox( void _handleMovingMailbox(
AccountId accountId, Session session,
MoveAction moveAction, AccountId accountId,
PresentationMailbox mailboxSelected, MoveAction moveAction,
{PresentationMailbox? destinationMailbox}) { PresentationMailbox mailboxSelected,
consumeState(_moveMailboxInteractor.execute(accountId, {PresentationMailbox? destinationMailbox}
MoveMailboxRequest( ) {
mailboxSelected.id, consumeState(_moveMailboxInteractor.execute(
moveAction, session,
destinationMailboxId: destinationMailbox?.id, accountId,
destinationMailboxName: destinationMailbox?.name, MoveMailboxRequest(
parentId: mailboxSelected.parentId))); mailboxSelected.id,
moveAction,
destinationMailboxId: destinationMailbox?.id,
destinationMailboxName: destinationMailbox?.name,
parentId: mailboxSelected.parentId)));
} }
void _moveMailboxSuccess(MoveMailboxSuccess success) { void _moveMailboxSuccess(MoveMailboxSuccess success) {
@@ -815,9 +823,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) {
final session = mailboxDashBoardController.sessionCurrent;
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
if (accountId != null) { if (session != null && accountId != null) {
consumeState(_moveMailboxInteractor.execute(accountId, newMoveRequest)); consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest));
} }
} }
@@ -934,8 +943,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) { void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
if (accountId != null) { final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) {
_handleMovingMailbox( _handleMovingMailbox(
session,
accountId, accountId,
MoveAction.moving, MoveAction.moving,
mailboxSelected, mailboxSelected,
@@ -1004,8 +1015,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _unsubscribeMailboxAction(MailboxId mailboxId) { void _unsubscribeMailboxAction(MailboxId mailboxId) {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (accountId != null) { if (session != null && accountId != null) {
final subscribeRequest = generateSubscribeRequest( final subscribeRequest = generateSubscribeRequest(
mailboxId, mailboxId,
MailboxSubscribeState.disabled, MailboxSubscribeState.disabled,
@@ -1013,9 +1024,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
); );
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } 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<MailboxId>? listDescendantMailboxIds} {List<MailboxId>? listDescendantMailboxIds}
) { ) {
final accountId = mailboxDashBoardController.accountId.value; final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (accountId != null) { if (session != null && accountId != null) {
SubscribeRequest? subscribeRequest; SubscribeRequest? subscribeRequest;
if (listDescendantMailboxIds != null) { if (listDescendantMailboxIds != null) {
@@ -1123,9 +1135,9 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
} }
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } else if (subscribeRequest is SubscribeMailboxRequest) {
consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest));
} }
} }
} }
@@ -1190,27 +1190,30 @@ class MailboxDashBoardController extends ReloadableController {
} }
void markAsReadMailboxAction() { void markAsReadMailboxAction() {
final session = sessionCurrent;
final currentAccountId = accountId.value; final currentAccountId = accountId.value;
final mailboxId = selectedMailbox.value?.id; final mailboxId = selectedMailbox.value?.id;
final mailboxName = selectedMailbox.value?.name; final mailboxName = selectedMailbox.value?.name;
final countEmailsUnread = selectedMailbox.value?.unreadEmails?.value.value ?? 0; final countEmailsUnread = selectedMailbox.value?.unreadEmails?.value.value ?? 0;
if (currentAccountId != null && mailboxId != null && mailboxName != null) { if (session != null && currentAccountId != null && mailboxId != null && mailboxName != null) {
markAsReadMailbox(currentAccountId, mailboxId, mailboxName, countEmailsUnread.toInt()); markAsReadMailbox(session, currentAccountId, mailboxId, mailboxName, countEmailsUnread.toInt());
} }
} }
void markAsReadMailbox( void markAsReadMailbox(
AccountId accountId, Session session,
MailboxId mailboxId, AccountId accountId,
MailboxName mailboxName, MailboxId mailboxId,
int totalEmailsUnread MailboxName mailboxName,
int totalEmailsUnread
) { ) {
consumeState(_markAsMailboxReadInteractor.execute( consumeState(_markAsMailboxReadInteractor.execute(
accountId, session,
mailboxId, accountId,
mailboxName, mailboxId,
totalEmailsUnread, mailboxName,
_progressStateController)); totalEmailsUnread,
_progressStateController));
} }
void _markAsReadMailboxSuccess(Success success) { void _markAsReadMailboxSuccess(Success success) {
@@ -124,7 +124,8 @@ class MailboxVisibilityController extends BaseMailboxController {
void _subscribeMailboxAction(SubscribeMailboxRequest subscribeMailboxRequest) { void _subscribeMailboxAction(SubscribeMailboxRequest subscribeMailboxRequest) {
final accountId = _accountDashBoardController.accountId.value; final accountId = _accountDashBoardController.accountId.value;
if (accountId != null) { final session = _accountDashBoardController.sessionCurrent.value;
if (session != null && accountId != null) {
final subscribeRequest = generateSubscribeRequest( final subscribeRequest = generateSubscribeRequest(
subscribeMailboxRequest.mailboxId, subscribeMailboxRequest.mailboxId,
subscribeMailboxRequest.subscribeState, subscribeMailboxRequest.subscribeState,
@@ -132,9 +133,9 @@ class MailboxVisibilityController extends BaseMailboxController {
); );
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor!.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor!.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } else if (subscribeRequest is SubscribeMailboxRequest) {
consumeState(_subscribeMailboxInteractor!.execute(accountId, subscribeRequest)); consumeState(_subscribeMailboxInteractor!.execute(session, accountId, subscribeRequest));
} }
} }
} }
@@ -12,6 +12,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.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:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/presentation_email_extension.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) { void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
if (session != null && accountId != null) {
consumeState(_renameMailboxInteractor.execute( consumeState(_renameMailboxInteractor.execute(
session,
accountId, accountId,
RenameMailboxRequest(presentationMailbox.id, newMailboxName) RenameMailboxRequest(presentationMailbox.id, newMailboxName)
)); ));
@@ -302,8 +305,10 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) { void _invokeMovingMailboxAction(PresentationMailbox mailboxSelected, PresentationMailbox? destinationMailbox) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
if (session != null && accountId != null) {
_handleMovingMailbox( _handleMovingMailbox(
session,
accountId, accountId,
MoveAction.moving, MoveAction.moving,
mailboxSelected, mailboxSelected,
@@ -313,12 +318,14 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
} }
void _handleMovingMailbox( void _handleMovingMailbox(
Session session,
AccountId accountId, AccountId accountId,
MoveAction moveAction, MoveAction moveAction,
PresentationMailbox mailboxSelected, PresentationMailbox mailboxSelected,
{PresentationMailbox? destinationMailbox} {PresentationMailbox? destinationMailbox}
) { ) {
consumeState(_moveMailboxInteractor.execute( consumeState(_moveMailboxInteractor.execute(
session,
accountId, accountId,
MoveMailboxRequest( MoveMailboxRequest(
mailboxSelected.id, mailboxSelected.id,
@@ -357,8 +364,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) { void _undoMovingMailbox(MoveMailboxRequest newMoveRequest) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
consumeState(_moveMailboxInteractor.execute(accountId, newMoveRequest)); if (session != null && accountId != null) {
consumeState(_moveMailboxInteractor.execute(session, accountId, newMoveRequest));
} }
} }
@@ -417,13 +425,15 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
MailboxSubscribeAction subscribeAction MailboxSubscribeAction subscribeAction
) { ) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
if (session != null && accountId != null) {
final subscribeRequest = generateSubscribeRequest(mailboxId, subscribeState, subscribeAction); final subscribeRequest = generateSubscribeRequest(mailboxId, subscribeState, subscribeAction);
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } 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<MailboxId>? listDescendantMailboxIds} {List<MailboxId>? listDescendantMailboxIds}
) { ) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
if (session != null && accountId != null) {
SubscribeRequest? subscribeRequest; SubscribeRequest? subscribeRequest;
if (listDescendantMailboxIds != null) { if (listDescendantMailboxIds != null) {
@@ -543,9 +554,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
} }
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } 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<MailboxId>? listDescendantMailboxIds} {List<MailboxId>? listDescendantMailboxIds}
) { ) {
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
if (accountId != null) { final session = dashboardController.sessionCurrent;
if (session != null && accountId != null) {
SubscribeRequest? subscribeRequest; SubscribeRequest? subscribeRequest;
if (listDescendantMailboxIds != null) { if (listDescendantMailboxIds != null) {
@@ -574,9 +586,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
} }
if (subscribeRequest is SubscribeMultipleMailboxRequest) { if (subscribeRequest is SubscribeMultipleMailboxRequest) {
consumeState(_subscribeMultipleMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMultipleMailboxInteractor.execute(session, accountId, subscribeRequest));
} else if (subscribeRequest is SubscribeMailboxRequest) { } else if (subscribeRequest is SubscribeMailboxRequest) {
consumeState(_subscribeMailboxInteractor.execute(accountId, subscribeRequest)); consumeState(_subscribeMailboxInteractor.execute(session, accountId, subscribeRequest));
} }
} }
} }