1+ import 'dart:async' ;
2+
13import 'package:core/presentation/state/failure.dart' ;
24import 'package:core/presentation/state/success.dart' ;
35import 'package:core/utils/app_logger.dart' ;
@@ -32,7 +34,8 @@ class CreateNewAndSendEmailInteractor {
3234
3335 Stream <dartz.Either <Failure , Success >> execute ({
3436 required CreateEmailRequest createEmailRequest,
35- CancelToken ? cancelToken
37+ CancelToken ? cancelToken,
38+ Duration ? timeout,
3639 }) async * {
3740 SendingEmailArguments ? sendingEmailArguments;
3841 try {
@@ -45,36 +48,37 @@ class CreateNewAndSendEmailInteractor {
4548
4649 sendingEmailArguments = await _createEmailObject (createEmailRequest);
4750
48- if (sendingEmailArguments != null ) {
49- yield dartz.Right <Failure , Success >(SendEmailLoading ());
51+ if (sendingEmailArguments == null ) {
52+ yield dartz.Left <Failure , Success >(GenerateEmailFailure (CannotCreateEmailObjectException ()));
53+ return ;
54+ }
5055
51- await _emailRepository.sendEmail (
52- sendingEmailArguments.session,
53- sendingEmailArguments.accountId,
54- sendingEmailArguments.emailRequest,
55- mailboxRequest: sendingEmailArguments.mailboxRequest,
56- cancelToken: cancelToken
57- );
56+ yield dartz.Right <Failure , Success >(SendEmailLoading ());
5857
59- if (sendingEmailArguments.emailRequest.emailIdDestroyed != null ) {
60- await _deleteOldDraftsEmail (
61- session: sendingEmailArguments.session,
62- accountId: sendingEmailArguments.accountId,
63- draftEmailId: sendingEmailArguments.emailRequest.emailIdDestroyed! ,
64- cancelToken: cancelToken
65- );
66- }
67-
68- yield dartz.Right <Failure , Success >(
69- SendEmailSuccess (
70- currentMailboxState: listCurrentState? .value1,
71- currentEmailState: listCurrentState? .value2,
72- emailRequest: sendingEmailArguments.emailRequest
73- )
58+ await _emailRepository.sendEmail (
59+ sendingEmailArguments.session,
60+ sendingEmailArguments.accountId,
61+ sendingEmailArguments.emailRequest,
62+ mailboxRequest: sendingEmailArguments.mailboxRequest,
63+ cancelToken: cancelToken,
64+ timeout: timeout,
65+ );
66+
67+ if (sendingEmailArguments.emailRequest.emailIdDestroyed != null ) {
68+ await _deleteOldDraftsEmail (
69+ session: sendingEmailArguments.session,
70+ accountId: sendingEmailArguments.accountId,
71+ draftEmailId: sendingEmailArguments.emailRequest.emailIdDestroyed! ,
7472 );
75- } else {
76- yield dartz.Left <Failure , Success >(GenerateEmailFailure (CannotCreateEmailObjectException ()));
7773 }
74+
75+ yield dartz.Right <Failure , Success >(
76+ SendEmailSuccess (
77+ currentMailboxState: listCurrentState? .value1,
78+ currentEmailState: listCurrentState? .value2,
79+ emailRequest: sendingEmailArguments.emailRequest
80+ )
81+ );
7882 } catch (e) {
7983 logError ('CreateNewAndSendEmailInteractor::execute: Exception: $e ' );
8084 if (e is UnknownError && e.message is List <SendingEmailCanceledException >) {
@@ -85,6 +89,14 @@ class CreateNewAndSendEmailInteractor {
8589 emailRequest: sendingEmailArguments? .emailRequest,
8690 mailboxRequest: sendingEmailArguments? .mailboxRequest,
8791 ));
92+ } else if (e is TimeoutException ) {
93+ yield dartz.Left <Failure , Success >(SendEmailFailure (
94+ exception: SendingEmailTimeoutException (),
95+ session: sendingEmailArguments? .session,
96+ accountId: sendingEmailArguments? .accountId,
97+ emailRequest: sendingEmailArguments? .emailRequest,
98+ mailboxRequest: sendingEmailArguments? .mailboxRequest,
99+ ));
88100 } else {
89101 yield dartz.Left <Failure , Success >(SendEmailFailure (
90102 exception: e,
@@ -132,14 +144,12 @@ class CreateNewAndSendEmailInteractor {
132144 required Session session,
133145 required AccountId accountId,
134146 required EmailId draftEmailId,
135- CancelToken ? cancelToken
136147 }) async {
137148 try {
138149 await _emailRepository.deleteEmailPermanently (
139150 session,
140151 accountId,
141152 draftEmailId,
142- cancelToken: cancelToken
143153 );
144154 } catch (e) {
145155 logError ('CreateNewAndSendEmailInteractor::_deleteOldDraftsEmail: Exception: $e ' );
0 commit comments