TF-2189 Edit sending email in Sending Queue on iOS
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit 79e1e2de5555973a5ba4a0c2b8fc3c091bcd63a3)
This commit is contained in:
@@ -12,10 +12,19 @@ class SendEmailLoading extends UIState {}
|
|||||||
|
|
||||||
class SendEmailSuccess extends UIActionState {
|
class SendEmailSuccess extends UIActionState {
|
||||||
|
|
||||||
|
final String? storedSendingId;
|
||||||
|
|
||||||
SendEmailSuccess({
|
SendEmailSuccess({
|
||||||
jmap.State? currentEmailState,
|
jmap.State? currentEmailState,
|
||||||
jmap.State? currentMailboxState,
|
jmap.State? currentMailboxState,
|
||||||
|
this.storedSendingId,
|
||||||
}) : super(currentEmailState, currentMailboxState);
|
}) : super(currentEmailState, currentMailboxState);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
...super.props,
|
||||||
|
storedSendingId,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class SendEmailFailure extends FeatureFailure {
|
class SendEmailFailure extends FeatureFailure {
|
||||||
@@ -34,4 +43,14 @@ class SendEmailFailure extends FeatureFailure {
|
|||||||
this.mailboxRequest,
|
this.mailboxRequest,
|
||||||
this.sendingEmailActionType
|
this.sendingEmailActionType
|
||||||
}) : super(exception: exception);
|
}) : super(exception: exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
...super.props,
|
||||||
|
session,
|
||||||
|
accountId,
|
||||||
|
emailRequest,
|
||||||
|
mailboxRequest,
|
||||||
|
sendingEmailActionType,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
@@ -51,7 +51,8 @@ class SendEmailInteractor {
|
|||||||
yield Right<Failure, Success>(
|
yield Right<Failure, Success>(
|
||||||
SendEmailSuccess(
|
SendEmailSuccess(
|
||||||
currentEmailState: currentEmailState,
|
currentEmailState: currentEmailState,
|
||||||
currentMailboxState: currentMailboxState
|
currentMailboxState: currentMailboxState,
|
||||||
|
storedSendingId: emailRequest.storedSendingId
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import 'package:tmail_ui_user/features/composer/presentation/model/draggable_ema
|
|||||||
import 'package:tmail_ui_user/features/composer/presentation/model/image_source.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/image_source.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_view_event.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_view_event.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
||||||
@@ -856,108 +857,98 @@ class ComposerController extends BaseController {
|
|||||||
_handleSendMessages(context);
|
_handleSendMessages(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get _isParamUserNull {
|
||||||
|
if (composerArguments.value == null ||
|
||||||
|
mailboxDashBoardController.userProfile.value == null ||
|
||||||
|
mailboxDashBoardController.sessionCurrent == null ||
|
||||||
|
mailboxDashBoardController.accountId.value == null
|
||||||
|
) {
|
||||||
|
logError('ComposerController::isParamUserNotNull: Param is NULL');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void _handleSendMessages(BuildContext context) async {
|
void _handleSendMessages(BuildContext context) async {
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
if (_isParamUserNull) {
|
||||||
final arguments = composerArguments.value;
|
logError('ComposerController::_handleSendMessages: Param is NULL');
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
_closeComposerAction();
|
||||||
final sentMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent];
|
return;
|
||||||
final outboxMailboxId = mailboxDashBoardController.outboxMailbox?.id;
|
}
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
|
||||||
|
|
||||||
if (arguments != null && accountId != null && userProfile != null && session != null) {
|
if (networkConnectionController.isNetworkConnectionAvailable()) {
|
||||||
final createdEmail = await _generateEmail(
|
final sendingArgs = await _createSendingEmailArguments(context);
|
||||||
context,
|
_closeComposerAction(result: sendingArgs);
|
||||||
userProfile,
|
} else {
|
||||||
outboxMailboxId: outboxMailboxId,
|
if (composerArguments.value!.sendingEmailActionType == SendingEmailActionType.create) {
|
||||||
arguments: arguments
|
_showConfirmDialogStoreSendingEmail(context);
|
||||||
);
|
|
||||||
|
|
||||||
final emailRequest = arguments.emailActionType == EmailActionType.editSendingEmail
|
|
||||||
? arguments.sendingEmail!.toEmailRequest(newEmail: createdEmail)
|
|
||||||
: EmailRequest(
|
|
||||||
email: createdEmail,
|
|
||||||
sentMailboxId: sentMailboxId,
|
|
||||||
identityId: identitySelected?.id,
|
|
||||||
emailIdDestroyed: arguments.emailActionType == EmailActionType.editDraft
|
|
||||||
? arguments.presentationEmail?.id
|
|
||||||
: null,
|
|
||||||
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
|
|
||||||
emailActionType: arguments.emailActionType
|
|
||||||
);
|
|
||||||
final mailboxRequest = outboxMailboxId == null
|
|
||||||
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
|
|
||||||
: null;
|
|
||||||
|
|
||||||
if (!networkConnectionController.isNetworkConnectionAvailable()) {
|
|
||||||
switch(arguments.sendingEmailActionType) {
|
|
||||||
case SendingEmailActionType.create:
|
|
||||||
_showConfirmDialogStoreSendingEmail(
|
|
||||||
SendingEmailArguments(
|
|
||||||
session,
|
|
||||||
accountId,
|
|
||||||
emailRequest,
|
|
||||||
mailboxRequest,
|
|
||||||
actionMode: ComposeActionMode.pushQueue
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
case SendingEmailActionType.edit:
|
|
||||||
uploadController.clearInlineFileUploaded();
|
|
||||||
_closeComposerAction(
|
|
||||||
result: SendingEmailArguments(
|
|
||||||
session,
|
|
||||||
accountId,
|
|
||||||
emailRequest,
|
|
||||||
mailboxRequest,
|
|
||||||
actionMode: ComposeActionMode.editQueue
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
uploadController.clearInlineFileUploaded();
|
|
||||||
_closeComposerAction(
|
|
||||||
result: SendingEmailArguments(
|
|
||||||
session,
|
|
||||||
accountId,
|
|
||||||
emailRequest,
|
|
||||||
mailboxRequest,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
uploadController.clearInlineFileUploaded();
|
final sendingArgs = await _createSendingEmailArguments(context);
|
||||||
_closeComposerAction(
|
_closeComposerAction(
|
||||||
result: SendingEmailArguments(
|
result: composerArguments.value!.sendingEmailActionType == SendingEmailActionType.edit
|
||||||
session,
|
? sendingArgs.copyWith(actionMode: ComposeActionMode.editQueue)
|
||||||
accountId,
|
: sendingArgs
|
||||||
emailRequest,
|
|
||||||
mailboxRequest,
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
logError('ComposerController::_handleSendMessages: arguments/accountId/userProfile/session is NULL');
|
|
||||||
uploadController.clearInlineFileUploaded();
|
|
||||||
_closeComposerAction();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showConfirmDialogStoreSendingEmail(SendingEmailArguments sendingEmailArguments) {
|
Future<SendingEmailArguments> _createSendingEmailArguments(BuildContext context) async {
|
||||||
|
final session = mailboxDashBoardController.sessionCurrent!;
|
||||||
|
final arguments = composerArguments.value!;
|
||||||
|
final accountId = mailboxDashBoardController.accountId.value!;
|
||||||
|
final userProfile = mailboxDashBoardController.userProfile.value!;
|
||||||
|
|
||||||
|
final createdEmail = await _generateEmail(
|
||||||
|
context,
|
||||||
|
userProfile,
|
||||||
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.id,
|
||||||
|
arguments: arguments
|
||||||
|
);
|
||||||
|
|
||||||
|
final emailRequest = arguments.emailActionType == EmailActionType.editSendingEmail
|
||||||
|
? arguments.sendingEmail!.toEmailRequest(newEmail: createdEmail)
|
||||||
|
: EmailRequest(
|
||||||
|
email: createdEmail,
|
||||||
|
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
||||||
|
identityId: identitySelected?.id,
|
||||||
|
emailIdDestroyed: arguments.emailActionType == EmailActionType.editDraft
|
||||||
|
? arguments.presentationEmail?.id
|
||||||
|
: null,
|
||||||
|
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
|
||||||
|
emailActionType: arguments.emailActionType
|
||||||
|
);
|
||||||
|
|
||||||
|
final mailboxRequest = mailboxDashBoardController.outboxMailbox?.id == null
|
||||||
|
? CreateNewMailboxRequest(
|
||||||
|
Id(_uuid.v1()),
|
||||||
|
PresentationMailbox.outboxMailboxName
|
||||||
|
)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
return SendingEmailArguments(
|
||||||
|
session,
|
||||||
|
accountId,
|
||||||
|
emailRequest,
|
||||||
|
mailboxRequest,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showConfirmDialogStoreSendingEmail(BuildContext context) {
|
||||||
showConfirmDialogAction(
|
showConfirmDialogAction(
|
||||||
currentContext!,
|
context,
|
||||||
PlatformInfo.isIOS
|
PlatformInfo.isIOS
|
||||||
? AppLocalizations.of(currentContext!).messageDialogOfflineModeOnIOS
|
? AppLocalizations.of(context).messageDialogOfflineModeOnIOS
|
||||||
: '',
|
: '',
|
||||||
AppLocalizations.of(currentContext!).proceed,
|
AppLocalizations.of(context).proceed,
|
||||||
onConfirmAction: () {
|
onConfirmAction: () async {
|
||||||
uploadController.clearInlineFileUploaded();
|
final sendingArgs = await _createSendingEmailArguments(context);
|
||||||
_closeComposerAction(result: sendingEmailArguments);
|
_closeComposerAction(
|
||||||
|
result: sendingArgs.copyWith(actionMode: ComposeActionMode.pushQueue)
|
||||||
|
);
|
||||||
},
|
},
|
||||||
onCancelAction: () {
|
onCancelAction: _closeComposerAction,
|
||||||
uploadController.clearInlineFileUploaded();
|
title: AppLocalizations.of(context).youAreInOfflineMode,
|
||||||
_closeComposerAction();
|
|
||||||
},
|
|
||||||
title: AppLocalizations.of(currentContext!).youAreInOfflineMode,
|
|
||||||
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
|
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
|
||||||
alignCenter: true,
|
alignCenter: true,
|
||||||
messageStyle: const TextStyle(
|
messageStyle: const TextStyle(
|
||||||
@@ -968,25 +959,25 @@ class ComposerController extends BaseController {
|
|||||||
listTextSpan: PlatformInfo.isIOS
|
listTextSpan: PlatformInfo.isIOS
|
||||||
? null
|
? null
|
||||||
: [
|
: [
|
||||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
|
TextSpan(text: AppLocalizations.of(context).messageDialogWhenStoreSendingEmailFirst),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond,
|
text: AppLocalizations.of(context).messageDialogWhenStoreSendingEmailSecond,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
color: AppColor.colorTitleSendingItem,
|
color: AppColor.colorTitleSendingItem,
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
fontWeight: FontWeight.w600
|
fontWeight: FontWeight.w600
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird),
|
TextSpan(text: AppLocalizations.of(context).messageDialogWhenStoreSendingEmailThird),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: AppLocalizations.of(currentContext!).sendingQueue,
|
text: AppLocalizations.of(context).sendingQueue,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
color: AppColor.colorTitleSendingItem,
|
color: AppColor.colorTitleSendingItem,
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
fontWeight: FontWeight.w600
|
fontWeight: FontWeight.w600
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
|
TextSpan(text: AppLocalizations.of(context).messageDialogWhenStoreSendingEmailTail)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1195,12 +1186,7 @@ class ComposerController extends BaseController {
|
|||||||
accountId == null
|
accountId == null
|
||||||
) {
|
) {
|
||||||
logError('ComposerController::saveToDraftAndClose: Param is NULL');
|
logError('ComposerController::saveToDraftAndClose: Param is NULL');
|
||||||
uploadController.clearInlineFileUploaded();
|
_closeComposerAction();
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
mailboxDashBoardController.closeComposerOverlay();
|
|
||||||
} else {
|
|
||||||
if (canPop) popBack();
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1213,12 +1199,12 @@ class ComposerController extends BaseController {
|
|||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
);
|
);
|
||||||
|
|
||||||
mailboxDashBoardController.updateEmailToDraft(
|
_closeComposerAction(result: SaveToDraftArguments(
|
||||||
session: session,
|
session: session,
|
||||||
accountId: accountId,
|
accountId: accountId,
|
||||||
newEmail: newEmail,
|
newEmail: newEmail,
|
||||||
oldEmailId: _emailIdEditing!
|
oldEmailId: _emailIdEditing!
|
||||||
);
|
));
|
||||||
} else {
|
} else {
|
||||||
final isChanged = await _isEmailChanged(
|
final isChanged = await _isEmailChanged(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -1236,29 +1222,18 @@ class ComposerController extends BaseController {
|
|||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (arguments.emailActionType == EmailActionType.editDraft &&
|
_closeComposerAction(result: SaveToDraftArguments(
|
||||||
arguments.presentationEmail?.id != null) {
|
session: session,
|
||||||
mailboxDashBoardController.updateEmailToDraft(
|
accountId: accountId,
|
||||||
session: session,
|
newEmail: newEmail,
|
||||||
accountId: accountId,
|
oldEmailId: arguments.emailActionType == EmailActionType.editDraft
|
||||||
newEmail: newEmail,
|
? arguments.presentationEmail?.id
|
||||||
oldEmailId: arguments.presentationEmail!.id!
|
: null
|
||||||
);
|
));
|
||||||
} else {
|
} else {
|
||||||
mailboxDashBoardController.saveEmailToDraft(
|
_closeComposerAction();
|
||||||
session: session,
|
|
||||||
accountId: accountId,
|
|
||||||
email: newEmail
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uploadController.clearInlineFileUploaded();
|
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
mailboxDashBoardController.closeComposerOverlay();
|
|
||||||
} else {
|
|
||||||
if (canPop) popBack();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveToDraftAction(BuildContext context) {
|
void saveToDraftAction(BuildContext context) {
|
||||||
@@ -1294,21 +1269,14 @@ class ComposerController extends BaseController {
|
|||||||
draftMailboxId: event.draftMailboxId,
|
draftMailboxId: event.draftMailboxId,
|
||||||
arguments: event.arguments
|
arguments: event.arguments
|
||||||
);
|
);
|
||||||
|
mailboxDashBoardController.saveEmailToDraft(
|
||||||
if (event.emailIdEditing == null) {
|
arguments: SaveToDraftArguments(
|
||||||
mailboxDashBoardController.saveEmailToDraft(
|
|
||||||
session: event.session,
|
|
||||||
accountId: event.accountId,
|
|
||||||
email: newEmail
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
mailboxDashBoardController.updateEmailToDraft(
|
|
||||||
session: event.session,
|
session: event.session,
|
||||||
accountId: event.accountId,
|
accountId: event.accountId,
|
||||||
newEmail: newEmail,
|
newEmail: newEmail,
|
||||||
oldEmailId: event.emailIdEditing!
|
oldEmailId: event.emailIdEditing
|
||||||
);
|
)
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
File _covertSharedMediaFileToFile(SharedMediaFile sharedMediaFile) {
|
File _covertSharedMediaFileToFile(SharedMediaFile sharedMediaFile) {
|
||||||
@@ -1473,6 +1441,8 @@ class ComposerController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _closeComposerAction({dynamic result}) {
|
void _closeComposerAction({dynamic result}) {
|
||||||
|
uploadController.clearInlineFileUploaded();
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
_closeComposerWeb(result: result);
|
_closeComposerWeb(result: result);
|
||||||
} else {
|
} else {
|
||||||
@@ -1481,7 +1451,6 @@ class ComposerController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _closeComposerWeb({dynamic result}) {
|
void _closeComposerWeb({dynamic result}) {
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
|
||||||
mailboxDashBoardController.closeComposerOverlay(result: result);
|
mailboxDashBoardController.closeComposerOverlay(result: result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||||
|
|
||||||
|
class SaveToDraftArguments extends RouterArguments {
|
||||||
|
final Session session;
|
||||||
|
final AccountId accountId;
|
||||||
|
final Email newEmail;
|
||||||
|
final EmailId? oldEmailId;
|
||||||
|
|
||||||
|
SaveToDraftArguments({
|
||||||
|
required this.session,
|
||||||
|
required this.accountId,
|
||||||
|
required this.newEmail,
|
||||||
|
required this.oldEmailId
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [
|
||||||
|
session,
|
||||||
|
accountId,
|
||||||
|
newEmail,
|
||||||
|
oldEmailId,
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -362,7 +362,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
|
|
||||||
void _selectSelectedMailboxDefault() {
|
void _selectSelectedMailboxDefault() {
|
||||||
final isSearchEmailRunning = mailboxDashBoardController.searchController.isSearchEmailRunning;
|
final isSearchEmailRunning = mailboxDashBoardController.searchController.isSearchEmailRunning;
|
||||||
if (isSearchEmailRunning) {
|
final dashboardRoute = mailboxDashBoardController.dashboardRoute.value;
|
||||||
|
if (isSearchEmailRunning || dashboardRoute == DashboardRoutes.sendingQueue) {
|
||||||
log('MailboxController::_selectMailboxDefault(): isSearchEmailRunning is $isSearchEmailRunning');
|
log('MailboxController::_selectMailboxDefault(): isSearchEmailRunning is $isSearchEmailRunning');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_
|
|||||||
import 'package:tmail_ui_user/features/quotas/presentation/quotas_bindings.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart';
|
import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
|
||||||
@@ -168,6 +169,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<EmptySpamFolderInteractor>(),
|
Get.find<EmptySpamFolderInteractor>(),
|
||||||
Get.find<SaveEmailAsDraftsInteractor>(),
|
Get.find<SaveEmailAsDraftsInteractor>(),
|
||||||
Get.find<UpdateEmailDraftsInteractor>(),
|
Get.find<UpdateEmailDraftsInteractor>(),
|
||||||
|
Get.find<DeleteSendingEmailInteractor>(),
|
||||||
));
|
));
|
||||||
Get.put(AdvancedFilterController());
|
Get.put(AdvancedFilterController());
|
||||||
}
|
}
|
||||||
|
|||||||
+50
-32
@@ -32,7 +32,9 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_dr
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/compose_action_mode.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/compose_action_mode.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
|
||||||
@@ -105,6 +107,7 @@ import 'package:tmail_ui_user/features/push_notification/presentation/services/f
|
|||||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/get_all_sending_email_state.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/state/get_all_sending_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/update_sending_email_state.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/state/update_sending_email_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
|
||||||
@@ -172,6 +175,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final EmptySpamFolderInteractor _emptySpamFolderInteractor;
|
final EmptySpamFolderInteractor _emptySpamFolderInteractor;
|
||||||
final SaveEmailAsDraftsInteractor _saveEmailAsDraftsInteractor;
|
final SaveEmailAsDraftsInteractor _saveEmailAsDraftsInteractor;
|
||||||
final UpdateEmailDraftsInteractor _updateEmailDraftsInteractor;
|
final UpdateEmailDraftsInteractor _updateEmailDraftsInteractor;
|
||||||
|
final DeleteSendingEmailInteractor _deleteSendingEmailInteractor;
|
||||||
|
|
||||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||||
UpdateVacationInteractor? _updateVacationInteractor;
|
UpdateVacationInteractor? _updateVacationInteractor;
|
||||||
@@ -249,6 +253,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
this._emptySpamFolderInteractor,
|
this._emptySpamFolderInteractor,
|
||||||
this._saveEmailAsDraftsInteractor,
|
this._saveEmailAsDraftsInteractor,
|
||||||
this._updateEmailDraftsInteractor,
|
this._updateEmailDraftsInteractor,
|
||||||
|
this._deleteSendingEmailInteractor,
|
||||||
) : super(
|
) : super(
|
||||||
getAuthenticatedAccountInteractor,
|
getAuthenticatedAccountInteractor,
|
||||||
updateAuthenticationAccountInteractor
|
updateAuthenticationAccountInteractor
|
||||||
@@ -298,12 +303,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.storedState));
|
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.storedState));
|
||||||
_deleteMailboxStateToRefreshAction();
|
_deleteMailboxStateToRefreshAction();
|
||||||
} else if (success is SendEmailSuccess) {
|
} else if (success is SendEmailSuccess) {
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
_handleSendEmailSuccess(success);
|
||||||
_appToast.showToastSuccessMessage(
|
|
||||||
currentOverlayContext!,
|
|
||||||
AppLocalizations.of(currentContext!).message_has_been_sent_successfully,
|
|
||||||
leadingSVGIcon: _imagePaths.icSendSuccessToast);
|
|
||||||
}
|
|
||||||
} else if (success is SaveEmailAsDraftsSuccess) {
|
} else if (success is SaveEmailAsDraftsSuccess) {
|
||||||
_saveEmailAsDraftsSuccess(success);
|
_saveEmailAsDraftsSuccess(success);
|
||||||
} else if (success is MoveToMailboxSuccess) {
|
} else if (success is MoveToMailboxSuccess) {
|
||||||
@@ -347,6 +347,8 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_emptySpamFolderSuccess(success);
|
_emptySpamFolderSuccess(success);
|
||||||
} else if (success is MarkAsEmailReadSuccess) {
|
} else if (success is MarkAsEmailReadSuccess) {
|
||||||
_markAsReadEmailSuccess(success);
|
_markAsReadEmailSuccess(success);
|
||||||
|
} else if (success is DeleteSendingEmailSuccess) {
|
||||||
|
getAllSendingEmails();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1261,6 +1263,8 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
if (result is SendingEmailArguments) {
|
if (result is SendingEmailArguments) {
|
||||||
handleSendEmailAction(result);
|
handleSendEmailAction(result);
|
||||||
|
} else if (result is SaveToDraftArguments) {
|
||||||
|
saveEmailToDraft(arguments: result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1373,6 +1377,8 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final result = await push(AppRoutes.composer, arguments: arguments);
|
final result = await push(AppRoutes.composer, arguments: arguments);
|
||||||
if (result is SendingEmailArguments) {
|
if (result is SendingEmailArguments) {
|
||||||
handleSendEmailAction(result);
|
handleSendEmailAction(result);
|
||||||
|
} else if (result is SaveToDraftArguments) {
|
||||||
|
saveEmailToDraft(arguments: result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2081,34 +2087,46 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
draggableAppState.value = DraggableAppState.inActive;
|
draggableAppState.value = DraggableAppState.inActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveEmailToDraft({
|
void saveEmailToDraft({required SaveToDraftArguments arguments}) {
|
||||||
required Session session,
|
if (arguments.oldEmailId != null) {
|
||||||
required AccountId accountId,
|
consumeState(
|
||||||
required Email email
|
_updateEmailDraftsInteractor.execute(
|
||||||
}) {
|
arguments.session,
|
||||||
consumeState(
|
arguments.accountId,
|
||||||
_saveEmailAsDraftsInteractor.execute(
|
arguments.newEmail,
|
||||||
session,
|
arguments.oldEmailId!
|
||||||
accountId,
|
)
|
||||||
email
|
);
|
||||||
)
|
} else {
|
||||||
);
|
consumeState(
|
||||||
|
_saveEmailAsDraftsInteractor.execute(
|
||||||
|
arguments.session,
|
||||||
|
arguments.accountId,
|
||||||
|
arguments.newEmail,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateEmailToDraft({
|
void _handleSendEmailSuccess(SendEmailSuccess success) {
|
||||||
required Session session,
|
if (PlatformInfo.isIOS &&
|
||||||
required AccountId accountId,
|
success.storedSendingId != null &&
|
||||||
required Email newEmail,
|
accountId.value != null &&
|
||||||
required EmailId oldEmailId
|
sessionCurrent != null
|
||||||
}) {
|
) {
|
||||||
consumeState(
|
consumeState(_deleteSendingEmailInteractor.execute(
|
||||||
_updateEmailDraftsInteractor.execute(
|
accountId.value!,
|
||||||
session,
|
sessionCurrent!.username,
|
||||||
accountId,
|
success.storedSendingId!
|
||||||
newEmail,
|
));
|
||||||
oldEmailId
|
}
|
||||||
)
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
);
|
_appToast.showToastSuccessMessage(
|
||||||
|
currentOverlayContext!,
|
||||||
|
AppLocalizations.of(currentContext!).message_has_been_sent_successfully,
|
||||||
|
leadingSVGIcon: _imagePaths.icSendSuccessToast
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -22,6 +22,20 @@ class SendingEmailArguments extends RouterArguments {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
SendingEmailArguments copyWith({
|
||||||
|
Session? session,
|
||||||
|
AccountId? accountId,
|
||||||
|
EmailRequest? emailRequest,
|
||||||
|
CreateNewMailboxRequest? mailboxRequest,
|
||||||
|
ComposeActionMode? actionMode,
|
||||||
|
}) => SendingEmailArguments(
|
||||||
|
session ?? this.session,
|
||||||
|
accountId ?? this.accountId,
|
||||||
|
emailRequest ?? this.emailRequest,
|
||||||
|
mailboxRequest ?? this.mailboxRequest,
|
||||||
|
actionMode: actionMode ?? this.actionMode
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
session,
|
session,
|
||||||
|
|||||||
@@ -192,9 +192,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
|||||||
_deleteListSendingEmailAction(context, listSendingEmails);
|
_deleteListSendingEmailAction(context, listSendingEmails);
|
||||||
break;
|
break;
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
if (!isConnectedNetwork) {
|
_editSendingEmailAction(listSendingEmails.first);
|
||||||
_editSendingEmailAction(listSendingEmails.first);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SendingEmailActionType.create:
|
case SendingEmailActionType.create:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -94,7 +94,11 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
|
|||||||
onLongPressAction: controller.handleOnLongPressAction,
|
onLongPressAction: controller.handleOnLongPressAction,
|
||||||
onSelectLeadingAction: controller.toggleSelectionSendingEmail,
|
onSelectLeadingAction: controller.toggleSelectionSendingEmail,
|
||||||
onTapAction: (actionType, sendingEmail) {
|
onTapAction: (actionType, sendingEmail) {
|
||||||
if (!controller.isConnectedNetwork && sendingEmail.isEditableSupported) {
|
if (PlatformInfo.isAndroid &&
|
||||||
|
!controller.isConnectedNetwork &&
|
||||||
|
sendingEmail.isEditableSupported) {
|
||||||
|
controller.handleSendingEmailActionType(context, actionType, [sendingEmail]);
|
||||||
|
} else if (PlatformInfo.isIOS && sendingEmail.isEditableSupported) {
|
||||||
controller.handleSendingEmailActionType(context, actionType, [sendingEmail]);
|
controller.handleSendingEmailActionType(context, actionType, [sendingEmail]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import 'package:flutter/cupertino.dart';
|
|||||||
|
|
||||||
class SendingQueueUtils {
|
class SendingQueueUtils {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static EdgeInsets getMarginBannerMessageByResponsiveSize(double width) {
|
static EdgeInsets getMarginBannerMessageByResponsiveSize(double width) {
|
||||||
if (ResponsiveUtils.isMatchedMobileWidth(width)) {
|
if (ResponsiveUtils.isMatchedMobileWidth(width)) {
|
||||||
return const EdgeInsets.only(top: 16, left: 16, right: 16);
|
return const EdgeInsets.only(top: 16, left: 16, right: 16);
|
||||||
|
|||||||
Reference in New Issue
Block a user