TF-2667 Store email to sending queue when sending with no connection on mobile

This commit is contained in:
dab246
2024-03-22 15:35:25 +07:00
committed by Dat H. Pham
parent 5d502736d8
commit f80b77cc03
2 changed files with 19 additions and 5 deletions
@@ -807,7 +807,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
cancelToken: cancelToken cancelToken: cancelToken
); );
log('ComposerController::_handleSendMessages: resultState = $resultState'); log('ComposerController::_handleSendMessages: resultState = $resultState');
if (resultState is SendEmailSuccess) { if (resultState is SendEmailSuccess || mailboxDashBoardController.validateSendingEmailFailedWhenNetworkIsLostOnMobile(resultState)) {
_sendButtonState = ButtonState.enabled; _sendButtonState = ButtonState.enabled;
_closeComposerAction(result: resultState); _closeComposerAction(result: resultState);
} else if (resultState is SendEmailFailure && resultState.exception is SendingEmailCanceledException) { } else if (resultState is SendEmailFailure && resultState.exception is SendingEmailCanceledException) {
@@ -392,7 +392,10 @@ class MailboxDashBoardController extends ReloadableController {
@override @override
void handleExceptionAction({Failure? failure, Exception? exception}) { void handleExceptionAction({Failure? failure, Exception? exception}) {
super.handleExceptionAction(failure: failure, exception: exception); super.handleExceptionAction(failure: failure, exception: exception);
if (failure is SendEmailFailure && exception is NoNetworkError) { if (failure is SendEmailFailure &&
exception is NoNetworkError &&
PlatformInfo.isMobile
) {
log('MailboxDashBoardController::handleExceptionAction(): $failure'); log('MailboxDashBoardController::handleExceptionAction(): $failure');
_storeSendingEmailInCaseOfSendingFailureInMobile(failure); _storeSendingEmailInCaseOfSendingFailureInMobile(failure);
} }
@@ -1261,6 +1264,8 @@ class MailboxDashBoardController extends ReloadableController {
result is SaveEmailAsDraftsSuccess || result is SaveEmailAsDraftsSuccess ||
result is UpdateEmailDraftsSuccess) { result is UpdateEmailDraftsSuccess) {
consumeState(Stream.value(Right<Failure, Success>(result))); consumeState(Stream.value(Right<Failure, Success>(result)));
} else if (validateSendingEmailFailedWhenNetworkIsLostOnMobile(result)) {
_storeSendingEmailInCaseOfSendingFailureInMobile(result);
} }
await _removeComposerCacheOnWeb(); await _removeComposerCacheOnWeb();
@@ -1403,6 +1408,8 @@ class MailboxDashBoardController extends ReloadableController {
result is SaveEmailAsDraftsSuccess || result is SaveEmailAsDraftsSuccess ||
result is UpdateEmailDraftsSuccess) { result is UpdateEmailDraftsSuccess) {
consumeState(Stream.value(Right<Failure, Success>(result))); consumeState(Stream.value(Right<Failure, Success>(result)));
} else if (validateSendingEmailFailedWhenNetworkIsLostOnMobile(result)) {
_storeSendingEmailInCaseOfSendingFailureInMobile(result);
} }
await _removeComposerCacheOnWeb(); await _removeComposerCacheOnWeb();
@@ -1813,7 +1820,9 @@ class MailboxDashBoardController extends ReloadableController {
void _handleSendEmailFailure(SendEmailFailure failure) { void _handleSendEmailFailure(SendEmailFailure failure) {
logError('MailboxDashBoardController::_handleSendEmailFailure():failure: $failure'); logError('MailboxDashBoardController::_handleSendEmailFailure():failure: $failure');
_storeSendingEmailInCaseOfSendingFailureInMobile(failure); if (PlatformInfo.isMobile) {
_storeSendingEmailInCaseOfSendingFailureInMobile(failure);
}
if (currentContext == null) { if (currentContext == null) {
clearState(); clearState();
return; return;
@@ -1943,8 +1952,7 @@ class MailboxDashBoardController extends ReloadableController {
} }
void _storeSendingEmailInCaseOfSendingFailureInMobile(SendEmailFailure failure) { void _storeSendingEmailInCaseOfSendingFailureInMobile(SendEmailFailure failure) {
if (PlatformInfo.isMobile && if (failure.session != null &&
failure.session != null &&
failure.accountId != null && failure.accountId != null &&
failure.emailRequest != null failure.emailRequest != null
) { ) {
@@ -2475,6 +2483,12 @@ class MailboxDashBoardController extends ReloadableController {
await _removeComposerCacheOnWebInteractor.execute(); await _removeComposerCacheOnWebInteractor.execute();
} }
bool validateSendingEmailFailedWhenNetworkIsLostOnMobile(FeatureFailure failure) {
return failure is SendEmailFailure &&
failure.exception is NoNetworkError &&
PlatformInfo.isMobile;
}
@override @override
void onClose() { void onClose() {
_emailReceiveManager.closeEmailReceiveManagerStream(); _emailReceiveManager.closeEmailReceiveManagerStream();