TF-1915 SendingState of SendingEmail updates according to the work done in WorkManager when network connectivity is restored

(cherry picked from commit 744c8bc8dc8a82cb3afb75aead5a744adaae5501)
This commit is contained in:
dab246
2023-06-09 15:23:22 +07:00
committed by Dat Vu
parent 20168f5e8d
commit 6aa87ff012
51 changed files with 523 additions and 374 deletions
@@ -0,0 +1,4 @@
class NotFoundSendingEmailHiveObject implements Exception {}
class ExistSendingEmailHiveObject implements Exception {}
@@ -1,7 +1,7 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
class SendingQueueRepositoryImpl extends SendingQueueRepository {
@@ -16,7 +16,17 @@ class SendingQueueRepositoryImpl extends SendingQueueRepository {
}
@override
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) {
return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId);
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) {
return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen);
}
@override
Future<SendingEmail> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false}) {
return _emailHiveCacheDataSourceImpl.updateSendingEmail(accountId, userName, newSendingEmail, needToReopen: needToReopen);
}
@override
Future<SendingEmail> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
return _emailHiveCacheDataSourceImpl.storeSendingEmail(accountId, userName, sendingEmail);
}
}
@@ -0,0 +1,91 @@
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:model/extensions/email_id_extensions.dart';
import 'package:model/extensions/identity_id_extension.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart';
import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
extension SendingEmailExtension on SendingEmail {
SendingEmailHiveCache toHiveCache() {
return SendingEmailHiveCache(
sendingId,
email.asString(),
emailActionType.name,
createTime,
sentMailboxId?.asString,
emailIdDestroyed?.asString,
emailIdAnsweredOrForwarded?.asString,
identityId?.asString,
mailboxNameRequest?.name,
creationIdRequest?.value,
sendingState.name,
);
}
EmailRequest toEmailRequest({Email? newEmail}) {
return EmailRequest(
email: newEmail ?? email,
emailActionType: emailActionType,
sentMailboxId: sentMailboxId,
emailIdDestroyed: emailIdDestroyed,
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId,
storedSendingId: sendingId
);
}
SendingEmail toggleSelection() {
return SendingEmail(
sendingId: sendingId,
email: email,
emailActionType: emailActionType,
createTime: createTime,
sentMailboxId: sentMailboxId,
emailIdDestroyed: emailIdDestroyed,
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId,
mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: sendingState,
selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE
);
}
SendingEmail unSelected() {
return SendingEmail(
sendingId: sendingId,
email: email,
emailActionType: emailActionType,
createTime: createTime,
sentMailboxId: sentMailboxId,
emailIdDestroyed: emailIdDestroyed,
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId,
mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: sendingState,
selectMode: SelectMode.INACTIVE
);
}
SendingEmail updatingSendingState(SendingState newState) {
return SendingEmail(
sendingId: sendingId,
email: email,
emailActionType: emailActionType,
createTime: createTime,
sentMailboxId: sentMailboxId,
emailIdDestroyed: emailIdDestroyed,
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId,
mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: newState,
selectMode: selectMode
);
}
}
@@ -0,0 +1,121 @@
import 'dart:convert';
import 'package:core/domain/extensions/datetime_extension.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_date_range_picker/flutter_date_range_picker.dart';
import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/email_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart';
class SendingEmail with EquatableMixin {
final String sendingId;
final Email email;
final MailboxId? sentMailboxId;
final EmailId? emailIdDestroyed;
final EmailId? emailIdAnsweredOrForwarded;
final IdentityId? identityId;
final EmailActionType emailActionType;
final MailboxName? mailboxNameRequest;
final Id? creationIdRequest;
final DateTime createTime;
final SelectMode selectMode;
final SendingState sendingState;
SendingEmail({
required this.sendingId,
required this.email,
required this.emailActionType,
required this.createTime,
this.sentMailboxId,
this.emailIdDestroyed,
this.emailIdAnsweredOrForwarded,
this.identityId,
this.mailboxNameRequest,
this.creationIdRequest,
this.selectMode = SelectMode.INACTIVE,
this.sendingState = SendingState.ready
});
Map<String, dynamic> toJson() {
final val = <String, dynamic>{};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('sendingId', sendingId);
writeNotNull('email', email.asString());
writeNotNull('emailActionType', emailActionType.name);
writeNotNull('createTime', createTime.toIso8601String());
writeNotNull('sentMailboxId', const MailboxIdNullableConverter().toJson(sentMailboxId));
writeNotNull('emailIdDestroyed', const EmailIdNullableConverter().toJson(emailIdDestroyed));
writeNotNull('emailIdAnsweredOrForwarded', const EmailIdNullableConverter().toJson(emailIdAnsweredOrForwarded));
writeNotNull('identityId', const IdentityIdNullableConverter().toJson(identityId));
writeNotNull('mailboxNameRequest', mailboxNameRequest?.name);
writeNotNull('creationIdRequest', const IdNullableConverter().toJson(creationIdRequest));
return val;
}
PresentationEmail get presentationEmail => email.sendingEmailToPresentationEmail();
String getCreateTimeAt(String newLocale) {
return DateFormat(createTime.toPattern(), newLocale).format(createTime);
}
factory SendingEmail.fromJson(Map<String, dynamic> json) {
return SendingEmail(
sendingId: json['sendingId'] as String,
email: Email.fromJson(jsonDecode(json['email'])),
emailActionType: _getEmailActionType(json['emailActionType'] as String),
createTime: DateTime.parse(json['createTime'] as String),
sentMailboxId: const MailboxIdNullableConverter().fromJson(json['sentMailboxId'] as String?),
emailIdDestroyed: const EmailIdNullableConverter().fromJson(json['emailIdDestroyed'] as String?),
emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(json['emailIdAnsweredOrForwarded'] as String?),
identityId: const IdentityIdNullableConverter().fromJson(json['identityId'] as String?),
mailboxNameRequest: const MailboxNameConverter().fromJson(json['mailboxNameRequest'] as String?),
creationIdRequest: const IdNullableConverter().fromJson(json['creationIdRequest'] as String?),
);
}
static EmailActionType _getEmailActionType(String value) {
return EmailActionType.values.firstWhere(
(type) => type.name == value,
orElse: () => throw ArgumentError('Invalid email action type: $value'),
);
}
bool get isSelected => selectMode == SelectMode.ACTIVE;
bool get isDelivering => sendingState == SendingState.delivering;
bool get isReady => sendingState == SendingState.ready;
@override
List<Object?> get props => [
sendingId,
email,
emailActionType,
createTime,
sentMailboxId,
emailIdDestroyed,
emailIdAnsweredOrForwarded,
identityId,
mailboxNameRequest,
creationIdRequest,
selectMode,
sendingState,
];
}
@@ -1,10 +1,14 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
abstract class SendingQueueRepository {
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false});
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId);
Future<SendingEmail> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false});
Future<SendingEmail> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false});
}
@@ -0,0 +1,13 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class DeleteSendingEmailLoading extends UIState {}
class DeleteSendingEmailSuccess extends UIState {}
class DeleteSendingEmailFailure extends FeatureFailure {
DeleteSendingEmailFailure(dynamic exception) : super(exception: exception);
@override
List<Object?> get props => [exception];
}
@@ -1,7 +1,7 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
class GetAllSendingEmailLoading extends UIState {}
@@ -0,0 +1,23 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
class StoreSendingEmailLoading extends UIState {}
class StoreSendingEmailSuccess extends UIState {
final SendingEmail sendingEmail;
StoreSendingEmailSuccess(this.sendingEmail);
@override
List<Object?> get props => [sendingEmail];
}
class StoreSendingEmailFailure extends FeatureFailure {
StoreSendingEmailFailure(dynamic exception) : super(exception: exception);
@override
List<Object?> get props => [exception];
}
@@ -0,0 +1,23 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
class UpdateSendingEmailLoading extends UIState {}
class UpdateSendingEmailSuccess extends UIState {
final SendingEmail newSendingEmail;
UpdateSendingEmailSuccess(this.newSendingEmail);
@override
List<Object?> get props => [newSendingEmail];
}
class UpdateSendingEmailFailure extends FeatureFailure {
UpdateSendingEmailFailure(dynamic exception) : super(exception: exception);
@override
List<Object?> get props => [exception];
}
@@ -0,0 +1,23 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
class DeleteSendingEmailInteractor {
final SendingQueueRepository _sendingQueueRepository;
DeleteSendingEmailInteractor(this._sendingQueueRepository);
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) async* {
try {
yield Right<Failure, Success>(DeleteSendingEmailLoading());
await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen);
yield Right<Failure, Success>(DeleteSendingEmailSuccess());
} catch (e) {
yield Left<Failure, Success>(DeleteSendingEmailFailure(e));
}
}
}
@@ -0,0 +1,28 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
class StoreSendingEmailInteractor {
final SendingQueueRepository _sendingQueueRepository;
StoreSendingEmailInteractor(this._sendingQueueRepository);
Stream<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
SendingEmail sendingEmail,
) async* {
try {
yield Right<Failure, Success>(StoreSendingEmailLoading());
final storedSendingEmail = await _sendingQueueRepository.storeSendingEmail(accountId, userName, sendingEmail);
yield Right<Failure, Success>(StoreSendingEmailSuccess(storedSendingEmail));
} catch (e) {
yield Left<Failure, Success>(StoreSendingEmailFailure(e));
}
}
}
@@ -0,0 +1,29 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/state/update_sending_email_state.dart';
class UpdateSendingEmailInteractor {
final SendingQueueRepository _sendingQueueRepository;
UpdateSendingEmailInteractor(this._sendingQueueRepository);
Stream<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
SendingEmail newSendingEmail,
{bool needToReopen = false}
) async* {
try {
yield Right<Failure, Success>(UpdateSendingEmailLoading());
final storedSendingEmail = await _sendingQueueRepository.updateSendingEmail(accountId, userName, newSendingEmail, needToReopen: needToReopen);
yield Right<Failure, Success>(UpdateSendingEmailSuccess(storedSendingEmail));
} catch (e) {
yield Left<Failure, Success>(UpdateSendingEmailFailure(e));
}
}
}
@@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cac
import 'package:tmail_ui_user/features/sending_queue/data/repository/sending_queue_repository_impl.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.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/delete_single_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/offline_mode/manager/detailed_email_cache_manager.dart';
@@ -13,6 +14,8 @@ import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.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/thread/data/local/email_cache_manager.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
@@ -36,9 +39,12 @@ class SendingQueueInteractorBindings extends InteractorsBindings {
@override
void bindingsInteractor() {
Get.lazyPut(() => StoreSendingEmailInteractor(Get.find<SendingQueueRepository>()));
Get.lazyPut(() => GetAllSendingEmailInteractor(Get.find<SendingQueueRepository>()));
Get.lazyPut(() => DeleteSingleSendingEmailInteractor(Get.find<SendingQueueRepository>()));
Get.lazyPut(() => DeleteMultipleSendingEmailInteractor(Get.find<DeleteSingleSendingEmailInteractor>()));
Get.lazyPut(() => DeleteSendingEmailInteractor(Get.find<SendingQueueRepository>()));
Get.lazyPut(() => UpdateSendingEmailInteractor(Get.find<SendingQueueRepository>()));
}
@override
@@ -1,6 +1,6 @@
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
extension ListSendingEmailExtension on List<SendingEmail> {
List<SendingEmail> toggleSelection({required SendingEmail sendingEmailSelected}) =>
@@ -1,9 +1,10 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum SendingEmailActionType {
create,
edit,
delete;
@@ -13,6 +14,8 @@ enum SendingEmailActionType {
return AppLocalizations.of(context).delete;
case SendingEmailActionType.edit:
return AppLocalizations.of(context).edit;
case SendingEmailActionType.create:
return '';
}
}
@@ -22,6 +25,8 @@ enum SendingEmailActionType {
return 'button_delete_sending_email';
case SendingEmailActionType.edit:
return 'button_edit_sending_email';
case SendingEmailActionType.create:
return '';
}
}
@@ -31,6 +36,8 @@ enum SendingEmailActionType {
return AppColor.colorDeletePermanentlyButton;
case SendingEmailActionType.edit:
return AppColor.primaryColor;
case SendingEmailActionType.create:
return Colors.transparent;
}
}
@@ -40,6 +47,8 @@ enum SendingEmailActionType {
return AppColor.colorDeletePermanentlyButton;
case SendingEmailActionType.edit:
return AppColor.primaryColor;
case SendingEmailActionType.create:
return Colors.transparent;
}
}
}
@@ -0,0 +1,33 @@
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
class SendingEmailArguments extends RouterArguments {
final Session session;
final AccountId accountId;
final EmailRequest emailRequest;
final CreateNewMailboxRequest? mailboxRequest;
final SendingEmailActionType sendingEmailActionType;
SendingEmailArguments(
this.session,
this.accountId,
this.emailRequest,
this.mailboxRequest,
{
this.sendingEmailActionType = SendingEmailActionType.create
}
);
@override
List<Object?> get props => [
session,
accountId,
emailRequest,
mailboxRequest,
sendingEmailActionType
];
}
@@ -13,10 +13,11 @@ import 'package:model/extensions/list_email_content_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_state.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/controller/work_scheduler_controller.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart';
@@ -31,6 +32,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
final DeleteMultipleSendingEmailInteractor _deleteMultipleSendingEmailInteractor;
final dashboardController = getBinding<MailboxDashBoardController>();
final _networkConnectionController = getBinding<NetworkConnectionController>();
final _sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
final _imagePaths = getBinding<ImagePaths>();
final _appToast = getBinding<AppToast>();
@@ -112,10 +114,12 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
_deleteSendingEmailAction(context, listSendingEmails);
break;
case SendingEmailActionType.edit:
if (dashboardController?.networkConnectionController.isNetworkConnectionAvailable() == false) {
if (_networkConnectionController?.isNetworkConnectionAvailable() == false) {
_editSendingEmailAction(listSendingEmails.first);
}
break;
case SendingEmailActionType.create:
break;
}
}
@@ -174,7 +178,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
_appToast!.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).deleteSomeOfflineEmailSuccessfully
AppLocalizations.of(currentContext!).messageHaveBeenDeletedSuccessfully
);
_refreshSendingQueue();
@@ -182,6 +186,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
}
void _editSendingEmailAction(SendingEmail sendingEmail) {
disableSelectionMode();
final arguments = ComposerArguments(
emailActionType: EmailActionType.edit,
presentationEmail: sendingEmail.presentationEmail,
@@ -1,7 +1,7 @@
import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
class SendingQueueUtils {
@@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/composer/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/presentation/utils/sending_queue_utils.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
@@ -4,7 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/button_builder.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/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/presentation/extensions/list_sending_email_extension.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
@@ -9,7 +9,7 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/composer/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/presentation/model/sending_email_action_type.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_utils.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/widgets/sending_state_widget.dart';