TF-3334 Skip getting stored state in interactor when performing actions with email and mailbox
This commit is contained in:
@@ -1,22 +1,14 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class SaveEmailAsDraftsLoading extends LoadingState {}
|
||||
|
||||
class SaveEmailAsDraftsSuccess extends UIActionState {
|
||||
class SaveEmailAsDraftsSuccess extends UIState {
|
||||
|
||||
final EmailId emailId;
|
||||
|
||||
SaveEmailAsDraftsSuccess(
|
||||
this.emailId,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
SaveEmailAsDraftsSuccess(this.emailId);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailId, ...super.props];
|
||||
|
||||
@@ -2,27 +2,22 @@ import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.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 jmap;
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
|
||||
class SendEmailLoading extends LoadingState {}
|
||||
|
||||
class SendEmailSuccess extends UIActionState {
|
||||
class SendEmailSuccess extends UIState {
|
||||
|
||||
final EmailRequest emailRequest;
|
||||
|
||||
SendEmailSuccess({
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
required this.emailRequest,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
...super.props,
|
||||
emailRequest,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,22 +1,14 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class UpdatingEmailDrafts extends LoadingState {}
|
||||
|
||||
class UpdateEmailDraftsSuccess extends UIActionState {
|
||||
class UpdateEmailDraftsSuccess extends UIState {
|
||||
|
||||
final EmailId emailId;
|
||||
|
||||
UpdateEmailDraftsSuccess(
|
||||
this.emailId,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
UpdateEmailDraftsSuccess(this.emailId);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailId, ...super.props];
|
||||
|
||||
+2
-41
@@ -3,9 +3,6 @@ import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart' as dartz;
|
||||
import 'package:dio/dio.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';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
|
||||
@@ -15,17 +12,14 @@ import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.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/main/exceptions/remote_exception.dart';
|
||||
|
||||
class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
final ComposerRepository _composerRepository;
|
||||
|
||||
CreateNewAndSaveEmailToDraftsInteractor(
|
||||
this._emailRepository,
|
||||
this._mailboxRepository,
|
||||
this._composerRepository,
|
||||
);
|
||||
|
||||
@@ -36,11 +30,6 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
try {
|
||||
yield dartz.Right<Failure, Success>(GenerateEmailLoading());
|
||||
|
||||
final listCurrentState = await _getStoredCurrentState(
|
||||
session: createEmailRequest.session,
|
||||
accountId: createEmailRequest.accountId
|
||||
);
|
||||
|
||||
final emailCreated = await _createEmailObject(createEmailRequest);
|
||||
|
||||
if (emailCreated != null) {
|
||||
@@ -55,11 +44,7 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
);
|
||||
|
||||
yield dartz.Right<Failure, Success>(
|
||||
SaveEmailAsDraftsSuccess(
|
||||
emailDraftSaved.id!,
|
||||
currentMailboxState: listCurrentState?.value1,
|
||||
currentEmailState: listCurrentState?.value2
|
||||
)
|
||||
SaveEmailAsDraftsSuccess(emailDraftSaved.id!)
|
||||
);
|
||||
} else {
|
||||
yield dartz.Right<Failure, Success>(UpdatingEmailDrafts());
|
||||
@@ -73,11 +58,7 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
);
|
||||
|
||||
yield dartz.Right<Failure, Success>(
|
||||
UpdateEmailDraftsSuccess(
|
||||
emailDraftSaved.id!,
|
||||
currentMailboxState: listCurrentState?.value1,
|
||||
currentEmailState: listCurrentState?.value2
|
||||
)
|
||||
UpdateEmailDraftsSuccess(emailDraftSaved.id!)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@@ -112,24 +93,4 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dartz.Tuple2<State?, State?>?> _getStoredCurrentState({
|
||||
required Session session,
|
||||
required AccountId accountId
|
||||
}) async {
|
||||
try {
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
]);
|
||||
|
||||
final mailboxState = listState.first;
|
||||
final emailState = listState.last;
|
||||
|
||||
return dartz.Tuple2(mailboxState, emailState);
|
||||
} catch (e) {
|
||||
logError('CreateNewAndSaveEmailToDraftsInteractor::_getStoredCurrentState: Exception: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import 'package:dartz/dartz.dart' as dartz;
|
||||
import 'package:dio/dio.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';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
|
||||
@@ -15,18 +14,15 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/create_e
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.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/sending_queue/presentation/model/sending_email_arguments.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||
|
||||
class CreateNewAndSendEmailInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
final ComposerRepository _composerRepository;
|
||||
|
||||
CreateNewAndSendEmailInteractor(
|
||||
this._emailRepository,
|
||||
this._mailboxRepository,
|
||||
this._composerRepository,
|
||||
);
|
||||
|
||||
@@ -38,11 +34,6 @@ class CreateNewAndSendEmailInteractor {
|
||||
try {
|
||||
yield dartz.Right<Failure, Success>(GenerateEmailLoading());
|
||||
|
||||
final listCurrentState = await _getStoredCurrentState(
|
||||
session: createEmailRequest.session,
|
||||
accountId: createEmailRequest.accountId
|
||||
);
|
||||
|
||||
sendingEmailArguments = await _createEmailObject(createEmailRequest);
|
||||
|
||||
if (sendingEmailArguments != null) {
|
||||
@@ -67,8 +58,6 @@ class CreateNewAndSendEmailInteractor {
|
||||
|
||||
yield dartz.Right<Failure, Success>(
|
||||
SendEmailSuccess(
|
||||
currentMailboxState: listCurrentState?.value1,
|
||||
currentEmailState: listCurrentState?.value2,
|
||||
emailRequest: sendingEmailArguments.emailRequest
|
||||
)
|
||||
);
|
||||
@@ -108,26 +97,6 @@ class CreateNewAndSendEmailInteractor {
|
||||
}
|
||||
}
|
||||
|
||||
Future<dartz.Tuple2<State?, State?>?> _getStoredCurrentState({
|
||||
required Session session,
|
||||
required AccountId accountId
|
||||
}) async {
|
||||
try {
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
]);
|
||||
|
||||
final mailboxState = listState.first;
|
||||
final emailState = listState.last;
|
||||
|
||||
return dartz.Tuple2(mailboxState, emailState);
|
||||
} catch (e) {
|
||||
logError('CreateNewAndSendEmailInteractor::_getStoredCurrentState: Exception: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _deleteOldDraftsEmail({
|
||||
required Session session,
|
||||
required AccountId accountId,
|
||||
|
||||
@@ -7,16 +7,12 @@ import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'
|
||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.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/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
|
||||
class SendEmailInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
SendEmailInteractor(
|
||||
this._emailRepository,
|
||||
this._mailboxRepository);
|
||||
SendEmailInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -30,14 +26,6 @@ class SendEmailInteractor {
|
||||
try {
|
||||
yield Right<Failure, Success>(SendEmailLoading());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
await _emailRepository.sendEmail(
|
||||
session,
|
||||
accountId,
|
||||
@@ -50,11 +38,7 @@ class SendEmailInteractor {
|
||||
}
|
||||
|
||||
yield Right<Failure, Success>(
|
||||
SendEmailSuccess(
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState,
|
||||
emailRequest: emailRequest
|
||||
)
|
||||
SendEmailSuccess(emailRequest: emailRequest)
|
||||
);
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(SendEmailFailure(
|
||||
|
||||
@@ -206,12 +206,10 @@ class ComposerBindings extends BaseBindings {
|
||||
Get.lazyPut(() => GetAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
|
||||
Get.lazyPut(() => CreateNewAndSendEmailInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>(),
|
||||
Get.find<ComposerRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => CreateNewAndSaveEmailToDraftsInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>(),
|
||||
Get.find<ComposerRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => RestoreEmailInlineImagesInteractor(
|
||||
|
||||
@@ -21,6 +21,10 @@ class MoveToMailboxRequest with EquatableMixin {
|
||||
this.destinationPath,
|
||||
});
|
||||
|
||||
int get totalEmails => currentMailboxes
|
||||
.values
|
||||
.fold(0, (sum, element) => sum + element.length);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
currentMailboxes,
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class StartDeleteEmailPermanently extends UIState {}
|
||||
|
||||
class DeleteEmailPermanentlySuccess extends UIActionState {
|
||||
|
||||
DeleteEmailPermanentlySuccess({
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
}
|
||||
class DeleteEmailPermanentlySuccess extends UIState {}
|
||||
|
||||
class DeleteEmailPermanentlyFailure extends FeatureFailure {
|
||||
|
||||
|
||||
@@ -1,41 +1,27 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class LoadingDeleteMultipleEmailsPermanentlyAll extends UIState {}
|
||||
|
||||
class DeleteMultipleEmailsPermanentlyAllSuccess extends UIActionState {
|
||||
class DeleteMultipleEmailsPermanentlyAllSuccess extends UIState {
|
||||
|
||||
List<EmailId> emailIds;
|
||||
|
||||
DeleteMultipleEmailsPermanentlyAllSuccess(
|
||||
this.emailIds,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
DeleteMultipleEmailsPermanentlyAllSuccess(this.emailIds);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailIds, ...super.props];
|
||||
List<Object?> get props => [emailIds];
|
||||
}
|
||||
|
||||
class DeleteMultipleEmailsPermanentlyHasSomeEmailFailure extends UIActionState {
|
||||
class DeleteMultipleEmailsPermanentlyHasSomeEmailFailure extends UIState {
|
||||
|
||||
List<EmailId> emailIds;
|
||||
|
||||
DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(
|
||||
this.emailIds,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(this.emailIds);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailIds, ...super.props];
|
||||
List<Object?> get props => [emailIds];
|
||||
}
|
||||
|
||||
class DeleteMultipleEmailsPermanentlyAllFailure extends FeatureFailure {}
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||
|
||||
class MarkAsEmailReadSuccess extends UIActionState {
|
||||
class MarkAsEmailReadSuccess extends UIState {
|
||||
final EmailId emailId;
|
||||
final ReadActions readActions;
|
||||
final MarkReadAction markReadAction;
|
||||
@@ -15,14 +13,10 @@ class MarkAsEmailReadSuccess extends UIActionState {
|
||||
this.emailId,
|
||||
this.readActions,
|
||||
this.markReadAction,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailId, readActions, markReadAction, ...super.props];
|
||||
List<Object?> get props => [emailId, readActions, markReadAction];
|
||||
}
|
||||
|
||||
class MarkAsEmailReadFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class MarkAsStarEmailSuccess extends UIActionState {
|
||||
class MarkAsStarEmailSuccess extends UIState {
|
||||
final MarkStarAction markStarAction;
|
||||
|
||||
MarkAsStarEmailSuccess(
|
||||
this.markStarAction,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
MarkAsStarEmailSuccess(this.markStarAction);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [markStarAction, ...super.props];
|
||||
List<Object?> get props => [markStarAction];
|
||||
}
|
||||
|
||||
class MarkAsStarEmailFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.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';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
|
||||
class LoadingMoveToMailbox extends UIState {}
|
||||
|
||||
class MoveToMailboxSuccess extends UIActionState {
|
||||
class MoveToMailboxSuccess extends UIState {
|
||||
final EmailId emailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
@@ -25,10 +23,8 @@ class MoveToMailboxSuccess extends UIActionState {
|
||||
this.emailActionType,
|
||||
{
|
||||
this.destinationPath,
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -38,7 +34,6 @@ class MoveToMailboxSuccess extends UIActionState {
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
...super.props
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:email_recovery/email_recovery/email_recovery_action.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class RestoreDeletedMessageLoading extends LoadingState {}
|
||||
|
||||
class RestoreDeletedMessageSuccess extends UIActionState {
|
||||
class RestoreDeletedMessageSuccess extends UIState {
|
||||
final EmailRecoveryAction emailRecoveryAction;
|
||||
|
||||
RestoreDeletedMessageSuccess(
|
||||
this.emailRecoveryAction,
|
||||
{
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(null, currentMailboxState);
|
||||
RestoreDeletedMessageSuccess(this.emailRecoveryAction);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailRecoveryAction, ...super.props];
|
||||
List<Object?> get props => [emailRecoveryAction];
|
||||
}
|
||||
|
||||
class RestoreDeletedMessageFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,27 +1,17 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
|
||||
class StoreEventAttendanceStatusLoading extends LoadingState {}
|
||||
|
||||
class StoreEventAttendanceStatusSuccess extends UIActionState {
|
||||
class StoreEventAttendanceStatusSuccess extends UIState {
|
||||
|
||||
final EventActionType eventActionType;
|
||||
|
||||
StoreEventAttendanceStatusSuccess(
|
||||
this.eventActionType,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
StoreEventAttendanceStatusSuccess(this.eventActionType);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
eventActionType,
|
||||
...super.props];
|
||||
List<Object?> get props => [eventActionType];
|
||||
}
|
||||
|
||||
class StoreEventAttendanceStatusFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class UnsubscribeEmailLoading extends LoadingState {}
|
||||
|
||||
class UnsubscribeEmailSuccess extends UIActionState {
|
||||
UnsubscribeEmailSuccess(
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
}
|
||||
class UnsubscribeEmailSuccess extends UIState {}
|
||||
|
||||
class UnsubscribeEmailFailure extends FeatureFailure {
|
||||
|
||||
|
||||
@@ -1,35 +1,23 @@
|
||||
import 'package:core/core.dart';
|
||||
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:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_email_permanently_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
|
||||
class DeleteEmailPermanentlyInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
DeleteEmailPermanentlyInteractor(this._emailRepository, this._mailboxRepository);
|
||||
DeleteEmailPermanentlyInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, EmailId emailId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(StartDeleteEmailPermanently());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.deleteEmailPermanently(session, accountId, emailId);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(DeleteEmailPermanentlySuccess(
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(DeleteEmailPermanentlySuccess());
|
||||
} else {
|
||||
yield Left<Failure, Success>(DeleteEmailPermanentlyFailure(null));
|
||||
}
|
||||
|
||||
+5
-21
@@ -1,41 +1,25 @@
|
||||
import 'package:core/core.dart';
|
||||
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:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
|
||||
class DeleteMultipleEmailsPermanentlyInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
DeleteMultipleEmailsPermanentlyInteractor(this._emailRepository, this._mailboxRepository);
|
||||
DeleteMultipleEmailsPermanentlyInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, List<EmailId> emailIds) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(LoadingDeleteMultipleEmailsPermanentlyAll());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final listResult = await _emailRepository.deleteMultipleEmailsPermanently(session, accountId, emailIds);
|
||||
if (listResult.length == emailIds.length) {
|
||||
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyAllSuccess(
|
||||
listResult,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyAllSuccess(listResult));
|
||||
} else if (listResult.isNotEmpty) {
|
||||
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(
|
||||
listResult,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(DeleteMultipleEmailsPermanentlyHasSomeEmailFailure(listResult));
|
||||
} else {
|
||||
yield Left<Failure, Success>(DeleteMultipleEmailsPermanentlyAllFailure());
|
||||
}
|
||||
|
||||
@@ -8,13 +8,11 @@ import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
|
||||
class MarkAsEmailReadInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
MarkAsEmailReadInteractor(this._emailRepository, this._mailboxRepository);
|
||||
MarkAsEmailReadInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -24,14 +22,6 @@ class MarkAsEmailReadInteractor {
|
||||
MarkReadAction markReadAction,
|
||||
) async* {
|
||||
try {
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState( session,accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.markAsRead(
|
||||
session,
|
||||
accountId,
|
||||
@@ -43,8 +33,6 @@ class MarkAsEmailReadInteractor {
|
||||
result.first,
|
||||
readAction,
|
||||
markReadAction,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState,
|
||||
));
|
||||
} catch (e) {
|
||||
yield Left(MarkAsEmailReadFailure(readAction, exception: e));
|
||||
|
||||
@@ -20,17 +20,13 @@ class MarkAsStarEmailInteractor {
|
||||
MarkStarAction markStarAction,
|
||||
) async* {
|
||||
try {
|
||||
final currentEmailState = await emailRepository.getEmailState(session, accountId);
|
||||
await emailRepository.markAsStar(
|
||||
session,
|
||||
accountId,
|
||||
[emailId],
|
||||
markStarAction,
|
||||
);
|
||||
yield Right(MarkAsStarEmailSuccess(
|
||||
markStarAction,
|
||||
currentEmailState: currentEmailState,
|
||||
));
|
||||
yield Right(MarkAsStarEmailSuccess(markStarAction));
|
||||
} catch (e) {
|
||||
yield Left(MarkAsStarEmailFailure(markStarAction, exception: e));
|
||||
}
|
||||
|
||||
@@ -1,30 +1,20 @@
|
||||
import 'package:core/core.dart';
|
||||
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/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
|
||||
class MoveToMailboxInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
MoveToMailboxInteractor(this._emailRepository, this._mailboxRepository);
|
||||
MoveToMailboxInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) async* {
|
||||
try {
|
||||
yield Right(LoadingMoveToMailbox());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.moveToMailbox(session, accountId, moveRequest);
|
||||
if (result.isNotEmpty) {
|
||||
yield Right(MoveToMailboxSuccess(
|
||||
@@ -34,8 +24,7 @@ class MoveToMailboxInteractor {
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath,
|
||||
currentMailboxState: currentMailboxState,
|
||||
currentEmailState: currentEmailState));
|
||||
));
|
||||
} else {
|
||||
yield Left(MoveToMailboxFailure(moveRequest.emailActionType));
|
||||
}
|
||||
|
||||
@@ -8,13 +8,11 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/restore_deleted_message_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
|
||||
|
||||
class RestoredDeletedMessageInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
RestoredDeletedMessageInteractor(this._emailRepository, this._mailboxRepository);
|
||||
RestoredDeletedMessageInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -23,9 +21,8 @@ class RestoredDeletedMessageInteractor {
|
||||
) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(RestoreDeletedMessageLoading());
|
||||
final currentMailboxState = await _mailboxRepository.getMailboxState(session, accountId);
|
||||
final emailRecovery = await _emailRepository.restoreDeletedMessage(newRecoveryRequest);
|
||||
yield Right<Failure, Success>(RestoreDeletedMessageSuccess(emailRecovery, currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(RestoreDeletedMessageSuccess(emailRecovery));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(RestoreDeletedMessageFailure(e));
|
||||
}
|
||||
|
||||
@@ -22,17 +22,13 @@ class StoreEventAttendanceStatusInteractor {
|
||||
try {
|
||||
yield Right(StoreEventAttendanceStatusLoading());
|
||||
|
||||
final currentEmailState = await _emailRepository.getEmailState(session, accountId);
|
||||
|
||||
await _emailRepository.storeEventAttendanceStatus(
|
||||
session,
|
||||
accountId,
|
||||
emailId,
|
||||
eventActionType);
|
||||
|
||||
yield Right(StoreEventAttendanceStatusSuccess(
|
||||
eventActionType,
|
||||
currentEmailState: currentEmailState));
|
||||
yield Right(StoreEventAttendanceStatusSuccess(eventActionType));
|
||||
} catch (e) {
|
||||
yield Left(StoreEventAttendanceStatusFailure(exception: e));
|
||||
}
|
||||
|
||||
@@ -15,9 +15,8 @@ class UnsubscribeEmailInteractor {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, EmailId emailId) async* {
|
||||
try {
|
||||
yield Right(UnsubscribeEmailLoading());
|
||||
final currentEmailState = await emailRepository.getEmailState(session, accountId);
|
||||
await emailRepository.unsubscribeMail(session, accountId, emailId);
|
||||
yield Right(UnsubscribeEmailSuccess(currentEmailState: currentEmailState));
|
||||
yield Right(UnsubscribeEmailSuccess());
|
||||
} catch (e) {
|
||||
yield Left(UnsubscribeEmailFailure(exception: e));
|
||||
}
|
||||
|
||||
@@ -123,9 +123,7 @@ class EmailBindings extends BaseBindings {
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(() => GetEmailContentInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MarkAsEmailReadInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => MarkAsEmailReadInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => DownloadAttachmentsInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<CredentialRepository>(),
|
||||
@@ -139,9 +137,7 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<AccountRepository>(),
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => MoveToMailboxInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => MoveToMailboxInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MarkAsStarEmailInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => DownloadAttachmentForWebInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
|
||||
@@ -39,7 +39,7 @@ class MarkAsMailboxReadAllSuccess extends UIActionState {
|
||||
];
|
||||
}
|
||||
|
||||
class MarkAsMailboxReadHasSomeEmailFailure extends UIActionState {
|
||||
class MarkAsMailboxReadHasSomeEmailFailure extends UIState {
|
||||
|
||||
final String mailboxDisplayName;
|
||||
final int countEmailsRead;
|
||||
@@ -47,17 +47,12 @@ class MarkAsMailboxReadHasSomeEmailFailure extends UIActionState {
|
||||
MarkAsMailboxReadHasSomeEmailFailure(
|
||||
this.mailboxDisplayName,
|
||||
this.countEmailsRead,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentMailboxState, currentEmailState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
mailboxDisplayName,
|
||||
countEmailsRead,
|
||||
...super.props
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class LoadingMoveMailbox extends UIState {}
|
||||
|
||||
class MoveMailboxSuccess extends UIActionState {
|
||||
class MoveMailboxSuccess extends UIState {
|
||||
|
||||
final MailboxId mailboxIdSelected;
|
||||
final MoveAction moveAction;
|
||||
@@ -22,10 +20,8 @@ class MoveMailboxSuccess extends UIActionState {
|
||||
this.parentId,
|
||||
this.destinationMailboxId,
|
||||
this.destinationMailboxDisplayName,
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -34,7 +30,6 @@ class MoveMailboxSuccess extends UIActionState {
|
||||
parentId,
|
||||
destinationMailboxId,
|
||||
destinationMailboxDisplayName,
|
||||
...super.props
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class LoadingRenameMailbox extends UIState {}
|
||||
|
||||
class RenameMailboxSuccess extends UIActionState {
|
||||
|
||||
RenameMailboxSuccess({
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
}
|
||||
class RenameMailboxSuccess extends UIState {}
|
||||
|
||||
class RenameMailboxFailure extends FeatureFailure {
|
||||
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
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: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';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
||||
|
||||
class MarkAsMailboxReadInteractor {
|
||||
final MailboxRepository _mailboxRepository;
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
MarkAsMailboxReadInteractor(this._mailboxRepository, this._emailRepository);
|
||||
MarkAsMailboxReadInteractor(this._mailboxRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -27,14 +26,6 @@ class MarkAsMailboxReadInteractor {
|
||||
yield Right<Failure, Success>(MarkAsMailboxReadLoading());
|
||||
onProgressController.add(Right(MarkAsMailboxReadLoading()));
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final listEmails = await _mailboxRepository.markAsMailboxRead(
|
||||
session,
|
||||
accountId,
|
||||
@@ -43,16 +34,12 @@ class MarkAsMailboxReadInteractor {
|
||||
onProgressController);
|
||||
|
||||
if (totalEmailUnread == listEmails.length) {
|
||||
yield Right(MarkAsMailboxReadAllSuccess(
|
||||
mailboxDisplayName,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
yield Right(MarkAsMailboxReadAllSuccess(mailboxDisplayName));
|
||||
} else if (listEmails.isNotEmpty) {
|
||||
yield Right(MarkAsMailboxReadHasSomeEmailFailure(
|
||||
mailboxDisplayName,
|
||||
listEmails.length,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
} else {
|
||||
yield Left(MarkAsMailboxReadAllFailure(mailboxDisplayName: mailboxDisplayName));
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:core/core.dart';
|
||||
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';
|
||||
@@ -14,8 +15,6 @@ class MoveMailboxInteractor {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MoveMailboxRequest request) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(LoadingMoveMailbox());
|
||||
|
||||
final currentMailboxState = await _mailboxRepository.getMailboxState(session, accountId);
|
||||
final result = await _mailboxRepository.moveMailbox(session, accountId, request);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(MoveMailboxSuccess(
|
||||
@@ -24,7 +23,7 @@ class MoveMailboxInteractor {
|
||||
parentId: request.parentId,
|
||||
destinationMailboxId: request.destinationMailboxId,
|
||||
destinationMailboxDisplayName: request.destinationMailboxDisplayName,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
} else {
|
||||
yield Left<Failure, Success>(MoveMailboxFailure(null));
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:core/core.dart';
|
||||
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';
|
||||
@@ -15,17 +16,13 @@ class RenameMailboxInteractor {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, RenameMailboxRequest request) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(LoadingRenameMailbox());
|
||||
|
||||
final currentMailboxState = await _mailboxRepository.getMailboxState(session, accountId);
|
||||
log('RenameMailboxInteractor::execute:currentMailboxState: $currentMailboxState');
|
||||
final result = await _mailboxRepository.renameMailbox(session, accountId, request);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(RenameMailboxSuccess(currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(RenameMailboxSuccess());
|
||||
} else {
|
||||
yield Left<Failure, Success>(RenameMailboxFailure(null));
|
||||
}
|
||||
} catch (e) {
|
||||
logError('RenameMailboxInteractor::execute(): error: $e');
|
||||
final exception = SetMailboxNameException.detectMailboxNameException(e, request.mailboxId);
|
||||
yield Left<Failure, Success>(RenameMailboxFailure(exception));
|
||||
}
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class RemoveEmailDraftsSuccess extends UIActionState {
|
||||
|
||||
RemoveEmailDraftsSuccess({
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
}
|
||||
class RemoveEmailDraftsSuccess extends UIState {}
|
||||
|
||||
class RemoveEmailDraftsFailure extends FeatureFailure {
|
||||
|
||||
|
||||
@@ -1,33 +1,22 @@
|
||||
import 'package:core/core.dart';
|
||||
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:jmap_dart_client/jmap/mail/email/email.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_dashboard/domain/state/remove_email_drafts_state.dart';
|
||||
|
||||
class RemoveEmailDraftsInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
RemoveEmailDraftsInteractor(this._emailRepository, this._mailboxRepository);
|
||||
RemoveEmailDraftsInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, EmailId emailId) async* {
|
||||
try {
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.removeEmailDrafts(session, accountId, emailId);
|
||||
if (result) {
|
||||
yield Right<Failure, Success>(RemoveEmailDraftsSuccess(
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
yield Right<Failure, Success>(RemoveEmailDraftsSuccess());
|
||||
} else {
|
||||
yield Left<Failure, Success>(RemoveEmailDraftsFailure(result));
|
||||
}
|
||||
|
||||
+10
-39
@@ -275,53 +275,30 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(() => RemoveEmailDraftsInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => MoveToMailboxInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => DeleteEmailPermanentlyInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => RemoveEmailDraftsInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MoveToMailboxInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => DeleteEmailPermanentlyInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => SaveRecentSearchInteractor(Get.find<SearchRepository>()));
|
||||
Get.lazyPut(() => GetAllRecentSearchLatestInteractor(Get.find<SearchRepository>()));
|
||||
Get.lazyPut(() => SearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => SearchMoreEmailInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => RefreshChangesSearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => QuickSearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => MarkAsMailboxReadInteractor(
|
||||
Get.find<MailboxRepository>(),
|
||||
Get.find<EmailRepository>())
|
||||
);
|
||||
Get.lazyPut(() => MarkAsMailboxReadInteractor(Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => GetComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
|
||||
Get.lazyPut(() => RemoveComposerCacheOnWebInteractor(Get.find<ComposerCacheRepository>()));
|
||||
Get.lazyPut(() => MarkAsEmailReadInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()
|
||||
));
|
||||
Get.lazyPut(() => MarkAsEmailReadInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MarkAsStarEmailInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MarkAsMultipleEmailReadInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()
|
||||
));
|
||||
Get.lazyPut(() => MarkAsStarMultipleEmailInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => MoveMultipleEmailToMailboxInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()
|
||||
));
|
||||
Get.lazyPut(() => DeleteMultipleEmailsPermanentlyInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => EmptyTrashFolderInteractor(
|
||||
Get.find<ThreadRepository>(),
|
||||
Get.find<MailboxRepository>(),
|
||||
Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => EmptySpamFolderInteractor(
|
||||
Get.find<ThreadRepository>(),
|
||||
Get.find<MailboxRepository>(),
|
||||
Get.find<EmailRepository>()
|
||||
));
|
||||
Get.lazyPut(() => DeleteMultipleEmailsPermanentlyInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => EmptyTrashFolderInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => EmptySpamFolderInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => GetAppDashboardConfigurationInteractor(
|
||||
Get.find<AppConfigLoader>()));
|
||||
Get.lazyPut(() => GetEmailByIdInteractor(
|
||||
@@ -336,17 +313,11 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut(() => GetSpamReportStateInteractor(
|
||||
Get.find<SpamReportRepository>()));
|
||||
Get.lazyPut(() => GetSpamMailboxCachedInteractor(Get.find<SpamReportRepository>()));
|
||||
Get.lazyPut(() => SendEmailInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => SendEmailInteractor(Get.find<EmailRepository>()));
|
||||
SendingQueueInteractorBindings().dependencies();
|
||||
Get.lazyPut(() => StoreSessionInteractor(Get.find<SessionRepository>()));
|
||||
Get.lazyPut(() => UnsubscribeEmailInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => RestoredDeletedMessageInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()
|
||||
));
|
||||
Get.lazyPut(() => RestoredDeletedMessageInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => GetRestoredDeletedMessageInterator(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()
|
||||
|
||||
-1
@@ -404,7 +404,6 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
||||
} else if (success is UnsubscribeEmailSuccess) {
|
||||
_handleUnsubscribeMailSuccess();
|
||||
} else if (success is RestoreDeletedMessageSuccess) {
|
||||
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.currentMailboxState));
|
||||
_handleRestoreDeletedMessageSuccess(success.emailRecoveryAction.id!);
|
||||
} else if (success is GetRestoredDeletedMessageSuccess) {
|
||||
_handleGetRestoredDeletedMessageSuccess(success);
|
||||
|
||||
@@ -96,9 +96,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(() => SendEmailInteractor(
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<MailboxRepository>()));
|
||||
Get.lazyPut(() => SendEmailInteractor(Get.find<EmailRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -294,11 +294,6 @@ class SearchEmailController extends BaseController
|
||||
? UnsignedInt(listResultSearch.length)
|
||||
: ThreadConstants.defaultLimit;
|
||||
|
||||
if (limit.value > ThreadConstants.maximumEmailQueryLimit &&
|
||||
resultSearchScrollController.hasClients) {
|
||||
resultSearchScrollController.jumpTo(0);
|
||||
}
|
||||
|
||||
_updateSimpleSearchFilter(
|
||||
beforeOption: const None(),
|
||||
positionOption: option(searchEmailFilter.value.sortOrderType.isScrollByPosition(), 0),
|
||||
|
||||
@@ -5,7 +5,6 @@ import 'package:model/email/email_property.dart';
|
||||
|
||||
class ThreadConstants {
|
||||
static const maxCountEmails = 20;
|
||||
static const maximumEmailQueryLimit = 256;
|
||||
static final defaultLimit = UnsignedInt(maxCountEmails);
|
||||
static final propertiesDefault = Properties({
|
||||
EmailProperty.id,
|
||||
|
||||
@@ -1,23 +1,17 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class EmptySpamFolderLoading extends LoadingState {}
|
||||
|
||||
class EmptySpamFolderSuccess extends UIActionState {
|
||||
class EmptySpamFolderSuccess extends UIState {
|
||||
|
||||
final List<EmailId> emailIds;
|
||||
|
||||
EmptySpamFolderSuccess(
|
||||
this.emailIds, {
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
EmptySpamFolderSuccess(this.emailIds);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailIds, ...super.props];
|
||||
List<Object?> get props => [emailIds];
|
||||
}
|
||||
|
||||
class EmptySpamFolderFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,23 +1,17 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class EmptyTrashFolderLoading extends LoadingState {}
|
||||
|
||||
class EmptyTrashFolderSuccess extends UIActionState {
|
||||
class EmptyTrashFolderSuccess extends UIState {
|
||||
|
||||
final List<EmailId> emailIds;
|
||||
|
||||
EmptyTrashFolderSuccess(
|
||||
this.emailIds, {
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}) : super(currentEmailState, currentMailboxState);
|
||||
EmptyTrashFolderSuccess(this.emailIds);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [emailIds, ...super.props];
|
||||
List<Object?> get props => [emailIds];
|
||||
}
|
||||
|
||||
class EmptyTrashFolderFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,26 +1,20 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class LoadingMarkAsMultipleEmailReadAll extends UIState {}
|
||||
|
||||
class MarkAsMultipleEmailReadAllSuccess extends UIActionState {
|
||||
class MarkAsMultipleEmailReadAllSuccess extends UIState {
|
||||
final int countMarkAsReadSuccess;
|
||||
final ReadActions readActions;
|
||||
|
||||
MarkAsMultipleEmailReadAllSuccess(
|
||||
this.countMarkAsReadSuccess,
|
||||
this.readActions,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [countMarkAsReadSuccess, readActions, ...super.props];
|
||||
List<Object?> get props => [countMarkAsReadSuccess, readActions];
|
||||
}
|
||||
|
||||
class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
|
||||
@@ -32,21 +26,17 @@ class MarkAsMultipleEmailReadAllFailure extends FeatureFailure {
|
||||
List<Object> get props => [readActions];
|
||||
}
|
||||
|
||||
class MarkAsMultipleEmailReadHasSomeEmailFailure extends UIActionState {
|
||||
class MarkAsMultipleEmailReadHasSomeEmailFailure extends UIState {
|
||||
final int countMarkAsReadSuccess;
|
||||
final ReadActions readActions;
|
||||
|
||||
MarkAsMultipleEmailReadHasSomeEmailFailure(
|
||||
this.countMarkAsReadSuccess,
|
||||
this.readActions,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [countMarkAsReadSuccess, readActions, ...super.props];
|
||||
List<Object?> get props => [countMarkAsReadSuccess, readActions];
|
||||
}
|
||||
|
||||
class MarkAsMultipleEmailReadFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,26 +1,20 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
|
||||
class LoadingMarkAsStarMultipleEmailAll extends UIState {}
|
||||
|
||||
class MarkAsStarMultipleEmailAllSuccess extends UIActionState {
|
||||
class MarkAsStarMultipleEmailAllSuccess extends UIState {
|
||||
final int countMarkStarSuccess;
|
||||
final MarkStarAction markStarAction;
|
||||
|
||||
MarkAsStarMultipleEmailAllSuccess(
|
||||
this.countMarkStarSuccess,
|
||||
this.markStarAction,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [countMarkStarSuccess, markStarAction, ...super.props];
|
||||
List<Object?> get props => [countMarkStarSuccess, markStarAction];
|
||||
}
|
||||
|
||||
class MarkAsStarMultipleEmailAllFailure extends FeatureFailure {
|
||||
@@ -32,21 +26,17 @@ class MarkAsStarMultipleEmailAllFailure extends FeatureFailure {
|
||||
List<Object> get props => [markStarAction];
|
||||
}
|
||||
|
||||
class MarkAsStarMultipleEmailHasSomeEmailFailure extends UIActionState {
|
||||
class MarkAsStarMultipleEmailHasSomeEmailFailure extends UIState {
|
||||
final int countMarkStarSuccess;
|
||||
final MarkStarAction markStarAction;
|
||||
|
||||
MarkAsStarMultipleEmailHasSomeEmailFailure(
|
||||
this.countMarkStarSuccess,
|
||||
this.markStarAction,
|
||||
{
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [countMarkStarSuccess, markStarAction, ...super.props];
|
||||
List<Object?> get props => [countMarkStarSuccess, markStarAction];
|
||||
}
|
||||
|
||||
class MarkAsStarMultipleEmailFailure extends FeatureFailure {
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.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';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
|
||||
class LoadingMoveMultipleEmailToMailboxAll extends UIState {}
|
||||
|
||||
class MoveMultipleEmailToMailboxAllSuccess extends UIActionState {
|
||||
class MoveMultipleEmailToMailboxAllSuccess extends UIState {
|
||||
final List<EmailId> movedListEmailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
@@ -25,10 +23,8 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIActionState {
|
||||
this.emailActionType,
|
||||
{
|
||||
this.destinationPath,
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -38,7 +34,6 @@ class MoveMultipleEmailToMailboxAllSuccess extends UIActionState {
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
...super.props
|
||||
];
|
||||
}
|
||||
|
||||
@@ -52,7 +47,7 @@ class MoveMultipleEmailToMailboxAllFailure extends FeatureFailure {
|
||||
List<Object> get props => [moveAction, emailActionType];
|
||||
}
|
||||
|
||||
class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIActionState {
|
||||
class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIState {
|
||||
final List<EmailId> movedListEmailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
@@ -68,10 +63,8 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIActionState {
|
||||
this.emailActionType,
|
||||
{
|
||||
this.destinationPath,
|
||||
jmap.State? currentEmailState,
|
||||
jmap.State? currentMailboxState,
|
||||
}
|
||||
) : super(currentEmailState, currentMailboxState);
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -81,7 +74,6 @@ class MoveMultipleEmailToMailboxHasSomeEmailFailure extends UIActionState {
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
...super.props
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -4,40 +4,19 @@ 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';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
|
||||
|
||||
class EmptySpamFolderInteractor {
|
||||
final ThreadRepository threadRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
EmptySpamFolderInteractor(
|
||||
this.threadRepository,
|
||||
this._mailboxRepository,
|
||||
this._emailRepository
|
||||
);
|
||||
EmptySpamFolderInteractor(this.threadRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MailboxId spamMailboxId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(EmptySpamFolderLoading());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final emailIdDeleted = await threadRepository.emptySpamFolder(session, accountId, spamMailboxId);
|
||||
yield Right<Failure, Success>(EmptySpamFolderSuccess(
|
||||
emailIdDeleted,
|
||||
currentMailboxState: currentMailboxState,
|
||||
currentEmailState: currentEmailState,
|
||||
));
|
||||
yield Right<Failure, Success>(EmptySpamFolderSuccess(emailIdDeleted));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(EmptySpamFolderFailure(e));
|
||||
}
|
||||
|
||||
@@ -1,42 +1,22 @@
|
||||
import 'package:core/core.dart';
|
||||
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: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';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
||||
|
||||
class EmptyTrashFolderInteractor {
|
||||
final ThreadRepository threadRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
EmptyTrashFolderInteractor(
|
||||
this.threadRepository,
|
||||
this._mailboxRepository,
|
||||
this._emailRepository
|
||||
);
|
||||
EmptyTrashFolderInteractor(this.threadRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, MailboxId trashMailboxId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(EmptyTrashFolderLoading());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final emailIdDeleted = await threadRepository.emptyTrashFolder(session, accountId, trashMailboxId);
|
||||
yield Right<Failure, Success>(EmptyTrashFolderSuccess(
|
||||
emailIdDeleted,
|
||||
currentMailboxState: currentMailboxState,
|
||||
currentEmailState: currentEmailState,
|
||||
));
|
||||
yield Right<Failure, Success>(EmptyTrashFolderSuccess(emailIdDeleted,));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(EmptyTrashFolderFailure(e));
|
||||
}
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import 'package:core/core.dart';
|
||||
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:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/model.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/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
||||
|
||||
class MarkAsMultipleEmailReadInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
MarkAsMultipleEmailReadInteractor(this._emailRepository, this._mailboxRepository);
|
||||
MarkAsMultipleEmailReadInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -23,14 +22,6 @@ class MarkAsMultipleEmailReadInteractor {
|
||||
try {
|
||||
yield Right(LoadingMarkAsMultipleEmailReadAll());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.markAsRead(
|
||||
session,
|
||||
accountId,
|
||||
@@ -42,16 +33,14 @@ class MarkAsMultipleEmailReadInteractor {
|
||||
yield Right(MarkAsMultipleEmailReadAllSuccess(
|
||||
result.length,
|
||||
readAction,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
} else if (result.isEmpty) {
|
||||
yield Left(MarkAsMultipleEmailReadAllFailure(readAction));
|
||||
} else {
|
||||
yield Right(MarkAsMultipleEmailReadHasSomeEmailFailure(
|
||||
result.length,
|
||||
readAction,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(MarkAsMultipleEmailReadFailure(readAction, e));
|
||||
|
||||
@@ -22,22 +22,20 @@ class MarkAsStarMultipleEmailInteractor {
|
||||
try {
|
||||
yield Right(LoadingMarkAsStarMultipleEmailAll());
|
||||
|
||||
final currentEmailState = await _emailRepository.getEmailState(session, accountId);
|
||||
|
||||
final result = await _emailRepository.markAsStar(session, accountId, emailIds, markStarAction);
|
||||
|
||||
if (emailIds.length == result.length) {
|
||||
yield Right(MarkAsStarMultipleEmailAllSuccess(
|
||||
emailIds.length,
|
||||
markStarAction,
|
||||
currentEmailState: currentEmailState));
|
||||
));
|
||||
} else if (result.isEmpty) {
|
||||
yield Left(MarkAsStarMultipleEmailAllFailure(markStarAction));
|
||||
} else {
|
||||
yield Right(MarkAsStarMultipleEmailHasSomeEmailFailure(
|
||||
result.length,
|
||||
markStarAction,
|
||||
currentEmailState: currentEmailState));
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(MarkAsStarMultipleEmailFailure(markStarAction, e));
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
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/email/domain/model/move_to_mailbox_request.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/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||
|
||||
class MoveMultipleEmailToMailboxInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
final MailboxRepository _mailboxRepository;
|
||||
|
||||
MoveMultipleEmailToMailboxInteractor(this._emailRepository, this._mailboxRepository);
|
||||
MoveMultipleEmailToMailboxInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
@@ -22,20 +21,8 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
) async* {
|
||||
try {
|
||||
yield Right(LoadingMoveMultipleEmailToMailboxAll());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(session, accountId),
|
||||
_emailRepository.getEmailState(session, accountId),
|
||||
], eagerError: true);
|
||||
|
||||
final currentMailboxState = listState.first;
|
||||
final currentEmailState = listState.last;
|
||||
|
||||
final result = await _emailRepository.moveToMailbox(session, accountId, moveRequest);
|
||||
int totalEmail = 0;
|
||||
for (var element in moveRequest.currentMailboxes.values) {
|
||||
totalEmail = totalEmail + element.length;
|
||||
}if (totalEmail == result.length) {
|
||||
if (moveRequest.totalEmails == result.length) {
|
||||
yield Right(MoveMultipleEmailToMailboxAllSuccess(
|
||||
result,
|
||||
moveRequest.currentMailboxes.keys.first,
|
||||
@@ -43,8 +30,7 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
} else if (result.isEmpty) {
|
||||
yield Left(MoveMultipleEmailToMailboxAllFailure(moveRequest.moveAction, moveRequest.emailActionType));
|
||||
} else {
|
||||
@@ -55,8 +41,7 @@ class MoveMultipleEmailToMailboxInteractor {
|
||||
moveRequest.moveAction,
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath,
|
||||
currentEmailState: currentEmailState,
|
||||
currentMailboxState: currentMailboxState));
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(MoveMultipleEmailToMailboxFailure(moveRequest.emailActionType, moveRequest.moveAction, e));
|
||||
|
||||
@@ -559,10 +559,6 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
|
||||
Future<void> _refreshChangeSearchEmail() async {
|
||||
log('ThreadController::_refreshChangeSearchEmail:');
|
||||
if (limitEmailFetched.value > ThreadConstants.maximumEmailQueryLimit &&
|
||||
listEmailController.hasClients) {
|
||||
listEmailController.jumpTo(0);
|
||||
}
|
||||
canSearchMore = false;
|
||||
searchController.updateFilterEmail(
|
||||
positionOption: option(
|
||||
|
||||
-5
@@ -8,7 +8,6 @@ import 'package:tmail_ui_user/features/composer/domain/repository/composer_repos
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.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 '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
@@ -16,22 +15,18 @@ import 'create_new_and_save_email_to_drafts_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<EmailRepository>(),
|
||||
MockSpec<MailboxRepository>(),
|
||||
MockSpec<ComposerRepository>(),
|
||||
])
|
||||
void main() {
|
||||
late MockEmailRepository emailRepository;
|
||||
late MockMailboxRepository mailboxRepository;
|
||||
late MockComposerRepository composerRepository;
|
||||
late CreateNewAndSaveEmailToDraftsInteractor createNewAndSaveEmailToDraftsInteractor;
|
||||
|
||||
setUp(() {
|
||||
emailRepository = MockEmailRepository();
|
||||
mailboxRepository = MockMailboxRepository();
|
||||
composerRepository = MockComposerRepository();
|
||||
createNewAndSaveEmailToDraftsInteractor = CreateNewAndSaveEmailToDraftsInteractor(
|
||||
emailRepository,
|
||||
mailboxRepository,
|
||||
composerRepository);
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import 'package:tmail_ui_user/features/composer/domain/repository/composer_repos
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.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 '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
@@ -15,16 +14,13 @@ import 'create_new_and_send_email_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<EmailRepository>(),
|
||||
MockSpec<MailboxRepository>(),
|
||||
MockSpec<ComposerRepository>(),
|
||||
])
|
||||
void main() {
|
||||
final emailRepository = MockEmailRepository();
|
||||
final mailboxRepository = MockMailboxRepository();
|
||||
final composerRepository = MockComposerRepository();
|
||||
final createNewAndSendEmailInteractor = CreateNewAndSendEmailInteractor(
|
||||
emailRepository,
|
||||
mailboxRepository,
|
||||
composerRepository);
|
||||
group('create new and send email interactor test:', () {
|
||||
test(
|
||||
|
||||
+5
-18
@@ -1,6 +1,5 @@
|
||||
import 'package:dartz/dartz.dart' hide State;
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
@@ -34,13 +33,8 @@ void main() {
|
||||
const eventActionType = EventActionType.yes;
|
||||
|
||||
test('SHOULD emit loading and success states when storeEventAttendanceStatus is successful', () async {
|
||||
final currentEmailState = State('abc123');
|
||||
final updatedEmail = Email(id: emailIdFixture);
|
||||
|
||||
when(mockEmailRepository.getEmailState(
|
||||
sessionFixture,
|
||||
accountIdFixture
|
||||
)).thenAnswer((_) async => currentEmailState);
|
||||
when(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
@@ -58,13 +52,10 @@ void main() {
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(StoreEventAttendanceStatusLoading()),
|
||||
Right(StoreEventAttendanceStatusSuccess(
|
||||
eventActionType,
|
||||
currentEmailState: currentEmailState)),
|
||||
Right(StoreEventAttendanceStatusSuccess(eventActionType)),
|
||||
]),
|
||||
);
|
||||
|
||||
verify(mockEmailRepository.getEmailState(sessionFixture, accountIdFixture)).called(1);
|
||||
verify(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture,
|
||||
@@ -77,9 +68,11 @@ void main() {
|
||||
test('SHOULD emit loading and failure states when storeEventAttendanceStatus throws an exception', () async {
|
||||
final exception = Exception();
|
||||
|
||||
when(mockEmailRepository.getEmailState(
|
||||
when(mockEmailRepository.storeEventAttendanceStatus(
|
||||
sessionFixture,
|
||||
accountIdFixture
|
||||
accountIdFixture,
|
||||
emailIdFixture,
|
||||
eventActionType,
|
||||
)).thenThrow(exception);
|
||||
|
||||
final result = storeEventAttendanceStatusInteractor.execute(
|
||||
@@ -95,12 +88,6 @@ void main() {
|
||||
Left(StoreEventAttendanceStatusFailure(exception: exception)),
|
||||
]),
|
||||
);
|
||||
|
||||
verify(mockEmailRepository.getEmailState(
|
||||
sessionFixture,
|
||||
accountIdFixture
|
||||
)).called(1);
|
||||
verifyNoMoreInteractions(mockEmailRepository);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user