Skip to content

Commit 030a01b

Browse files
committed
TF-3150 Remove Cancel button and add timeout for saving & sending email
1 parent cce2e45 commit 030a01b

19 files changed

+440
-166
lines changed
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
class SendingEmailCanceledException implements Exception {}
22

3-
class SavingEmailToDraftsCanceledException implements Exception {}
3+
class SavingEmailToDraftsCanceledException implements Exception {}
4+
5+
class SendingEmailTimeoutException implements Exception {}
6+
7+
class SavingEmailToDraftsTimeoutException implements Exception {}

lib/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:async';
2+
13
import 'package:core/presentation/state/failure.dart';
24
import 'package:core/presentation/state/success.dart';
35
import 'package:core/utils/app_logger.dart';
@@ -32,6 +34,7 @@ class CreateNewAndSaveEmailToDraftsInteractor {
3234
Stream<dartz.Either<Failure, Success>> execute({
3335
required CreateEmailRequest createEmailRequest,
3436
CancelToken? cancelToken,
37+
Duration? timeout,
3538
}) async* {
3639
try {
3740
yield dartz.Right<Failure, Success>(GenerateEmailLoading());
@@ -43,45 +46,47 @@ class CreateNewAndSaveEmailToDraftsInteractor {
4346

4447
final emailCreated = await _createEmailObject(createEmailRequest);
4548

46-
if (emailCreated != null) {
47-
if (createEmailRequest.draftsEmailId == null) {
48-
yield dartz.Right<Failure, Success>(SaveEmailAsDraftsLoading());
49-
50-
final emailDraftSaved = await _emailRepository.saveEmailAsDrafts(
51-
createEmailRequest.session,
52-
createEmailRequest.accountId,
53-
emailCreated,
54-
cancelToken: cancelToken
55-
);
56-
57-
yield dartz.Right<Failure, Success>(
58-
SaveEmailAsDraftsSuccess(
59-
emailDraftSaved.id!,
60-
currentMailboxState: listCurrentState?.value1,
61-
currentEmailState: listCurrentState?.value2
62-
)
63-
);
64-
} else {
65-
yield dartz.Right<Failure, Success>(UpdatingEmailDrafts());
66-
67-
final emailDraftSaved = await _emailRepository.updateEmailDrafts(
68-
createEmailRequest.session,
69-
createEmailRequest.accountId,
70-
emailCreated,
71-
createEmailRequest.draftsEmailId!,
72-
cancelToken: cancelToken
73-
);
74-
75-
yield dartz.Right<Failure, Success>(
76-
UpdateEmailDraftsSuccess(
77-
emailDraftSaved.id!,
78-
currentMailboxState: listCurrentState?.value1,
79-
currentEmailState: listCurrentState?.value2
80-
)
81-
);
82-
}
83-
} else {
49+
if (emailCreated == null) {
8450
yield dartz.Left<Failure, Success>(GenerateEmailFailure(CannotCreateEmailObjectException()));
51+
return;
52+
}
53+
54+
if (createEmailRequest.draftsEmailId == null) {
55+
yield dartz.Right<Failure, Success>(SaveEmailAsDraftsLoading());
56+
57+
final emailDraftSaved = await _emailRepository.saveEmailAsDrafts(
58+
createEmailRequest.session,
59+
createEmailRequest.accountId,
60+
emailCreated,
61+
cancelToken: cancelToken,
62+
timeout: timeout,
63+
);
64+
65+
yield dartz.Right<Failure, Success>(
66+
SaveEmailAsDraftsSuccess(
67+
emailDraftSaved.id!,
68+
currentMailboxState: listCurrentState?.value1,
69+
currentEmailState: listCurrentState?.value2
70+
)
71+
);
72+
} else {
73+
yield dartz.Right<Failure, Success>(UpdatingEmailDrafts());
74+
75+
final emailDraftSaved = await _emailRepository.updateEmailDrafts(
76+
createEmailRequest.session,
77+
createEmailRequest.accountId,
78+
emailCreated,
79+
createEmailRequest.draftsEmailId!,
80+
cancelToken: cancelToken
81+
);
82+
83+
yield dartz.Right<Failure, Success>(
84+
UpdateEmailDraftsSuccess(
85+
emailDraftSaved.id!,
86+
currentMailboxState: listCurrentState?.value1,
87+
currentEmailState: listCurrentState?.value2
88+
)
89+
);
8590
}
8691
} catch (e) {
8792
logError('CreateNewAndSaveEmailToDraftsInteractor::execute: Exception: $e');
@@ -91,6 +96,10 @@ class CreateNewAndSaveEmailToDraftsInteractor {
9196
} else {
9297
yield dartz.Left<Failure, Success>(UpdateEmailDraftsFailure(SavingEmailToDraftsCanceledException()));
9398
}
99+
} else if (e is TimeoutException) {
100+
yield dartz.Left<Failure, Success>(createEmailRequest.draftsEmailId == null
101+
? SaveEmailAsDraftsFailure(SavingEmailToDraftsTimeoutException())
102+
: UpdateEmailDraftsFailure(SavingEmailToDraftsTimeoutException()));
94103
} else {
95104
if (createEmailRequest.draftsEmailId == null) {
96105
yield dartz.Left<Failure, Success>(SaveEmailAsDraftsFailure(e));

lib/features/composer/domain/usecases/create_new_and_send_email_interactor.dart

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:async';
2+
13
import 'package:core/presentation/state/failure.dart';
24
import 'package:core/presentation/state/success.dart';
35
import '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

Comments
 (0)