1
+ import 'dart:async' ;
2
+
1
3
import 'package:core/presentation/state/failure.dart' ;
2
4
import 'package:core/presentation/state/success.dart' ;
3
5
import 'package:core/utils/app_logger.dart' ;
@@ -32,7 +34,8 @@ class CreateNewAndSendEmailInteractor {
32
34
33
35
Stream <dartz.Either <Failure , Success >> execute ({
34
36
required CreateEmailRequest createEmailRequest,
35
- CancelToken ? cancelToken
37
+ CancelToken ? cancelToken,
38
+ Duration ? timeout,
36
39
}) async * {
37
40
SendingEmailArguments ? sendingEmailArguments;
38
41
try {
@@ -45,36 +48,37 @@ class CreateNewAndSendEmailInteractor {
45
48
46
49
sendingEmailArguments = await _createEmailObject (createEmailRequest);
47
50
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
+ }
50
55
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 ());
58
57
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! ,
74
72
);
75
- } else {
76
- yield dartz.Left <Failure , Success >(GenerateEmailFailure (CannotCreateEmailObjectException ()));
77
73
}
74
+
75
+ yield dartz.Right <Failure , Success >(
76
+ SendEmailSuccess (
77
+ currentMailboxState: listCurrentState? .value1,
78
+ currentEmailState: listCurrentState? .value2,
79
+ emailRequest: sendingEmailArguments.emailRequest
80
+ )
81
+ );
78
82
} catch (e) {
79
83
logError ('CreateNewAndSendEmailInteractor::execute: Exception: $e ' );
80
84
if (e is UnknownError && e.message is List <SendingEmailCanceledException >) {
@@ -85,6 +89,14 @@ class CreateNewAndSendEmailInteractor {
85
89
emailRequest: sendingEmailArguments? .emailRequest,
86
90
mailboxRequest: sendingEmailArguments? .mailboxRequest,
87
91
));
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
+ ));
88
100
} else {
89
101
yield dartz.Left <Failure , Success >(SendEmailFailure (
90
102
exception: e,
@@ -132,14 +144,12 @@ class CreateNewAndSendEmailInteractor {
132
144
required Session session,
133
145
required AccountId accountId,
134
146
required EmailId draftEmailId,
135
- CancelToken ? cancelToken
136
147
}) async {
137
148
try {
138
149
await _emailRepository.deleteEmailPermanently (
139
150
session,
140
151
accountId,
141
152
draftEmailId,
142
- cancelToken: cancelToken
143
153
);
144
154
} catch (e) {
145
155
logError ('CreateNewAndSendEmailInteractor::_deleteOldDraftsEmail: Exception: $e ' );
0 commit comments