From 8756c5fefbb622bfe3301832318834a4cb9dd2eb Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 1 Jun 2023 14:02:07 +0700 Subject: [PATCH] TF-1813 Add `createTime` and change type email property in SendingEmailHiveCache (cherry picked from commit 3077cc3b414d4894ac13f5636aa5d59b0096c9fb) --- .../extensions/email_request_extension.dart | 1 + .../extensions/sending_email_extension.dart | 4 ++- .../composer/domain/model/sending_email.dart | 13 ++++++++ .../sending_email_hive_cache_extension.dart | 30 +++++++++++++++++++ .../model/sending_email_hive_cache.dart | 17 +++++++---- .../offline_mode/scheduler/worker.dart | 2 +- 6 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 lib/features/offline_mode/extensions/sending_email_hive_cache_extension.dart diff --git a/lib/features/composer/domain/extensions/email_request_extension.dart b/lib/features/composer/domain/extensions/email_request_extension.dart index 82790c0b0..59e9abe69 100644 --- a/lib/features/composer/domain/extensions/email_request_extension.dart +++ b/lib/features/composer/domain/extensions/email_request_extension.dart @@ -9,6 +9,7 @@ extension EmailRequestExtension on EmailRequest { sendingId: sendingId, email: email, emailActionType: emailActionType, + createTime: DateTime.now(), sentMailboxId: sentMailboxId, emailIdDestroyed: emailIdDestroyed, emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, diff --git a/lib/features/composer/domain/extensions/sending_email_extension.dart b/lib/features/composer/domain/extensions/sending_email_extension.dart index e1620b0c3..a8a43016f 100644 --- a/lib/features/composer/domain/extensions/sending_email_extension.dart +++ b/lib/features/composer/domain/extensions/sending_email_extension.dart @@ -1,4 +1,5 @@ +import 'package:model/extensions/email_extension.dart'; import 'package:model/extensions/email_id_extensions.dart'; import 'package:model/extensions/identity_id_extension.dart'; import 'package:model/extensions/mailbox_id_extension.dart'; @@ -9,8 +10,9 @@ extension SendingEmailExtension on SendingEmail { SendingEmailHiveCache toHiveCache() { return SendingEmailHiveCache( sendingId, - email.toJson(), + email.asString(), emailActionType.name, + createTime, sentMailboxId?.asString, emailIdDestroyed?.asString, emailIdAnsweredOrForwarded?.asString, diff --git a/lib/features/composer/domain/model/sending_email.dart b/lib/features/composer/domain/model/sending_email.dart index de30f07a1..6a782db1f 100644 --- a/lib/features/composer/domain/model/sending_email.dart +++ b/lib/features/composer/domain/model/sending_email.dart @@ -1,5 +1,7 @@ +import 'package:core/domain/extensions/datetime_extension.dart'; import 'package:equatable/equatable.dart'; +import 'package:flutter_date_range_picker/flutter_date_range_picker.dart'; import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart'; @@ -9,6 +11,7 @@ import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/email_action_type.dart'; +import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/email_extension.dart'; class SendingEmail with EquatableMixin { @@ -21,11 +24,13 @@ class SendingEmail with EquatableMixin { final EmailActionType emailActionType; final MailboxName? mailboxNameRequest; final Id? creationIdRequest; + final DateTime createTime; SendingEmail({ required this.sendingId, required this.email, required this.emailActionType, + required this.createTime, this.sentMailboxId, this.emailIdDestroyed, this.emailIdAnsweredOrForwarded, @@ -46,6 +51,7 @@ class SendingEmail with EquatableMixin { writeNotNull('sendingId', sendingId); writeNotNull('email', email.asString()); writeNotNull('emailActionType', emailActionType.name); + writeNotNull('createTime', createTime.toIso8601String()); writeNotNull('sentMailboxId', const MailboxIdNullableConverter().toJson(sentMailboxId)); writeNotNull('emailIdDestroyed', const EmailIdNullableConverter().toJson(emailIdDestroyed)); writeNotNull('emailIdAnsweredOrForwarded', const EmailIdNullableConverter().toJson(emailIdAnsweredOrForwarded)); @@ -56,11 +62,18 @@ class SendingEmail with EquatableMixin { return val; } + PresentationEmail get presentationEmail => email.toPresentationEmail(); + + String getCreateTimeAt(String newLocale) { + return DateFormat(createTime.toPattern(), newLocale).format(createTime); + } + @override List get props => [ sendingId, email, emailActionType, + createTime, sentMailboxId, emailIdDestroyed, emailIdAnsweredOrForwarded, diff --git a/lib/features/offline_mode/extensions/sending_email_hive_cache_extension.dart b/lib/features/offline_mode/extensions/sending_email_hive_cache_extension.dart new file mode 100644 index 000000000..0ab74d445 --- /dev/null +++ b/lib/features/offline_mode/extensions/sending_email_hive_cache_extension.dart @@ -0,0 +1,30 @@ + +import 'dart:convert'; + +import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart'; +import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart'; +import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart'; +import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart'; +import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.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'; + +extension SendingEmailHiveCacheExtension on SendingEmailHiveCache { + + SendingEmail toSendingEmail() { + return SendingEmail( + sendingId: sendingId, + email: Email.fromJson(jsonDecode(email)), + emailActionType: EmailActionType.values.firstWhere((value) => value.name == emailActionType), + createTime: createTime, + sentMailboxId: const MailboxIdNullableConverter().fromJson(sentMailboxId), + emailIdDestroyed: const EmailIdNullableConverter().fromJson(emailIdDestroyed), + emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(emailIdAnsweredOrForwarded), + identityId: const IdentityIdNullableConverter().fromJson(identityId), + mailboxNameRequest: const MailboxNameConverter().fromJson(mailboxNameRequest), + creationIdRequest: const IdNullableConverter().fromJson(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 index 6a45156cc..c8f041eff 100644 --- a/lib/features/offline_mode/model/sending_email_hive_cache.dart +++ b/lib/features/offline_mode/model/sending_email_hive_cache.dart @@ -12,33 +12,37 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin { final String sendingId; @HiveField(1) - final Map email; + final String email; @HiveField(2) final String emailActionType; @HiveField(3) - final String? sentMailboxId; + final DateTime createTime; @HiveField(4) - final String? emailIdDestroyed; + final String? sentMailboxId; @HiveField(5) - final String? emailIdAnsweredOrForwarded; + final String? emailIdDestroyed; @HiveField(6) - final String? identityId; + final String? emailIdAnsweredOrForwarded; @HiveField(7) - final String? mailboxNameRequest; + final String? identityId; @HiveField(8) + final String? mailboxNameRequest; + + @HiveField(9) final String? creationIdRequest; SendingEmailHiveCache( this.sendingId, this.email, this.emailActionType, + this.createTime, this.sentMailboxId, this.emailIdDestroyed, this.emailIdAnsweredOrForwarded, @@ -52,6 +56,7 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin { sendingId, email, emailActionType, + createTime, sentMailboxId, emailIdDestroyed, emailIdAnsweredOrForwarded, diff --git a/lib/features/offline_mode/scheduler/worker.dart b/lib/features/offline_mode/scheduler/worker.dart index a8480efaf..6e280b4d1 100644 --- a/lib/features/offline_mode/scheduler/worker.dart +++ b/lib/features/offline_mode/scheduler/worker.dart @@ -21,7 +21,7 @@ class Worker with EquatableMixin { } Map get inputData { - data[WorkManagerConstants.workerTypeKey] = type.name; + data.addAll({WorkManagerConstants.workerTypeKey: type.name}); return data; }