From 0b6195f02a2322486c2fcb8bda69bbc47197f71e Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 24 May 2023 13:05:44 +0700 Subject: [PATCH] TF-1812 Add SendingEmailHiveCache to store sending email (cherry picked from commit 7ff4c951b843f7a844e0dd4f0667b85b7fb0b710) --- .../caching/utils/caching_constants.dart | 2 + .../extensions/sending_email_extension.dart | 22 +++++++ .../composer/domain/model/sending_email.dart | 43 +++++++++++++ .../model/sending_email_hive_cache.dart | 62 +++++++++++++++++++ .../lib/extensions/identity_id_extension.dart | 6 ++ model/lib/model.dart | 1 + 6 files changed, 136 insertions(+) create mode 100644 lib/features/composer/domain/extensions/sending_email_extension.dart create mode 100644 lib/features/composer/domain/model/sending_email.dart create mode 100644 lib/features/offline_mode/model/sending_email_hive_cache.dart create mode 100644 model/lib/extensions/identity_id_extension.dart diff --git a/lib/features/caching/utils/caching_constants.dart b/lib/features/caching/utils/caching_constants.dart index 74744539d..ef0fab338 100644 --- a/lib/features/caching/utils/caching_constants.dart +++ b/lib/features/caching/utils/caching_constants.dart @@ -17,12 +17,14 @@ class CachingConstants { static const int ATTACHMENT_HIVE_CACHE_ID = 15; static const int EMAIL_HEADER_HIVE_CACHE_ID = 16; static const int DETAILED_EMAIL_HIVE_CACHE_ID = 17; + static const int SENDING_EMAIL_HIVE_CACHE_ID = 18; static const String fcmCacheBoxName = 'fcm_cache_box'; static const String incomingEmailedCacheBoxName = 'incoming_emailed_cache_box'; static const String incomingEmailedContentFolderName = 'incoming_emailed'; static const String openedEmailContentFolderName = 'opened_email'; static const String openedEmailCacheBoxName = 'opened_email_cache_box'; + static const String sendingEmailCacheBoxName = 'sending_email_cache_box'; static const int maxNumberNewEmailsForOffline = 10; static const int maxNumberOpenedEmailsForOffline = 30; diff --git a/lib/features/composer/domain/extensions/sending_email_extension.dart b/lib/features/composer/domain/extensions/sending_email_extension.dart new file mode 100644 index 000000000..e1620b0c3 --- /dev/null +++ b/lib/features/composer/domain/extensions/sending_email_extension.dart @@ -0,0 +1,22 @@ + +import 'package:model/extensions/email_id_extensions.dart'; +import 'package:model/extensions/identity_id_extension.dart'; +import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'; +import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart'; + +extension SendingEmailExtension on SendingEmail { + SendingEmailHiveCache toHiveCache() { + return SendingEmailHiveCache( + sendingId, + email.toJson(), + emailActionType.name, + sentMailboxId?.asString, + emailIdDestroyed?.asString, + emailIdAnsweredOrForwarded?.asString, + identityId?.asString, + mailboxNameRequest?.name, + creationIdRequest?.value + ); + } +} \ No newline at end of file diff --git a/lib/features/composer/domain/model/sending_email.dart b/lib/features/composer/domain/model/sending_email.dart new file mode 100644 index 000000000..ee09c48a6 --- /dev/null +++ b/lib/features/composer/domain/model/sending_email.dart @@ -0,0 +1,43 @@ +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:model/email/email_action_type.dart'; + +class SendingEmail with EquatableMixin { + final String sendingId; + final Email email; + final MailboxId? sentMailboxId; + final EmailId? emailIdDestroyed; + final EmailId? emailIdAnsweredOrForwarded; + final IdentityId? identityId; + final EmailActionType emailActionType; + final MailboxName? mailboxNameRequest; + final Id? creationIdRequest; + + SendingEmail({ + required this.sendingId, + required this.email, + required this.emailActionType, + this.sentMailboxId, + this.emailIdDestroyed, + this.emailIdAnsweredOrForwarded, + this.identityId, + this.mailboxNameRequest, + this.creationIdRequest + }); + + @override + List get props => [ + sendingId, + email, + emailActionType, + sentMailboxId, + emailIdDestroyed, + emailIdAnsweredOrForwarded, + identityId, + mailboxNameRequest, + creationIdRequest + ]; +} \ No newline at end of file diff --git a/lib/features/offline_mode/model/sending_email_hive_cache.dart b/lib/features/offline_mode/model/sending_email_hive_cache.dart new file mode 100644 index 000000000..cd32a56ca --- /dev/null +++ b/lib/features/offline_mode/model/sending_email_hive_cache.dart @@ -0,0 +1,62 @@ + +import 'package:equatable/equatable.dart'; +import 'package:hive/hive.dart'; +import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; + +part 'sending_email_hive_cache.g.dart'; + +@HiveType(typeId: CachingConstants.SENDING_EMAIL_HIVE_CACHE_ID) +class SendingEmailHiveCache extends HiveObject with EquatableMixin { + + @HiveField(0) + final String sendingId; + + @HiveField(1) + final Map emailData; + + @HiveField(2) + final String emailActionType; + + @HiveField(3) + final String? sentMailboxId; + + @HiveField(4) + final String? emailIdDestroyed; + + @HiveField(5) + final String? emailIdAnsweredOrForwarded; + + @HiveField(6) + final String? identityId; + + @HiveField(7) + final String? mailboxNameRequest; + + @HiveField(8) + final String? creationIdRequest; + + SendingEmailHiveCache( + this.sendingId, + this.emailData, + this.emailActionType, + this.sentMailboxId, + this.emailIdDestroyed, + this.emailIdAnsweredOrForwarded, + this.identityId, + this.mailboxNameRequest, + this.creationIdRequest + ); + + @override + List get props => [ + sendingId, + emailData, + emailActionType, + sentMailboxId, + emailIdDestroyed, + emailIdAnsweredOrForwarded, + identityId, + mailboxNameRequest, + creationIdRequest + ]; +} \ No newline at end of file diff --git a/model/lib/extensions/identity_id_extension.dart b/model/lib/extensions/identity_id_extension.dart new file mode 100644 index 000000000..11f288573 --- /dev/null +++ b/model/lib/extensions/identity_id_extension.dart @@ -0,0 +1,6 @@ + +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +extension IdentityIdExtension on IdentityId { + String get asString => id.value; +} \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index bf1c36f3e..842aee4fc 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -58,6 +58,7 @@ export 'extensions/list_identity_id_extension.dart'; export 'extensions/email_id_extensions.dart'; export 'extensions/account_id_extensions.dart'; export 'extensions/account_extension.dart'; +export 'extensions/identity_id_extension.dart'; // Identity export 'identity/identity_request_dto.dart'; export 'mailbox/expand_mode.dart';