@@ -15,24 +15,29 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/create_e
1515import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart' ;
1616import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart' ;
1717import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart' ;
18+ import 'package:tmail_ui_user/features/login/data/network/interceptors/timeout_interceptors.dart' ;
1819import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart' ;
1920import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_arguments.dart' ;
2021import 'package:tmail_ui_user/main/exceptions/remote_exception.dart' ;
22+ import 'package:tmail_ui_user/main/utils/app_config.dart' ;
2123
2224class CreateNewAndSendEmailInteractor {
2325 final EmailRepository _emailRepository;
2426 final MailboxRepository _mailboxRepository;
2527 final ComposerRepository _composerRepository;
28+ final TimeoutInterceptors _timeoutInterceptors;
2629
2730 CreateNewAndSendEmailInteractor (
2831 this ._emailRepository,
2932 this ._mailboxRepository,
3033 this ._composerRepository,
34+ this ._timeoutInterceptors,
3135 );
3236
3337 Stream <dartz.Either <Failure , Success >> execute ({
3438 required CreateEmailRequest createEmailRequest,
35- CancelToken ? cancelToken
39+ CancelToken ? cancelToken,
40+ bool enableTimeout = false ,
3641 }) async * {
3742 SendingEmailArguments ? sendingEmailArguments;
3843 try {
@@ -45,38 +50,54 @@ class CreateNewAndSendEmailInteractor {
4550
4651 sendingEmailArguments = await _createEmailObject (createEmailRequest);
4752
48- if (sendingEmailArguments != null ) {
49- yield dartz.Right <Failure , Success >(SendEmailLoading ());
53+ if (sendingEmailArguments == null ) {
54+ yield dartz.Left <Failure , Success >(GenerateEmailFailure (CannotCreateEmailObjectException ()));
55+ return ;
56+ }
5057
51- await _emailRepository.sendEmail (
52- sendingEmailArguments.session,
53- sendingEmailArguments.accountId,
54- sendingEmailArguments.emailRequest,
55- mailboxRequest: sendingEmailArguments.mailboxRequest,
56- cancelToken: cancelToken
58+ if (enableTimeout) {
59+ _timeoutInterceptors.setTimeout (
60+ connectionTimeout: AppConfig .sendingMessageTimeout,
61+ sendTimeout: AppConfig .sendingMessageTimeout,
62+ receiveTimeout: AppConfig .sendingMessageTimeout,
5763 );
64+ }
65+
66+ yield dartz.Right <Failure , Success >(SendEmailLoading ());
5867
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- )
68+ await _emailRepository.sendEmail (
69+ sendingEmailArguments.session,
70+ sendingEmailArguments.accountId,
71+ sendingEmailArguments.emailRequest,
72+ mailboxRequest: sendingEmailArguments.mailboxRequest,
73+ cancelToken: cancelToken,
74+ );
75+
76+ if (enableTimeout) {
77+ _timeoutInterceptors.resetTimeout ();
78+ }
79+
80+ if (sendingEmailArguments.emailRequest.emailIdDestroyed != null ) {
81+ await _deleteOldDraftsEmail (
82+ session: sendingEmailArguments.session,
83+ accountId: sendingEmailArguments.accountId,
84+ draftEmailId: sendingEmailArguments.emailRequest.emailIdDestroyed! ,
85+ cancelToken: cancelToken
7486 );
75- } else {
76- yield dartz.Left <Failure , Success >(GenerateEmailFailure (CannotCreateEmailObjectException ()));
7787 }
88+
89+ yield dartz.Right <Failure , Success >(
90+ SendEmailSuccess (
91+ currentMailboxState: listCurrentState? .value1,
92+ currentEmailState: listCurrentState? .value2,
93+ emailRequest: sendingEmailArguments.emailRequest
94+ )
95+ );
7896 } catch (e) {
7997 logError ('CreateNewAndSendEmailInteractor::execute: Exception: $e ' );
98+ if (enableTimeout) {
99+ _timeoutInterceptors.resetTimeout ();
100+ }
80101 if (e is UnknownError && e.message is List <SendingEmailCanceledException >) {
81102 yield dartz.Left <Failure , Success >(SendEmailFailure (
82103 exception: SendingEmailCanceledException (),
@@ -85,6 +106,14 @@ class CreateNewAndSendEmailInteractor {
85106 emailRequest: sendingEmailArguments? .emailRequest,
86107 mailboxRequest: sendingEmailArguments? .mailboxRequest,
87108 ));
109+ } else if (e is ConnectionTimeout || e is SendTimeout || e is ReceiveTimeout ) {
110+ yield dartz.Left <Failure , Success >(SendEmailFailure (
111+ exception: SendingEmailTimeoutException (),
112+ session: sendingEmailArguments? .session,
113+ accountId: sendingEmailArguments? .accountId,
114+ emailRequest: sendingEmailArguments? .emailRequest,
115+ mailboxRequest: sendingEmailArguments? .mailboxRequest,
116+ ));
88117 } else {
89118 yield dartz.Left <Failure , Success >(SendEmailFailure (
90119 exception: e,
0 commit comments