diff --git a/lib/features/composer/domain/extensions/sending_email_extension.dart b/lib/features/composer/domain/extensions/sending_email_extension.dart index a8a43016f..e6371f341 100644 --- a/lib/features/composer/domain/extensions/sending_email_extension.dart +++ b/lib/features/composer/domain/extensions/sending_email_extension.dart @@ -3,6 +3,7 @@ import 'package:model/extensions/email_extension.dart'; import 'package:model/extensions/email_id_extensions.dart'; import 'package:model/extensions/identity_id_extension.dart'; import 'package:model/extensions/mailbox_id_extension.dart'; +import 'package: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'; @@ -21,4 +22,15 @@ extension SendingEmailExtension on SendingEmail { creationIdRequest?.value ); } + + EmailRequest toEmailRequest() { + return EmailRequest( + email: email, + emailActionType: emailActionType, + sentMailboxId: sentMailboxId, + emailIdDestroyed: emailIdDestroyed, + emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, + identityId: identityId + ); + } } \ 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 index 6a782db1f..a1338900b 100644 --- a/lib/features/composer/domain/model/sending_email.dart +++ b/lib/features/composer/domain/model/sending_email.dart @@ -1,5 +1,4 @@ - -import 'package:core/domain/extensions/datetime_extension.dart'; +import 'dart:convert'; 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'; @@ -68,6 +67,28 @@ class SendingEmail with EquatableMixin { return DateFormat(createTime.toPattern(), newLocale).format(createTime); } + factory SendingEmail.fromJson(Map json) { + + return SendingEmail( + sendingId: json['sendingId'] as String, + email: Email.fromJson(jsonDecode(json['email'])), + emailActionType: _getEmailActionType(json['emailActionType'] as String), + sentMailboxId: json['sentMailboxId'] != null ? const MailboxIdNullableConverter().fromJson(json['sentMailboxId'] as String?) : null, + emailIdDestroyed: json['emailIdDestroyed'] != null ? const EmailIdNullableConverter().fromJson(json['emailIdDestroyed'] as String?) : null, + emailIdAnsweredOrForwarded: json['emailIdAnsweredOrForwarded'] != null ? const EmailIdNullableConverter().fromJson(json['emailIdAnsweredOrForwarded'] as String?) : null, + identityId: json['identityId'] != null ? const IdentityIdNullableConverter().fromJson(json['identityId'] as String?) : null, + mailboxNameRequest: json['mailboxNameRequest'] != null ? MailboxName(json['mailboxNameRequest'] as String) : null, + creationIdRequest: json['creationIdRequest'] != null ? const IdNullableConverter().fromJson(json['creationIdRequest'] as String) : null, + ); + } + + static EmailActionType _getEmailActionType(String value) { + return EmailActionType.values.firstWhere( + (type) => type.toString().split('.').last == value, + orElse: () => throw ArgumentError('Invalid email action type: $value'), + ); + } + @override List get props => [ sendingId,