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:
@@ -116,7 +116,7 @@ class CachingManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _clearSendingEmailCache() async {
|
Future<void> _clearSendingEmailCache() async {
|
||||||
final listSendingEmails = await _sendingEmailCacheManager.getAllSendingEmails();
|
final listSendingEmails = await _sendingEmailCacheManager.getAllSendingEmails(needToReopen: true);
|
||||||
final sendingIds = listSendingEmails.map((sendingEmail) => sendingEmail.sendingId).toSet().toList();
|
final sendingIds = listSendingEmails.map((sendingEmail) => sendingEmail.sendingId).toSet().toList();
|
||||||
if (sendingIds.isNotEmpty) {
|
if (sendingIds.isNotEmpty) {
|
||||||
await Future.wait(
|
await Future.wait(
|
||||||
|
|||||||
@@ -131,8 +131,12 @@ abstract class HiveCacheClient<T> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteItem(String key) {
|
Future<void> deleteItem(String key, {bool needToReopen = false}) {
|
||||||
return Future.sync(() async {
|
return Future.sync(() async {
|
||||||
|
if (needToReopen) {
|
||||||
|
await closeBox();
|
||||||
|
}
|
||||||
|
|
||||||
final boxItem = encryption
|
final boxItem = encryption
|
||||||
? await openBoxEncryption()
|
? await openBoxEncryption()
|
||||||
: await openBox();
|
: await openBox();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||||
|
|
||||||
extension EmailRequestExtension on EmailRequest {
|
extension EmailRequestExtension on EmailRequest {
|
||||||
SendingEmail toSendingEmail(String sendingId, {CreateNewMailboxRequest? mailboxRequest}) {
|
SendingEmail toSendingEmail(String sendingId, {CreateNewMailboxRequest? mailboxRequest}) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class EmailRequest with EquatableMixin {
|
|||||||
final EmailId? emailIdAnsweredOrForwarded;
|
final EmailId? emailIdAnsweredOrForwarded;
|
||||||
final IdentityId? identityId;
|
final IdentityId? identityId;
|
||||||
final EmailActionType emailActionType;
|
final EmailActionType emailActionType;
|
||||||
|
final String? storedSendingId;
|
||||||
|
|
||||||
EmailRequest({
|
EmailRequest({
|
||||||
required this.email,
|
required this.email,
|
||||||
@@ -21,6 +22,7 @@ class EmailRequest with EquatableMixin {
|
|||||||
this.identityId,
|
this.identityId,
|
||||||
this.emailIdDestroyed,
|
this.emailIdDestroyed,
|
||||||
this.emailIdAnsweredOrForwarded,
|
this.emailIdAnsweredOrForwarded,
|
||||||
|
this.storedSendingId,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -30,7 +32,8 @@ class EmailRequest with EquatableMixin {
|
|||||||
identityId,
|
identityId,
|
||||||
emailIdDestroyed,
|
emailIdDestroyed,
|
||||||
emailIdAnsweredOrForwarded,
|
emailIdAnsweredOrForwarded,
|
||||||
emailActionType
|
emailActionType,
|
||||||
|
storedSendingId,
|
||||||
];
|
];
|
||||||
|
|
||||||
bool get isEmailAnswered => emailIdAnsweredOrForwarded != null &&
|
bool get isEmailAnswered => emailIdAnsweredOrForwarded != null &&
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||||
|
|
||||||
class SendingEmailState extends UIState {
|
class SendEmailLoading extends UIState {}
|
||||||
SendingEmailState();
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class SendEmailSuccess extends UIActionState {
|
class SendEmailSuccess extends UIActionState {
|
||||||
|
|
||||||
@@ -21,9 +17,8 @@ class SendEmailSuccess extends UIActionState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SendEmailFailure extends FeatureFailure {
|
class SendEmailFailure extends FeatureFailure {
|
||||||
final dynamic exception;
|
|
||||||
|
|
||||||
SendEmailFailure(this.exception);
|
SendEmailFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [exception];
|
List<Object?> get props => [exception];
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class SendEmailInteractor {
|
|||||||
{CreateNewMailboxRequest? mailboxRequest}
|
{CreateNewMailboxRequest? mailboxRequest}
|
||||||
) async* {
|
) async* {
|
||||||
try {
|
try {
|
||||||
yield Right<Failure, Success>(SendingEmailState());
|
yield Right<Failure, Success>(SendEmailLoading());
|
||||||
|
|
||||||
final listState = await Future.wait([
|
final listState = await Future.wait([
|
||||||
_mailboxRepository.getMailboxState(session, accountId),
|
_mailboxRepository.getMailboxState(session, accountId),
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
|||||||
import 'package:rich_text_composer/rich_text_composer.dart';
|
import 'package:rich_text_composer/rich_text_composer.dart';
|
||||||
import 'package:super_tag_editor/tag_editor.dart';
|
import 'package:super_tag_editor/tag_editor.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
|
||||||
@@ -49,7 +48,6 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/email_ac
|
|||||||
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/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/model/sending_email_arguments.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||||
@@ -61,6 +59,9 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_ident
|
|||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.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/model/sending_email_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/domain/model/upload_task_id.dart';
|
import 'package:tmail_ui_user/features/upload/domain/model/upload_task_id.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/domain/state/attachment_upload_state.dart';
|
import 'package:tmail_ui_user/features/upload/domain/state/attachment_upload_state.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/domain/state/local_file_picker_state.dart';
|
import 'package:tmail_ui_user/features/upload/domain/state/local_file_picker_state.dart';
|
||||||
@@ -615,8 +616,7 @@ class ComposerController extends BaseController {
|
|||||||
{
|
{
|
||||||
bool asDrafts = false,
|
bool asDrafts = false,
|
||||||
MailboxId? draftMailboxId,
|
MailboxId? draftMailboxId,
|
||||||
MailboxId? outboxMailboxId,
|
MailboxId? outboxMailboxId
|
||||||
ComposerArguments? arguments
|
|
||||||
}
|
}
|
||||||
) async {
|
) async {
|
||||||
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userProfile.email)};
|
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userProfile.email)};
|
||||||
@@ -663,10 +663,7 @@ class ComposerController extends BaseController {
|
|||||||
|
|
||||||
final generatePartId = PartId(_uuid.v1());
|
final generatePartId = PartId(_uuid.v1());
|
||||||
|
|
||||||
final isUpdateSendingEmail = arguments?.sendingEmail != null;
|
|
||||||
|
|
||||||
return Email(
|
return Email(
|
||||||
id: isUpdateSendingEmail ? EmailId(Id(arguments!.sendingEmail!.sendingId)) : null,
|
|
||||||
mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null,
|
mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null,
|
||||||
from: listFromEmailAddress,
|
from: listFromEmailAddress,
|
||||||
to: listToEmailAddress.toSet(),
|
to: listToEmailAddress.toSet(),
|
||||||
@@ -804,11 +801,11 @@ class ComposerController extends BaseController {
|
|||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
final userProfile = mailboxDashBoardController.userProfile.value;
|
||||||
|
|
||||||
if (arguments != null && accountId != null && userProfile != null && session != null) {
|
if (arguments != null && accountId != null && userProfile != null && session != null) {
|
||||||
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId, arguments: arguments);
|
final createdEmail = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId);
|
||||||
final emailRequest = arguments.sendingEmail != null
|
final emailRequest = arguments.sendingEmail != null
|
||||||
? arguments.sendingEmail!.toEmailRequest(emailEdit: email)
|
? arguments.sendingEmail!.toEmailRequest(newEmail: createdEmail)
|
||||||
: EmailRequest(
|
: EmailRequest(
|
||||||
email: email,
|
email: createdEmail,
|
||||||
sentMailboxId: sentMailboxId,
|
sentMailboxId: sentMailboxId,
|
||||||
identityId: identitySelected.value?.id,
|
identityId: identitySelected.value?.id,
|
||||||
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
|
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
|
||||||
@@ -826,7 +823,9 @@ class ComposerController extends BaseController {
|
|||||||
accountId,
|
accountId,
|
||||||
emailRequest,
|
emailRequest,
|
||||||
mailboxRequest,
|
mailboxRequest,
|
||||||
isUpdateSendingEmail: arguments.sendingEmail != null,
|
sendingEmailActionType: arguments.sendingEmail != null
|
||||||
|
? SendingEmailActionType.edit
|
||||||
|
: SendingEmailActionType.create,
|
||||||
);
|
);
|
||||||
uploadController.clearInlineFileUploaded();
|
uploadController.clearInlineFileUploaded();
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ import 'package:model/email/attachment.dart';
|
|||||||
import 'package:model/email/mark_star_action.dart';
|
import 'package:model/email/mark_star_action.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||||
|
|
||||||
abstract class EmailDataSource {
|
abstract class EmailDataSource {
|
||||||
Future<Email> getEmailContent(Session session, AccountId accountId, EmailId emailId);
|
Future<Email> getEmailContent(Session session, AccountId accountId, EmailId emailId);
|
||||||
@@ -90,9 +90,9 @@ abstract class EmailDataSource {
|
|||||||
|
|
||||||
Future<DetailedEmail?> getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId);
|
Future<DetailedEmail?> getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId);
|
||||||
|
|
||||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
Future<SendingEmail> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
||||||
|
|
||||||
Future<void> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
Future<SendingEmail> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail);
|
||||||
|
|
||||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName);
|
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName);
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
class EmailDataSourceImpl extends EmailDataSource {
|
class EmailDataSourceImpl extends EmailDataSource {
|
||||||
@@ -190,7 +190,7 @@ class EmailDataSourceImpl extends EmailDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
Future<SendingEmail> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ class EmailDataSourceImpl extends EmailDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
Future<SendingEmail> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail) {
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,9 +21,7 @@ import 'package:model/email/mark_star_action.dart';
|
|||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:model/extensions/email_id_extensions.dart';
|
import 'package:model/extensions/email_id_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
|
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_extension.dart';
|
import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_hive_cache_extension.dart';
|
import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_hive_cache_extension.dart';
|
||||||
@@ -31,11 +29,14 @@ import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
|||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
|
||||||
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_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/opened_email_cache_worker_queue.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';
|
||||||
import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart';
|
import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
|
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
|
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
|
||||||
@@ -247,9 +248,10 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
Future<SendingEmail> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
||||||
return Future.sync(() async {
|
return Future.sync(() async {
|
||||||
return await _sendingEmailCacheManager.storeSendingEmail(accountId, userName, sendingEmail.toHiveCache());
|
final sendingEmailsCache = await _sendingEmailCacheManager.storeSendingEmail(accountId, userName, sendingEmail.toHiveCache());
|
||||||
|
return sendingEmailsCache.toSendingEmail();
|
||||||
}).catchError(_exceptionThrower.throwException);
|
}).catchError(_exceptionThrower.throwException);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,16 +264,17 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) {
|
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) {
|
||||||
return Future.sync(() async {
|
return Future.sync(() async {
|
||||||
return await _sendingEmailCacheManager.deleteSendingEmail(accountId, userName, sendingId);
|
return await _sendingEmailCacheManager.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen);
|
||||||
}).catchError(_exceptionThrower.throwException);
|
}).catchError(_exceptionThrower.throwException);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) {
|
Future<SendingEmail> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail, {bool needToReopen = false}) {
|
||||||
return Future.sync(() async {
|
return Future.sync(() async {
|
||||||
return await _sendingEmailCacheManager.updateSendingEmail(accountId, userName, sendingEmail.toHiveCache());
|
final sendingEmailsCache = await _sendingEmailCacheManager.updateSendingEmail(accountId, userName, newSendingEmail.toHiveCache(), needToReopen: needToReopen);
|
||||||
|
return sendingEmailsCache.toSendingEmail();
|
||||||
}).catchError(_exceptionThrower.throwException);
|
}).catchError(_exceptionThrower.throwException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,6 @@ import 'package:dio/dio.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
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/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/account/account_request.dart';
|
import 'package:model/account/account_request.dart';
|
||||||
import 'package:model/download/download_task_id.dart';
|
import 'package:model/download/download_task_id.dart';
|
||||||
@@ -20,7 +19,6 @@ import 'package:model/email/email_content.dart';
|
|||||||
import 'package:model/email/mark_star_action.dart';
|
import 'package:model/email/mark_star_action.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
@@ -221,28 +219,4 @@ class EmailRepositoryImpl extends EmailRepository {
|
|||||||
Future<Email?> getEmailStored(Session session, AccountId accountId, EmailId emailId) {
|
Future<Email?> getEmailStored(Session session, AccountId accountId, EmailId emailId) {
|
||||||
return emailDataSource[DataSourceType.hiveCache]!.getEmailStored(session, accountId, emailId);
|
return emailDataSource[DataSourceType.hiveCache]!.getEmailStored(session, accountId, emailId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> storeSendingEmail(
|
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail
|
|
||||||
) {
|
|
||||||
return emailDataSource[DataSourceType.hiveCache]!.storeSendingEmail(accountId, userName, sendingEmail);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> updateSendingEmail(
|
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail
|
|
||||||
) async {
|
|
||||||
return emailDataSource[DataSourceType.hiveCache]!.updateSendingEmail(accountId, userName, sendingEmail);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) {
|
|
||||||
return emailDataSource[DataSourceType.hiveCache]!.deleteSendingEmail(accountId, userName, sendingId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@ import 'package:dartz/dartz.dart';
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
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/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:model/account/account_request.dart';
|
import 'package:model/account/account_request.dart';
|
||||||
@@ -18,7 +17,6 @@ import 'package:model/email/email_content.dart';
|
|||||||
import 'package:model/email/mark_star_action.dart';
|
import 'package:model/email/mark_star_action.dart';
|
||||||
import 'package:model/email/read_actions.dart';
|
import 'package:model/email/read_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
@@ -101,10 +99,4 @@ abstract class EmailRepository {
|
|||||||
Future<void> storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail);
|
Future<void> storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail);
|
||||||
|
|
||||||
Future<DetailedEmail?> getOpenedEmail(Session session, AccountId accountId, EmailId emailId);
|
Future<DetailedEmail?> getOpenedEmail(Session session, AccountId accountId, EmailId emailId);
|
||||||
|
|
||||||
Future<void> storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
|
||||||
|
|
||||||
Future<void> updateSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail);
|
|
||||||
|
|
||||||
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId);
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.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 StoreSendingEmailLoading extends UIState {}
|
class StoreSendingEmailLoading extends UIState {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
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/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/update_sending_email_state.dart';
|
|
||||||
|
|
||||||
class StoreSendingEmailInteractor {
|
|
||||||
final EmailRepository _emailRepository;
|
|
||||||
|
|
||||||
StoreSendingEmailInteractor(this._emailRepository);
|
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(
|
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail,
|
|
||||||
) async* {
|
|
||||||
try {
|
|
||||||
yield Right<Failure, Success>(UpdateSendingEmailLoading());
|
|
||||||
await _emailRepository.storeSendingEmail(accountId, userName, sendingEmail);
|
|
||||||
yield Right<Failure, Success>(UpdateSendingEmailSuccess(sendingEmail));
|
|
||||||
} catch (e) {
|
|
||||||
yield Left<Failure, Success>(UpdateSendingEmailFailure(e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
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/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
|
|
||||||
|
|
||||||
class UpdateSendingEmailInteractor {
|
|
||||||
final EmailRepository _emailRepository;
|
|
||||||
|
|
||||||
UpdateSendingEmailInteractor(this._emailRepository);
|
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(
|
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail,
|
|
||||||
) async* {
|
|
||||||
try {
|
|
||||||
yield Right<Failure, Success>(StoreSendingEmailLoading());
|
|
||||||
await _emailRepository.updateSendingEmail(accountId, userName, sendingEmail);
|
|
||||||
yield Right<Failure, Success>(StoreSendingEmailSuccess(sendingEmail));
|
|
||||||
} catch (e) {
|
|
||||||
yield Left<Failure, Success>(StoreSendingEmailFailure(e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
import 'package:receive_sharing_intent/receive_sharing_intent.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/main/routes/router_arguments.dart';
|
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||||
|
|
||||||
class ComposerArguments extends RouterArguments {
|
class ComposerArguments extends RouterArguments {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import 'package:core/utils/platform_info.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.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/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,4 +1,3 @@
|
|||||||
import 'package:core/core.dart';
|
|
||||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||||
import 'package:core/data/network/dio_client.dart';
|
import 'package:core/data/network/dio_client.dart';
|
||||||
import 'package:core/utils/config/app_config_loader.dart';
|
import 'package:core/utils/config/app_config_loader.dart';
|
||||||
@@ -10,7 +9,6 @@ import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart';
|
|||||||
import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
|
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
|
||||||
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/email/domain/usecases/store_sending_email_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
|
||||||
@@ -105,6 +103,8 @@ import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller_bin
|
|||||||
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/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/update_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_bindings.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/sending_queue_controller.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/sending_queue_controller.dart';
|
||||||
@@ -179,6 +179,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<GetEmailByIdInteractor>(),
|
Get.find<GetEmailByIdInteractor>(),
|
||||||
Get.find<SendEmailInteractor>(),
|
Get.find<SendEmailInteractor>(),
|
||||||
Get.find<StoreSendingEmailInteractor>(),
|
Get.find<StoreSendingEmailInteractor>(),
|
||||||
|
Get.find<UpdateSendingEmailInteractor>(),
|
||||||
Get.find<GetAllSendingEmailInteractor>(),
|
Get.find<GetAllSendingEmailInteractor>(),
|
||||||
Get.find<StoreSessionInteractor>(),
|
Get.find<StoreSessionInteractor>(),
|
||||||
));
|
));
|
||||||
@@ -333,7 +334,6 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<EmailRepository>(),
|
Get.find<EmailRepository>(),
|
||||||
Get.find<MailboxRepository>()
|
Get.find<MailboxRepository>()
|
||||||
));
|
));
|
||||||
Get.lazyPut(() => StoreSendingEmailInteractor(Get.find<EmailRepository>()));
|
|
||||||
SendingQueueInteractorBindings().dependencies();
|
SendingQueueInteractorBindings().dependencies();
|
||||||
Get.lazyPut(() => StoreSessionInteractor(Get.find<SessionRepository>()));
|
Get.lazyPut(() => StoreSessionInteractor(Get.find<SessionRepository>()));
|
||||||
}
|
}
|
||||||
|
|||||||
+94
-97
@@ -14,7 +14,6 @@ import 'package:jmap_dart_client/jmap/core/capability/mail_capability.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
|
import 'package:jmap_dart_client/jmap/core/error/set_error.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
||||||
@@ -27,15 +26,11 @@ import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dar
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart';
|
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
|
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
|
||||||
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/presentation/model/sending_email_arguments.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/email/domain/state/update_sending_email_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_sending_email_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
@@ -100,8 +95,14 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_ema
|
|||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_mailbox_state_to_refresh_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.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/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/update_sending_email_interactor.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/model/sending_email_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
|
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
@@ -156,6 +157,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final GetEmailByIdInteractor _getEmailByIdInteractor;
|
final GetEmailByIdInteractor _getEmailByIdInteractor;
|
||||||
final SendEmailInteractor _sendEmailInteractor;
|
final SendEmailInteractor _sendEmailInteractor;
|
||||||
final StoreSendingEmailInteractor _storeSendingEmailInteractor;
|
final StoreSendingEmailInteractor _storeSendingEmailInteractor;
|
||||||
|
final UpdateSendingEmailInteractor _updateSendingEmailInteractor;
|
||||||
final GetAllSendingEmailInteractor _getAllSendingEmailInteractor;
|
final GetAllSendingEmailInteractor _getAllSendingEmailInteractor;
|
||||||
final StoreSessionInteractor _storeSessionInteractor;
|
final StoreSessionInteractor _storeSessionInteractor;
|
||||||
|
|
||||||
@@ -228,6 +230,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
this._getEmailByIdInteractor,
|
this._getEmailByIdInteractor,
|
||||||
this._sendEmailInteractor,
|
this._sendEmailInteractor,
|
||||||
this._storeSendingEmailInteractor,
|
this._storeSendingEmailInteractor,
|
||||||
|
this._updateSendingEmailInteractor,
|
||||||
this._getAllSendingEmailInteractor,
|
this._getAllSendingEmailInteractor,
|
||||||
this._storeSessionInteractor,
|
this._storeSessionInteractor,
|
||||||
) : super(
|
) : super(
|
||||||
@@ -279,7 +282,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
super.handleSuccessViewState(success);
|
super.handleSuccessViewState(success);
|
||||||
if (success is SendingEmailState) {
|
if (success is SendEmailLoading) {
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
_appToast.showToastMessage(
|
_appToast.showToastMessage(
|
||||||
currentOverlayContext!,
|
currentOverlayContext!,
|
||||||
@@ -1204,7 +1207,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
result.accountId,
|
result.accountId,
|
||||||
result.emailRequest,
|
result.emailRequest,
|
||||||
result.mailboxRequest,
|
result.mailboxRequest,
|
||||||
isUpdateSendingEmail: result.isUpdateSendingEmail
|
result.sendingEmailActionType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1327,7 +1330,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
result.accountId,
|
result.accountId,
|
||||||
result.emailRequest,
|
result.emailRequest,
|
||||||
result.mailboxRequest,
|
result.mailboxRequest,
|
||||||
isUpdateSendingEmail: result.isUpdateSendingEmail ?? false,
|
result.sendingEmailActionType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1761,7 +1764,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
EmailRequest emailRequest,
|
EmailRequest emailRequest,
|
||||||
CreateNewMailboxRequest? mailboxRequest,
|
CreateNewMailboxRequest? mailboxRequest,
|
||||||
{bool? isUpdateSendingEmail = false}
|
SendingEmailActionType sendingEmailActionType
|
||||||
) {
|
) {
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
if (networkConnectionController.isNetworkConnectionAvailable()) {
|
if (networkConnectionController.isNetworkConnectionAvailable()) {
|
||||||
@@ -1772,11 +1775,13 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
mailboxRequest: mailboxRequest
|
mailboxRequest: mailboxRequest
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
if (currentContext != null && isUpdateSendingEmail == false) {
|
_handleSendingEmailWhenNoNetwork(
|
||||||
_showActionSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
session,
|
||||||
} else {
|
accountId,
|
||||||
_handleUpdateSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
emailRequest,
|
||||||
}
|
mailboxRequest,
|
||||||
|
sendingEmailActionType
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
consumeState(_sendEmailInteractor.execute(
|
consumeState(_sendEmailInteractor.execute(
|
||||||
@@ -1788,104 +1793,104 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleSendingEmailWhenNoNetwork(
|
||||||
|
Session session,
|
||||||
|
AccountId accountId,
|
||||||
|
EmailRequest emailRequest,
|
||||||
|
CreateNewMailboxRequest? mailboxRequest,
|
||||||
|
SendingEmailActionType sendingEmailActionType
|
||||||
|
) {
|
||||||
|
switch(sendingEmailActionType) {
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
_showConfirmDialogStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||||
|
break;
|
||||||
|
case SendingEmailActionType.edit:
|
||||||
|
_handleUpdateSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||||
|
break;
|
||||||
|
case SendingEmailActionType.delete:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _handleStoreSendingEmail(
|
void _handleStoreSendingEmail(
|
||||||
Session session,
|
Session session,
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
EmailRequest emailRequest,
|
EmailRequest emailRequest,
|
||||||
CreateNewMailboxRequest? mailboxRequest,
|
CreateNewMailboxRequest? mailboxRequest,
|
||||||
) {
|
) {
|
||||||
final currentEmailId = emailRequest.email.id?.id.value;
|
final sendingEmail = emailRequest.toSendingEmail(_uuid.v1(), mailboxRequest: mailboxRequest);
|
||||||
final sendingEmail = emailRequest.toSendingEmail(
|
consumeState(_storeSendingEmailInteractor.execute(
|
||||||
emailRequest.email.id != null ? currentEmailId! : _uuid.v1(),
|
accountId,
|
||||||
mailboxRequest: mailboxRequest
|
session.username,
|
||||||
);
|
sendingEmail
|
||||||
_storeSendingEmail(accountId, session.username, sendingEmail);
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleUpdateSendingEmail(
|
void _handleUpdateSendingEmail(
|
||||||
Session session,
|
Session session,
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
EmailRequest emailRequest,
|
EmailRequest emailRequest,
|
||||||
CreateNewMailboxRequest? mailboxRequest,
|
CreateNewMailboxRequest? mailboxRequest,
|
||||||
) {
|
) {
|
||||||
final currentEmailId = emailRequest.email.id?.id.value;
|
final storedSendingId = emailRequest.storedSendingId;
|
||||||
final sendingEmail = emailRequest.toSendingEmail(
|
if (storedSendingId != null) {
|
||||||
emailRequest.email.id != null ? currentEmailId! : _uuid.v1(),
|
final sendingEmail = emailRequest.toSendingEmail(storedSendingId, mailboxRequest: mailboxRequest);
|
||||||
mailboxRequest: mailboxRequest
|
consumeState(_updateSendingEmailInteractor.execute(
|
||||||
);
|
accountId,
|
||||||
_updateSendingEmail(accountId, session.username, sendingEmail);
|
session.username,
|
||||||
|
sendingEmail
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
logError('MailboxDashBoardController::_handleUpdateSendingEmail(): StoredSendingId is null');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showActionSendingEmail(
|
void _showConfirmDialogStoreSendingEmail(
|
||||||
Session session,
|
Session session,
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
EmailRequest emailRequest,
|
EmailRequest emailRequest,
|
||||||
CreateNewMailboxRequest? mailboxRequest
|
CreateNewMailboxRequest? mailboxRequest
|
||||||
) {
|
) {
|
||||||
showConfirmDialogAction(
|
showConfirmDialogAction(
|
||||||
currentContext!,
|
currentContext!,
|
||||||
'',
|
'',
|
||||||
AppLocalizations.of(currentContext!).proceed,
|
AppLocalizations.of(currentContext!).proceed,
|
||||||
onConfirmAction: () {
|
onConfirmAction: () {
|
||||||
_handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
_handleStoreSendingEmail(session, accountId, emailRequest, mailboxRequest);
|
||||||
},
|
},
|
||||||
title: AppLocalizations.of(currentContext!).youAreInOfflineMode,
|
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(
|
||||||
|
color: AppColor.colorTitleSendingItem,
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.normal
|
||||||
|
),
|
||||||
|
listTextSpan: [
|
||||||
|
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
|
||||||
|
TextSpan(
|
||||||
|
text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailSecond,
|
||||||
|
style: const TextStyle(
|
||||||
color: AppColor.colorTitleSendingItem,
|
color: AppColor.colorTitleSendingItem,
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
fontWeight: FontWeight.normal
|
fontWeight: FontWeight.w600
|
||||||
|
),
|
||||||
),
|
),
|
||||||
listTextSpan: [
|
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailThird),
|
||||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailFirst),
|
TextSpan(
|
||||||
TextSpan(
|
text: AppLocalizations.of(currentContext!).sendingQueue,
|
||||||
text: AppLocalizations.of(currentContext!).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(
|
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
|
||||||
text: AppLocalizations.of(currentContext!).sendingQueue,
|
]
|
||||||
style: const TextStyle(
|
|
||||||
color: AppColor.colorTitleSendingItem,
|
|
||||||
fontSize: 15,
|
|
||||||
fontWeight: FontWeight.w600
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TextSpan(text: AppLocalizations.of(currentContext!).messageDialogWhenStoreSendingEmailTail)
|
|
||||||
]
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _storeSendingEmail(
|
void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) {
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail,
|
|
||||||
) {
|
|
||||||
log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail');
|
|
||||||
consumeState(_storeSendingEmailInteractor.execute(
|
|
||||||
accountId,
|
|
||||||
userName,
|
|
||||||
sendingEmail));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _updateSendingEmail(
|
|
||||||
AccountId accountId,
|
|
||||||
UserName userName,
|
|
||||||
SendingEmail sendingEmail
|
|
||||||
) {
|
|
||||||
log('MailboxDashBoardController::_storeSendingEmail():sendingEmail: $sendingEmail');
|
|
||||||
consumeState(_storeSendingEmailInteractor.execute(
|
|
||||||
accountId,
|
|
||||||
userName,
|
|
||||||
sendingEmail));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleStoreSendingEmailSuccess(StoreSendingEmailSuccess success) async {
|
|
||||||
_addSendingEmailToSendingQueue(success.sendingEmail);
|
_addSendingEmailToSendingQueue(success.sendingEmail);
|
||||||
getAllSendingEmails();
|
getAllSendingEmails();
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
@@ -1898,19 +1903,11 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _handleUpdateSendingEmailSuccess(UpdateSendingEmailSuccess success) async {
|
void _handleUpdateSendingEmailSuccess(UpdateSendingEmailSuccess success) async {
|
||||||
_cancelSendingEmailToSendingQueue(success.sendingEmail);
|
await WorkSchedulerController().cancelByUniqueId(success.newSendingEmail.sendingId);
|
||||||
_addSendingEmailToSendingQueue(success.sendingEmail);
|
_addSendingEmailToSendingQueue(success.newSendingEmail);
|
||||||
getAllSendingEmails();
|
getAllSendingEmails();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _cancelSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
|
|
||||||
try {
|
|
||||||
await WorkSchedulerController().cancelByUniqueId(sendingEmail.sendingId);
|
|
||||||
} catch (e) {
|
|
||||||
logError('MailboxDashBoardController::_cancelSendingEmailToSendingQueue(): EXCEPTION: $e');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
|
void _addSendingEmailToSendingQueue(SendingEmail sendingEmail) async {
|
||||||
log('MailboxDashBoardController::_addSendingEmailToSendingQueue():sendingEmail: $sendingEmail');
|
log('MailboxDashBoardController::_addSendingEmailToSendingQueue():sendingEmail: $sendingEmail');
|
||||||
final worker = worker_scheduler.Worker(
|
final worker = worker_scheduler.Worker(
|
||||||
|
|||||||
+2
-7
@@ -14,7 +14,6 @@ import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
|||||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/delete_sending_email_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
|
||||||
@@ -34,7 +33,7 @@ import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dar
|
|||||||
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
|
|
||||||
class SendingEmailBindings extends InteractorsBindings {
|
class SendEmailInteractorBindings extends InteractorsBindings {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsDataSource() {
|
void bindingsDataSource() {
|
||||||
@@ -76,11 +75,7 @@ class SendingEmailBindings extends InteractorsBindings {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsInteractor() {
|
void bindingsInteractor() {
|
||||||
Get.lazyPut(() => SendEmailInteractor(
|
Get.lazyPut(() => SendEmailInteractor(Get.find<EmailRepository>(), Get.find<MailboxRepository>()));
|
||||||
Get.find<EmailRepository>(),
|
|
||||||
Get.find<MailboxRepository>()
|
|
||||||
));
|
|
||||||
Get.lazyPut(() => DeleteSendingEmailInteractor(Get.find<EmailRepository>()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -1,3 +1 @@
|
|||||||
class UnableToGetDataFromInWorkManagerException implements Exception {}
|
class CannotCompleteTaskInWorkManagerException implements Exception {}
|
||||||
|
|
||||||
class UnableBindingInWorkManagerException implements Exception {}
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/core/extensions/date_time_extension.dart';
|
import 'package:jmap_dart_client/jmap/core/extensions/date_time_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart';
|
import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.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_email_hive_cache.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||||
|
|
||||||
extension ListSendingEmailHiveCacheExtension on List<SendingEmailHiveCache> {
|
extension ListSendingEmailHiveCacheExtension on List<SendingEmailHiveCache> {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.da
|
|||||||
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
|
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/email/email_action_type.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.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_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 SendingEmailHiveCacheExtension on SendingEmailHiveCache {
|
extension SendingEmailHiveCacheExtension on SendingEmailHiveCache {
|
||||||
|
|
||||||
@@ -24,7 +25,8 @@ extension SendingEmailHiveCacheExtension on SendingEmailHiveCache {
|
|||||||
emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(emailIdAnsweredOrForwarded),
|
emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(emailIdAnsweredOrForwarded),
|
||||||
identityId: const IdentityIdNullableConverter().fromJson(identityId),
|
identityId: const IdentityIdNullableConverter().fromJson(identityId),
|
||||||
mailboxNameRequest: const MailboxNameConverter().fromJson(mailboxNameRequest),
|
mailboxNameRequest: const MailboxNameConverter().fromJson(mailboxNameRequest),
|
||||||
creationIdRequest: const IdNullableConverter().fromJson(creationIdRequest)
|
creationIdRequest: const IdNullableConverter().fromJson(creationIdRequest),
|
||||||
|
sendingState: SendingState.values.firstWhere((value) => value.name == sendingState)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/caching/clients/sending_email_hive_cache_
|
|||||||
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
|
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
|
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.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_email_hive_cache.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/data/exceptions/sending_queue_exceptions.dart';
|
||||||
|
|
||||||
class SendingEmailCacheManager {
|
class SendingEmailCacheManager {
|
||||||
|
|
||||||
@@ -14,14 +15,21 @@ class SendingEmailCacheManager {
|
|||||||
|
|
||||||
SendingEmailCacheManager(this._hiveCacheClient);
|
SendingEmailCacheManager(this._hiveCacheClient);
|
||||||
|
|
||||||
Future<void> storeSendingEmail(
|
Future<SendingEmailHiveCache> storeSendingEmail(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
UserName userName,
|
UserName userName,
|
||||||
SendingEmailHiveCache sendingEmailHiveCache
|
SendingEmailHiveCache sendingEmailHiveCache
|
||||||
) {
|
) async {
|
||||||
final keyCache = TupleKey(sendingEmailHiveCache.sendingId, accountId.asString, userName.value).encodeKey;
|
final keyCache = TupleKey(sendingEmailHiveCache.sendingId, accountId.asString, userName.value).encodeKey;
|
||||||
log('SendingEmailCacheManager::storeSendingEmail():keyCache: $keyCache | sendingEmailHiveCache: $sendingEmailHiveCache');
|
log('SendingEmailCacheManager::storeSendingEmail():keyCache: $keyCache | sendingEmailHiveCache: $sendingEmailHiveCache');
|
||||||
return _hiveCacheClient.insertItem(keyCache, sendingEmailHiveCache);
|
await _hiveCacheClient.insertItem(keyCache, sendingEmailHiveCache);
|
||||||
|
final newSendingEmailHiveCache = await _hiveCacheClient.getItem(keyCache);
|
||||||
|
if (newSendingEmailHiveCache != null) {
|
||||||
|
log('SendingEmailCacheManager::storeSendingEmail():sendingId: ${newSendingEmailHiveCache.sendingId} | sendingState: ${newSendingEmailHiveCache.sendingState}');
|
||||||
|
return newSendingEmailHiveCache;
|
||||||
|
} else {
|
||||||
|
throw NotFoundSendingEmailHiveObject();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<SendingEmailHiveCache>> getAllSendingEmailsByTupleKey(
|
Future<List<SendingEmailHiveCache>> getAllSendingEmailsByTupleKey(
|
||||||
@@ -41,15 +49,21 @@ class SendingEmailCacheManager {
|
|||||||
Future<void> deleteSendingEmail(
|
Future<void> deleteSendingEmail(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
UserName userName,
|
UserName userName,
|
||||||
String sendingId
|
String sendingId,
|
||||||
) {
|
{bool needToReopen = false}
|
||||||
|
) async {
|
||||||
final keyCache = TupleKey(sendingId, accountId.asString, userName.value).encodeKey;
|
final keyCache = TupleKey(sendingId, accountId.asString, userName.value).encodeKey;
|
||||||
log('SendingEmailCacheManager::deleteSendingEmail():keyCache: $keyCache');
|
log('SendingEmailCacheManager::deleteSendingEmail():keyCache: $keyCache');
|
||||||
return _hiveCacheClient.deleteItem(keyCache);
|
await _hiveCacheClient.deleteItem(keyCache, needToReopen: needToReopen);
|
||||||
|
final storedSendingEmail = await _hiveCacheClient.getItem(keyCache);
|
||||||
|
if (storedSendingEmail != null) {
|
||||||
|
log('SendingEmailCacheManager::deleteSendingEmail():sendingId: ${storedSendingEmail.sendingId}');
|
||||||
|
throw ExistSendingEmailHiveObject();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<SendingEmailHiveCache>> getAllSendingEmails() async {
|
Future<List<SendingEmailHiveCache>> getAllSendingEmails({bool needToReopen = false}) async {
|
||||||
final sendingEmailsCache = await _hiveCacheClient.getAll(needToReopen: true);
|
final sendingEmailsCache = await _hiveCacheClient.getAll(needToReopen: needToReopen);
|
||||||
log('SendingEmailCacheManager::getAllSendingEmails():COUNT: ${sendingEmailsCache.length}');
|
log('SendingEmailCacheManager::getAllSendingEmails():COUNT: ${sendingEmailsCache.length}');
|
||||||
sendingEmailsCache.sortByLatestTime();
|
sendingEmailsCache.sortByLatestTime();
|
||||||
return sendingEmailsCache;
|
return sendingEmailsCache;
|
||||||
@@ -57,13 +71,21 @@ class SendingEmailCacheManager {
|
|||||||
|
|
||||||
Future<void> clearAllSendingEmails() => _hiveCacheClient.clearAllData();
|
Future<void> clearAllSendingEmails() => _hiveCacheClient.clearAllData();
|
||||||
|
|
||||||
Future<void> updateSendingEmail(
|
Future<SendingEmailHiveCache> updateSendingEmail(
|
||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
UserName userName,
|
UserName userName,
|
||||||
SendingEmailHiveCache sendingEmailHiveCache
|
SendingEmailHiveCache sendingEmailHiveCache,
|
||||||
|
{bool needToReopen = false}
|
||||||
) async {
|
) async {
|
||||||
final keyCache = TupleKey(sendingEmailHiveCache.sendingId, accountId.asString, userName.value).encodeKey;
|
final keyCache = TupleKey(sendingEmailHiveCache.sendingId, accountId.asString, userName.value).encodeKey;
|
||||||
log('SendingEmailCacheManager::updateSendingEmail():keyCache: $keyCache | sendingEmailHiveCache: $sendingEmailHiveCache');
|
log('SendingEmailCacheManager::updateSendingEmail():keyCache: $keyCache | sendingEmailHiveCache: $sendingEmailHiveCache');
|
||||||
return await _hiveCacheClient.updateItem(keyCache, sendingEmailHiveCache, needToReopen: true);
|
await _hiveCacheClient.updateItem(keyCache, sendingEmailHiveCache, needToReopen: needToReopen);
|
||||||
|
final newSendingEmailHiveCache = await _hiveCacheClient.getItem(keyCache);
|
||||||
|
if (newSendingEmailHiveCache != null) {
|
||||||
|
log('SendingEmailCacheManager::updateSendingEmail():sendingId: ${newSendingEmailHiveCache.sendingId} | sendingState: ${newSendingEmailHiveCache.sendingState}');
|
||||||
|
return newSendingEmailHiveCache;
|
||||||
|
} else {
|
||||||
|
throw NotFoundSendingEmailHiveObject();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,15 +5,13 @@ import 'package:core/presentation/state/success.dart';
|
|||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
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/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:model/extensions/session_extension.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
import 'package:model/oidc/token_oidc.dart';
|
import 'package:model/oidc/token_oidc.dart';
|
||||||
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
||||||
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/composer/domain/state/send_email_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
|
||||||
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/email/domain/state/delete_sending_email_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/delete_sending_email_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart';
|
import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/state/get_authenticated_account_state.dart';
|
import 'package:tmail_ui_user/features/login/domain/state/get_authenticated_account_state.dart';
|
||||||
@@ -22,12 +20,18 @@ import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_
|
|||||||
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
|
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/biding/sending_email_biding.dart';
|
import 'package:tmail_ui_user/features/offline_mode/bindings/sending_email_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/exceptions/workmanager_exception.dart';
|
import 'package:tmail_ui_user/features/offline_mode/exceptions/workmanager_exception.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
|
import 'package:tmail_ui_user/features/offline_mode/observer/work_observer.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_state.dart';
|
import 'package:tmail_ui_user/features/offline_mode/scheduler/worker_state.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_config.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_config.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.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';
|
||||||
|
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/update_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
import 'package:tmail_ui_user/features/session/domain/extensions/session_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
|
||||||
@@ -39,7 +43,6 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
|
|
||||||
AccountId? _currentAccountId;
|
AccountId? _currentAccountId;
|
||||||
Session? _currentSession;
|
Session? _currentSession;
|
||||||
UserName? _userName;
|
|
||||||
SendingEmail? _sendingEmail;
|
SendingEmail? _sendingEmail;
|
||||||
|
|
||||||
SendEmailInteractor? _sendEmailInteractor;
|
SendEmailInteractor? _sendEmailInteractor;
|
||||||
@@ -49,6 +52,7 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
GetSessionInteractor? _getSessionInteractor;
|
GetSessionInteractor? _getSessionInteractor;
|
||||||
DeleteSendingEmailInteractor? _deleteSendingEmailInteractor;
|
DeleteSendingEmailInteractor? _deleteSendingEmailInteractor;
|
||||||
SendingQueueIsolateManager? _sendingQueueIsolateManager;
|
SendingQueueIsolateManager? _sendingQueueIsolateManager;
|
||||||
|
UpdateSendingEmailInteractor? _updateSendingEmailInteractor;
|
||||||
|
|
||||||
Completer<bool>? _completer;
|
Completer<bool>? _completer;
|
||||||
|
|
||||||
@@ -69,10 +73,6 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> bindDI() async {
|
Future<void> bindDI() async {
|
||||||
return await _initialAppConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _initialAppConfig() async {
|
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
MainBindings().dependencies(),
|
MainBindings().dependencies(),
|
||||||
HiveCacheConfig().setUp()
|
HiveCacheConfig().setUp()
|
||||||
@@ -81,7 +81,7 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
await Future.sync(() {
|
await Future.sync(() {
|
||||||
HomeBindings().dependencies();
|
HomeBindings().dependencies();
|
||||||
MailboxDashBoardBindings().dependencies();
|
MailboxDashBoardBindings().dependencies();
|
||||||
SendingEmailBindings().dependencies();
|
SendEmailInteractorBindings().dependencies();
|
||||||
});
|
});
|
||||||
|
|
||||||
return await _getInteractorBindings();
|
return await _getInteractorBindings();
|
||||||
@@ -89,15 +89,26 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void handleFailureViewState(Failure failure) {
|
void handleFailureViewState(Failure failure) {
|
||||||
_clearDataQueue();
|
|
||||||
log('SendingEmailObserver::_handleFailureViewState(): $failure');
|
log('SendingEmailObserver::_handleFailureViewState(): $failure');
|
||||||
|
if (failure is SendEmailFailure) {
|
||||||
|
_updateStoredSendingEmail(SendingState.error);
|
||||||
|
} else if (failure is DeleteSendingEmailFailure) {
|
||||||
|
_showLocalNotification();
|
||||||
|
_updateStoredSendingEmail(SendingState.error);
|
||||||
|
} else if (failure is GetAuthenticatedAccountFailure ||
|
||||||
|
failure is NoAuthenticatedAccountFailure ||
|
||||||
|
failure is GetSessionFailure ||
|
||||||
|
failure is GetStoredTokenOidcFailure ||
|
||||||
|
failure is GetCredentialFailure ||
|
||||||
|
failure is UpdateSendingEmailFailure) {
|
||||||
|
_invokeCompleteWorkManager();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
if (success is GetAuthenticatedAccountSuccess) {
|
log('SendingEmailObserver::handleSuccessViewState(): $success');
|
||||||
_handleGetAuthenticatedAccountSuccess(success);
|
if (success is GetSessionSuccess) {
|
||||||
} else if (success is GetSessionSuccess) {
|
|
||||||
_handleGetSessionSuccess(success);
|
_handleGetSessionSuccess(success);
|
||||||
} else if (success is GetStoredTokenOidcSuccess) {
|
} else if (success is GetStoredTokenOidcSuccess) {
|
||||||
_handleGetAccountByOidcSuccess(success);
|
_handleGetAccountByOidcSuccess(success);
|
||||||
@@ -107,9 +118,17 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
_handleSendEmailSuccess(success);
|
_handleSendEmailSuccess(success);
|
||||||
} else if (success is DeleteSendingEmailSuccess) {
|
} else if (success is DeleteSendingEmailSuccess) {
|
||||||
_handleDeleteSendingEmailSuccess();
|
_handleDeleteSendingEmailSuccess();
|
||||||
|
} else if (success is UpdateSendingEmailSuccess) {
|
||||||
|
_handleUpdateStoredSendingEmailSuccess(success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void handleOnError(Object? error, StackTrace stackTrace) {
|
||||||
|
super.handleOnError(error, stackTrace);
|
||||||
|
_invokeCompleteWorkManager();
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _getInteractorBindings() async {
|
Future<void> _getInteractorBindings() async {
|
||||||
try {
|
try {
|
||||||
_getAuthenticatedAccountInteractor = getBinding<GetAuthenticatedAccountInteractor>();
|
_getAuthenticatedAccountInteractor = getBinding<GetAuthenticatedAccountInteractor>();
|
||||||
@@ -119,25 +138,18 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
_sendEmailInteractor = getBinding<SendEmailInteractor>();
|
_sendEmailInteractor = getBinding<SendEmailInteractor>();
|
||||||
_deleteSendingEmailInteractor = getBinding<DeleteSendingEmailInteractor>();
|
_deleteSendingEmailInteractor = getBinding<DeleteSendingEmailInteractor>();
|
||||||
_sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
|
_sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
|
||||||
|
_updateSendingEmailInteractor = getBinding<UpdateSendingEmailInteractor>();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('SendingEmailObserver::_getInteractorBindings(): ${e.toString()}');
|
logError('SendingEmailObserver::_getInteractorBindings(): ${e.toString()}');
|
||||||
_completer?.completeError(UnableBindingInWorkManagerException());
|
_invokeCompleteWorkManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetAuthenticatedAccountSuccess(GetAuthenticatedAccountSuccess success) {
|
|
||||||
_currentAccountId = success.account.accountId;
|
|
||||||
_userName = success.account.userName;
|
|
||||||
_dynamicUrlInterceptors?.changeBaseUrl(success.account.apiUrl);
|
|
||||||
log('SendingEmailObserver::_handleGetAuthenticatedAccountSuccess():_currentAccountId: $_currentAccountId | _userName: $_userName');
|
|
||||||
}
|
|
||||||
|
|
||||||
void _getSessionAction() {
|
void _getSessionAction() {
|
||||||
if (_getSessionInteractor != null) {
|
if (_getSessionInteractor != null) {
|
||||||
consumeState(_getSessionInteractor!.execute());
|
consumeState(_getSessionInteractor!.execute());
|
||||||
} else {
|
} else {
|
||||||
_clearDataQueue();
|
_invokeCompleteWorkManager();
|
||||||
logError('SendingEmailObserver::_getSessionAction():_getSessionInteractor is null');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,27 +157,29 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
if (_getAuthenticatedAccountInteractor != null) {
|
if (_getAuthenticatedAccountInteractor != null) {
|
||||||
consumeState(_getAuthenticatedAccountInteractor!.execute());
|
consumeState(_getAuthenticatedAccountInteractor!.execute());
|
||||||
} else {
|
} else {
|
||||||
_clearDataQueue();
|
_invokeCompleteWorkManager();
|
||||||
logError('SendingEmailObserver::_getAuthenticatedAccount():_getAuthenticatedAccountInteractor is null');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetSessionSuccess(GetSessionSuccess success) {
|
void _handleGetSessionSuccess(GetSessionSuccess success) async {
|
||||||
_currentSession = success.session;
|
_currentSession = success.session;
|
||||||
_userName = success.session.username;
|
_currentAccountId = success.session.personalAccount.accountId;
|
||||||
final apiUrl = success.session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors?.jmapUrl);
|
final apiUrl = success.session.getQualifiedApiUrl(baseUrl: _dynamicUrlInterceptors?.jmapUrl);
|
||||||
log('SendingEmailObserver::_handleGetSessionSuccess():apiUrl: $apiUrl');
|
|
||||||
if (apiUrl.isNotEmpty) {
|
if (apiUrl.isNotEmpty) {
|
||||||
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
_dynamicUrlInterceptors?.changeBaseUrl(apiUrl);
|
||||||
_sendEmailAction();
|
|
||||||
|
_updateStoredSendingEmail(SendingState.delivering);
|
||||||
|
|
||||||
|
await Future.delayed(
|
||||||
|
const Duration(milliseconds: 2000),
|
||||||
|
_sendEmailAction
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
_clearDataQueue();
|
_invokeCompleteWorkManager();
|
||||||
logError('SendingEmailObserver::_handleGetSessionSuccess():apiUrl is null');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetAccountByBasicAuthSuccess(GetCredentialViewState credentialViewState) {
|
void _handleGetAccountByBasicAuthSuccess(GetCredentialViewState credentialViewState) {
|
||||||
log('SendingEmailObserver::_handleGetAccountByBasicAuthSuccess()');
|
|
||||||
_dynamicUrlInterceptors?.setJmapUrl(credentialViewState.baseUrl.toString());
|
_dynamicUrlInterceptors?.setJmapUrl(credentialViewState.baseUrl.toString());
|
||||||
_authorizationInterceptors?.setBasicAuthorization(
|
_authorizationInterceptors?.setBasicAuthorization(
|
||||||
credentialViewState.userName.value,
|
credentialViewState.userName.value,
|
||||||
@@ -176,11 +190,9 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _sendEmailAction() {
|
void _sendEmailAction() {
|
||||||
log('SendingEmailObserver::_sendEmailAction()');
|
|
||||||
|
|
||||||
final mailboxRequestNotNull = _sendingEmail?.mailboxNameRequest != null && _sendingEmail?.creationIdRequest != null;
|
final mailboxRequestNotNull = _sendingEmail?.mailboxNameRequest != null && _sendingEmail?.creationIdRequest != null;
|
||||||
|
|
||||||
if (_sendEmailInteractor != null && _sendingEmail != null && _currentSession != null && _currentAccountId != null) {
|
if (_sendEmailInteractor != null && _isDataParameterNotNull) {
|
||||||
consumeState(_sendEmailInteractor!.execute(
|
consumeState(_sendEmailInteractor!.execute(
|
||||||
_currentSession!,
|
_currentSession!,
|
||||||
_currentAccountId!,
|
_currentAccountId!,
|
||||||
@@ -190,61 +202,100 @@ class SendingEmailObserver extends WorkObserver {
|
|||||||
: null
|
: null
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
_clearDataQueue();
|
_updateStoredSendingEmail(SendingState.error);
|
||||||
logError('SendingEmailObserver::_sendEmailAction():_sendEmailInteractor is null');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetAccountByOidcSuccess(GetStoredTokenOidcSuccess storedTokenOidcSuccess) {
|
void _handleGetAccountByOidcSuccess(GetStoredTokenOidcSuccess storedTokenOidcSuccess) {
|
||||||
log('FcmMessageController::_handleGetAccountByOidcSuccess():');
|
|
||||||
_dynamicUrlInterceptors?.setJmapUrl(storedTokenOidcSuccess.baseUrl.toString());
|
_dynamicUrlInterceptors?.setJmapUrl(storedTokenOidcSuccess.baseUrl.toString());
|
||||||
_authorizationInterceptors?.setTokenAndAuthorityOidc(
|
_authorizationInterceptors?.setTokenAndAuthorityOidc(
|
||||||
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
|
newToken: storedTokenOidcSuccess.tokenOidc.toToken(),
|
||||||
newConfig: storedTokenOidcSuccess.oidcConfiguration
|
newConfig: storedTokenOidcSuccess.oidcConfiguration
|
||||||
);
|
);
|
||||||
|
|
||||||
_dynamicUrlInterceptors?.changeBaseUrl(storedTokenOidcSuccess.baseUrl.toString());
|
_dynamicUrlInterceptors?.changeBaseUrl(storedTokenOidcSuccess.baseUrl.toString());
|
||||||
_getSessionAction();
|
_getSessionAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleSendEmailSuccess(SendEmailSuccess success) async {
|
void _handleSendEmailSuccess(SendEmailSuccess success) {
|
||||||
log("SendingEmailObserver::_handleSendEmailSuccess()");
|
|
||||||
_deleteSendingEmailAction();
|
_deleteSendingEmailAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteSendingEmailAction() {
|
void _deleteSendingEmailAction() {
|
||||||
if (_deleteSendingEmailInteractor != null && _currentSession != null && _currentAccountId != null && _sendingEmail != null) {
|
log('SendingEmailObserver::_deleteSendingEmailAction():');
|
||||||
|
if (_deleteSendingEmailInteractor != null && _isDataParameterNotNull) {
|
||||||
consumeState(_deleteSendingEmailInteractor!.execute(
|
consumeState(_deleteSendingEmailInteractor!.execute(
|
||||||
_currentAccountId!,
|
_currentAccountId!,
|
||||||
_currentSession!.username,
|
_currentSession!.username,
|
||||||
_sendingEmail!.sendingId,
|
_sendingEmail!.sendingId,
|
||||||
|
needToReopen: true
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
_clearDataQueue();
|
log('SendingEmailObserver::_deleteSendingEmailAction(): NOT CALLED');
|
||||||
logError('SendingEmailObserver::_deleteSendingEmailAction():_deleteSendingEmailInteractor is null');
|
_updateStoredSendingEmail(SendingState.error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleDeleteSendingEmailSuccess() async {
|
void _handleDeleteSendingEmailSuccess() async {
|
||||||
log('SendingEmailObserver::_handleDeleteSendingEmailSuccess(): Success');
|
|
||||||
_showLocalNotification();
|
_showLocalNotification();
|
||||||
_sendingQueueIsolateManager?.addEvent(WorkerState.success.name);
|
_sendingQueueIsolateManager?.addEvent(WorkerState.success.name);
|
||||||
_completer?.complete(true);
|
await Future.delayed(
|
||||||
}
|
const Duration(milliseconds: 1000),
|
||||||
|
() {
|
||||||
void _clearDataQueue() async {
|
_completer?.complete(true);
|
||||||
log('SendingEmailObserver::_clearDataQueue():');
|
_completer = null;
|
||||||
_sendingEmail = null;
|
}
|
||||||
_sendingQueueIsolateManager?.addEvent(WorkerState.failed.name);
|
);
|
||||||
_completer?.completeError(UnableToGetDataFromInWorkManagerException());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showLocalNotification() {
|
void _showLocalNotification() {
|
||||||
log('SendingEmailObserver::_showLocalNotification():SendingId: ${_sendingEmail?.sendingId}');
|
|
||||||
LocalNotificationManager.instance.showPushNotification(
|
LocalNotificationManager.instance.showPushNotification(
|
||||||
id: _sendingEmail?.sendingId ?? '',
|
id: _sendingEmail?.sendingId ?? '',
|
||||||
title: LocalNotificationConfig.messageHasBeenSentSuccessfully,
|
title: _sendingEmail?.email.subject ?? LocalNotificationConfig.messageHasBeenSentSuccessfully,
|
||||||
message: _sendingEmail?.presentationEmail.preview
|
message: _sendingEmail?.presentationEmail.emailContentList.asHtmlString,
|
||||||
|
isInboxStyle: false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get _isDataParameterNotNull => _currentSession != null && _currentAccountId != null && _sendingEmail != null;
|
||||||
|
|
||||||
|
void _updateStoredSendingEmail(SendingState newState) {
|
||||||
|
log('SendingEmailObserver::_updateStoredSendingEmail():');
|
||||||
|
if (_updateSendingEmailInteractor != null && _isDataParameterNotNull) {
|
||||||
|
consumeState(_updateSendingEmailInteractor!.execute(
|
||||||
|
_currentAccountId!,
|
||||||
|
_currentSession!.username,
|
||||||
|
_sendingEmail!.updatingSendingState(newState),
|
||||||
|
needToReopen: true
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
_invokeCompleteWorkManager();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleUpdateStoredSendingEmailSuccess(UpdateSendingEmailSuccess success) {
|
||||||
|
log('SendingEmailObserver::_handleUpdateStoredSendingEmailSuccess():sendingState: ${success.newSendingEmail.sendingState}');
|
||||||
|
switch (success.newSendingEmail.sendingState) {
|
||||||
|
case SendingState.ready:
|
||||||
|
break;
|
||||||
|
case SendingState.delivering:
|
||||||
|
_sendingQueueIsolateManager?.addEvent(WorkerState.pending.name);
|
||||||
|
break;
|
||||||
|
case SendingState.error:
|
||||||
|
_invokeCompleteWorkManager();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _invokeCompleteWorkManager() async {
|
||||||
|
log('SendingEmailObserver::_invokeCompleteWorkManager():');
|
||||||
|
_sendingEmail = null;
|
||||||
|
_sendingQueueIsolateManager?.addEvent(WorkerState.failed.name);
|
||||||
|
await Future.delayed(
|
||||||
|
const Duration(milliseconds: 1000),
|
||||||
|
() {
|
||||||
|
_completer?.completeError(CannotCompleteTaskInWorkManagerException());
|
||||||
|
_completer = null;
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,10 +12,7 @@ abstract class WorkObserver {
|
|||||||
void consumeState(Stream<Either<Failure, Success>> newStateStream) {
|
void consumeState(Stream<Either<Failure, Success>> newStateStream) {
|
||||||
newStateStream.listen(
|
newStateStream.listen(
|
||||||
_handleStateStream,
|
_handleStateStream,
|
||||||
onError: (error, stackTrace) {
|
onError: handleOnError
|
||||||
logError('WorkObserver::consumeState():onError:error: $error');
|
|
||||||
logError('WorkObserver::consumeState():onError:stackTrace: $stackTrace');
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,4 +23,8 @@ abstract class WorkObserver {
|
|||||||
void handleFailureViewState(Failure failure) {}
|
void handleFailureViewState(Failure failure) {}
|
||||||
|
|
||||||
void handleSuccessViewState(Success success) {}
|
void handleSuccessViewState(Success success) {}
|
||||||
|
|
||||||
|
void handleOnError(Object? error, StackTrace stackTrace) {
|
||||||
|
logError('WorkObserver::handleOnError():error: $error | stackTrace: $stackTrace');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
enum WorkerState {
|
enum WorkerState {
|
||||||
|
pending,
|
||||||
success,
|
success,
|
||||||
failed;
|
failed;
|
||||||
}
|
}
|
||||||
+27
-16
@@ -131,24 +131,35 @@ class LocalNotificationManager {
|
|||||||
required String title,
|
required String title,
|
||||||
String? message,
|
String? message,
|
||||||
EmailAddress? emailAddress,
|
EmailAddress? emailAddress,
|
||||||
String? payload
|
String? payload,
|
||||||
|
bool isInboxStyle = true
|
||||||
}) async {
|
}) async {
|
||||||
final inboxStyleInformation = InboxStyleInformation(
|
if (isInboxStyle) {
|
||||||
[message?.addBlockTag('p', attribute: 'style="color:#6D7885;"') ?? ''],
|
final inboxStyleInformation = InboxStyleInformation(
|
||||||
htmlFormatLines: true,
|
[message?.addBlockTag('p', attribute: 'style="color:#6D7885;"') ?? ''],
|
||||||
contentTitle: title,
|
htmlFormatLines: true,
|
||||||
htmlFormatContentTitle: true,
|
contentTitle: title,
|
||||||
summaryText: (emailAddress?.asString() ?? '').addBlockTag('b'),
|
htmlFormatContentTitle: true,
|
||||||
htmlFormatSummaryText: true,
|
summaryText: (emailAddress?.asString() ?? '').addBlockTag('b'),
|
||||||
);
|
htmlFormatSummaryText: true,
|
||||||
|
);
|
||||||
|
|
||||||
await _localNotificationsPlugin.show(
|
await _localNotificationsPlugin.show(
|
||||||
id.hashCode,
|
id.hashCode,
|
||||||
title,
|
title,
|
||||||
message,
|
message,
|
||||||
LocalNotificationConfig.instance.generateNotificationDetails(styleInformation: inboxStyleInformation),
|
LocalNotificationConfig.instance.generateNotificationDetails(styleInformation: inboxStyleInformation),
|
||||||
payload: payload
|
payload: payload
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
await _localNotificationsPlugin.show(
|
||||||
|
id.hashCode,
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
LocalNotificationConfig.instance.generateNotificationDetails(),
|
||||||
|
payload: payload
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> removeNotification(String id) {
|
Future<void> removeNotification(String id) {
|
||||||
|
|||||||
@@ -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/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.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/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';
|
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
|
||||||
|
|
||||||
class SendingQueueRepositoryImpl extends SendingQueueRepository {
|
class SendingQueueRepositoryImpl extends SendingQueueRepository {
|
||||||
@@ -16,7 +16,17 @@ class SendingQueueRepositoryImpl extends SendingQueueRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) {
|
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) {
|
||||||
return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+23
-4
@@ -5,8 +5,9 @@ import 'package:model/extensions/identity_id_extension.dart';
|
|||||||
import 'package:model/extensions/mailbox_id_extension.dart';
|
import 'package:model/extensions/mailbox_id_extension.dart';
|
||||||
import 'package:model/mailbox/select_mode.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/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/sending_email.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_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 {
|
extension SendingEmailExtension on SendingEmail {
|
||||||
SendingEmailHiveCache toHiveCache() {
|
SendingEmailHiveCache toHiveCache() {
|
||||||
@@ -25,14 +26,15 @@ extension SendingEmailExtension on SendingEmail {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
EmailRequest toEmailRequest({Email? emailEdit}) {
|
EmailRequest toEmailRequest({Email? newEmail}) {
|
||||||
return EmailRequest(
|
return EmailRequest(
|
||||||
email: emailEdit ?? email,
|
email: newEmail ?? email,
|
||||||
emailActionType: emailActionType,
|
emailActionType: emailActionType,
|
||||||
sentMailboxId: sentMailboxId,
|
sentMailboxId: sentMailboxId,
|
||||||
emailIdDestroyed: emailIdDestroyed,
|
emailIdDestroyed: emailIdDestroyed,
|
||||||
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
|
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
|
||||||
identityId: identityId
|
identityId: identityId,
|
||||||
|
storedSendingId: sendingId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,4 +71,21 @@ extension SendingEmailExtension on SendingEmail {
|
|||||||
selectMode: SelectMode.INACTIVE
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.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 {
|
abstract class SendingQueueRepository {
|
||||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false});
|
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/failure.dart';
|
||||||
import 'package:core/presentation/state/success.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 {}
|
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];
|
||||||
|
}
|
||||||
+5
-5
@@ -1,21 +1,21 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.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 UpdateSendingEmailLoading extends UIState {}
|
class UpdateSendingEmailLoading extends UIState {}
|
||||||
|
|
||||||
class UpdateSendingEmailSuccess extends UIState {
|
class UpdateSendingEmailSuccess extends UIState {
|
||||||
|
final SendingEmail newSendingEmail;
|
||||||
|
|
||||||
final SendingEmail sendingEmail;
|
UpdateSendingEmailSuccess(this.newSendingEmail);
|
||||||
|
|
||||||
UpdateSendingEmailSuccess(this.sendingEmail);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [sendingEmail];
|
List<Object?> get props => [newSendingEmail];
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdateSendingEmailFailure extends FeatureFailure {
|
class UpdateSendingEmailFailure extends FeatureFailure {
|
||||||
|
|
||||||
UpdateSendingEmailFailure(dynamic exception) : super(exception: exception);
|
UpdateSendingEmailFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
+5
-6
@@ -3,19 +3,18 @@ import 'package:core/presentation/state/success.dart';
|
|||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.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 {
|
class DeleteSendingEmailInteractor {
|
||||||
final EmailRepository _emailRepository;
|
final SendingQueueRepository _sendingQueueRepository;
|
||||||
|
|
||||||
DeleteSendingEmailInteractor(this._emailRepository);
|
DeleteSendingEmailInteractor(this._sendingQueueRepository);
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName, String sendingId) async* {
|
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName, String sendingId, {bool needToReopen = false}) async* {
|
||||||
try {
|
try {
|
||||||
yield Right<Failure, Success>(DeleteSendingEmailLoading());
|
yield Right<Failure, Success>(DeleteSendingEmailLoading());
|
||||||
await _emailRepository.deleteSendingEmail(accountId, userName, sendingId);
|
await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId, needToReopen: needToReopen);
|
||||||
yield Right<Failure, Success>(DeleteSendingEmailSuccess());
|
yield Right<Failure, Success>(DeleteSendingEmailSuccess());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
yield Left<Failure, Success>(DeleteSendingEmailFailure(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 +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/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/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_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/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/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.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_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/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/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/features/thread/data/local/email_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
||||||
|
|
||||||
@@ -36,9 +39,12 @@ class SendingQueueInteractorBindings extends InteractorsBindings {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsInteractor() {
|
void bindingsInteractor() {
|
||||||
|
Get.lazyPut(() => StoreSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
||||||
Get.lazyPut(() => GetAllSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
Get.lazyPut(() => GetAllSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
||||||
Get.lazyPut(() => DeleteSingleSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
Get.lazyPut(() => DeleteSingleSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
||||||
Get.lazyPut(() => DeleteMultipleSendingEmailInteractor(Get.find<DeleteSingleSendingEmailInteractor>()));
|
Get.lazyPut(() => DeleteMultipleSendingEmailInteractor(Get.find<DeleteSingleSendingEmailInteractor>()));
|
||||||
|
Get.lazyPut(() => DeleteSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
||||||
|
Get.lazyPut(() => UpdateSendingEmailInteractor(Get.find<SendingQueueRepository>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
|
import 'package:tmail_ui_user/features/sending_queue/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/model/sending_email.dart';
|
||||||
|
|
||||||
extension ListSendingEmailExtension on List<SendingEmail> {
|
extension ListSendingEmailExtension on List<SendingEmail> {
|
||||||
List<SendingEmail> toggleSelection({required SendingEmail sendingEmailSelected}) =>
|
List<SendingEmail> toggleSelection({required SendingEmail sendingEmailSelected}) =>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
enum SendingEmailActionType {
|
enum SendingEmailActionType {
|
||||||
|
create,
|
||||||
edit,
|
edit,
|
||||||
delete;
|
delete;
|
||||||
|
|
||||||
@@ -13,6 +14,8 @@ enum SendingEmailActionType {
|
|||||||
return AppLocalizations.of(context).delete;
|
return AppLocalizations.of(context).delete;
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
return AppLocalizations.of(context).edit;
|
return AppLocalizations.of(context).edit;
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,6 +25,8 @@ enum SendingEmailActionType {
|
|||||||
return 'button_delete_sending_email';
|
return 'button_delete_sending_email';
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
return 'button_edit_sending_email';
|
return 'button_edit_sending_email';
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,6 +36,8 @@ enum SendingEmailActionType {
|
|||||||
return AppColor.colorDeletePermanentlyButton;
|
return AppColor.colorDeletePermanentlyButton;
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
return AppColor.primaryColor;
|
return AppColor.primaryColor;
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
return Colors.transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,6 +47,8 @@ enum SendingEmailActionType {
|
|||||||
return AppColor.colorDeletePermanentlyButton;
|
return AppColor.colorDeletePermanentlyButton;
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
return AppColor.primaryColor;
|
return AppColor.primaryColor;
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
return Colors.transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+10
-3
@@ -2,6 +2,7 @@ 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/core/session/session.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.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/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';
|
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||||
|
|
||||||
class SendingEmailArguments extends RouterArguments {
|
class SendingEmailArguments extends RouterArguments {
|
||||||
@@ -9,7 +10,7 @@ class SendingEmailArguments extends RouterArguments {
|
|||||||
final AccountId accountId;
|
final AccountId accountId;
|
||||||
final EmailRequest emailRequest;
|
final EmailRequest emailRequest;
|
||||||
final CreateNewMailboxRequest? mailboxRequest;
|
final CreateNewMailboxRequest? mailboxRequest;
|
||||||
final bool? isUpdateSendingEmail;
|
final SendingEmailActionType sendingEmailActionType;
|
||||||
|
|
||||||
SendingEmailArguments(
|
SendingEmailArguments(
|
||||||
this.session,
|
this.session,
|
||||||
@@ -17,10 +18,16 @@ class SendingEmailArguments extends RouterArguments {
|
|||||||
this.emailRequest,
|
this.emailRequest,
|
||||||
this.mailboxRequest,
|
this.mailboxRequest,
|
||||||
{
|
{
|
||||||
this.isUpdateSendingEmail
|
this.sendingEmailActionType = SendingEmailActionType.create
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail];
|
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:model/mailbox/select_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.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/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/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/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/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/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/offline_mode/controller/work_scheduler_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/delete_multiple_sending_email_state.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 DeleteMultipleSendingEmailInteractor _deleteMultipleSendingEmailInteractor;
|
||||||
|
|
||||||
final dashboardController = getBinding<MailboxDashBoardController>();
|
final dashboardController = getBinding<MailboxDashBoardController>();
|
||||||
|
final _networkConnectionController = getBinding<NetworkConnectionController>();
|
||||||
final _sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
|
final _sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
|
||||||
final _imagePaths = getBinding<ImagePaths>();
|
final _imagePaths = getBinding<ImagePaths>();
|
||||||
final _appToast = getBinding<AppToast>();
|
final _appToast = getBinding<AppToast>();
|
||||||
@@ -112,10 +114,12 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
|||||||
_deleteSendingEmailAction(context, listSendingEmails);
|
_deleteSendingEmailAction(context, listSendingEmails);
|
||||||
break;
|
break;
|
||||||
case SendingEmailActionType.edit:
|
case SendingEmailActionType.edit:
|
||||||
if (dashboardController?.networkConnectionController.isNetworkConnectionAvailable() == false) {
|
if (_networkConnectionController?.isNetworkConnectionAvailable() == false) {
|
||||||
_editSendingEmailAction(listSendingEmails.first);
|
_editSendingEmailAction(listSendingEmails.first);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SendingEmailActionType.create:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +178,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
|||||||
|
|
||||||
_appToast!.showToastSuccessMessage(
|
_appToast!.showToastSuccessMessage(
|
||||||
currentOverlayContext!,
|
currentOverlayContext!,
|
||||||
AppLocalizations.of(currentContext!).deleteSomeOfflineEmailSuccessfully
|
AppLocalizations.of(currentContext!).messageHaveBeenDeletedSuccessfully
|
||||||
);
|
);
|
||||||
|
|
||||||
_refreshSendingQueue();
|
_refreshSendingQueue();
|
||||||
@@ -182,6 +186,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _editSendingEmailAction(SendingEmail sendingEmail) {
|
void _editSendingEmailAction(SendingEmail sendingEmail) {
|
||||||
|
disableSelectionMode();
|
||||||
|
|
||||||
final arguments = ComposerArguments(
|
final arguments = ComposerArguments(
|
||||||
emailActionType: EmailActionType.edit,
|
emailActionType: EmailActionType.edit,
|
||||||
presentationEmail: sendingEmail.presentationEmail,
|
presentationEmail: sendingEmail.presentationEmail,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:flutter/cupertino.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 {
|
class SendingQueueUtils {
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/mailbox/select_mode.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/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/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
|||||||
import 'package:core/presentation/views/button/button_builder.dart';
|
import 'package:core/presentation/views/button/button_builder.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.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/extensions/list_sending_email_extension.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/model/sending_email_action_type.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/extensions/presentation_email_extension.dart';
|
import 'package:model/extensions/presentation_email_extension.dart';
|
||||||
import 'package:model/mailbox/select_mode.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/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/utils/sending_queue_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/sending_queue/presentation/widgets/sending_state_widget.dart';
|
import 'package:tmail_ui_user/features/sending_queue/presentation/widgets/sending_state_widget.dart';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"@@last_modified": "2023-06-08T16:53:26.593398",
|
"@@last_modified": "2023-06-09T10:30:29.843203",
|
||||||
"initializing_data": "Initializing data...",
|
"initializing_data": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -2882,8 +2882,8 @@
|
|||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"deleteSomeOfflineEmailSuccessfully": "Delete some offline email successfully.",
|
"messageHaveBeenDeletedSuccessfully": "Messages have been deleted successfully",
|
||||||
"@deleteSomeOfflineEmailSuccessfully": {
|
"@messageHaveBeenDeletedSuccessfully": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
|||||||
@@ -2968,10 +2968,10 @@ class AppLocalizations {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String get deleteSomeOfflineEmailSuccessfully {
|
String get messageHaveBeenDeletedSuccessfully {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'Delete some offline email successfully.',
|
'Messages have been deleted successfully',
|
||||||
name: 'deleteSomeOfflineEmailSuccessfully',
|
name: 'messageHaveBeenDeletedSuccessfully',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user