diff --git a/email_recovery/lib/email_recovery/capability_deleted_messages_vault.dart b/email_recovery/lib/email_recovery/capability_deleted_messages_vault.dart new file mode 100644 index 000000000..6b7b8ca87 --- /dev/null +++ b/email_recovery/lib/email_recovery/capability_deleted_messages_vault.dart @@ -0,0 +1,3 @@ +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; + +final capabilityDeletedMessagesVault = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:messages:vault')); \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/converter/email_recovery_action_id_converter.dart b/email_recovery/lib/email_recovery/converter/email_recovery_action_id_converter.dart new file mode 100644 index 000000000..751fe4915 --- /dev/null +++ b/email_recovery/lib/email_recovery/converter/email_recovery_action_id_converter.dart @@ -0,0 +1,13 @@ +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:json_annotation/json_annotation.dart'; + +class EmailRecoveryActionIdConverter implements JsonConverter { + const EmailRecoveryActionIdConverter(); + + @override + EmailRecoveryActionId fromJson(String json) => EmailRecoveryActionId(Id(json)); + + @override + String toJson(EmailRecoveryActionId object) => object.id.value; +} \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/converter/status_converter.dart b/email_recovery/lib/email_recovery/converter/status_converter.dart new file mode 100644 index 000000000..b9ade979b --- /dev/null +++ b/email_recovery/lib/email_recovery/converter/status_converter.dart @@ -0,0 +1,12 @@ +import 'package:email_recovery/email_recovery/status.dart'; +import 'package:json_annotation/json_annotation.dart'; + +class StatusConverter implements JsonConverter { + const StatusConverter(); + + @override + Status fromJson(String json) => Status(json); + + @override + String toJson(Status object) => object.value; +} \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/email_recovery_action.dart b/email_recovery/lib/email_recovery/email_recovery_action.dart new file mode 100644 index 000000000..63413277c --- /dev/null +++ b/email_recovery/lib/email_recovery/email_recovery_action.dart @@ -0,0 +1,97 @@ +import 'package:email_recovery/email_recovery/converter/status_converter.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:email_recovery/email_recovery/status.dart'; +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:email_recovery/email_recovery/converter/email_recovery_action_id_converter.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:jmap_dart_client/jmap/core/utc_date.dart'; +import 'package:jmap_dart_client/http/converter/utc_date_nullable_converter.dart'; +import 'package:jmap_dart_client/http/converter/unsigned_int_nullable_converter.dart'; + +part 'email_recovery_action.g.dart'; + +@EmailRecoveryActionIdConverter() +@UTCDateNullableConverter() +@UnsignedIntNullableConverter() +@StatusConverter() +@JsonSerializable(explicitToJson: true, includeIfNull: false) +class EmailRecoveryAction with EquatableMixin { + final EmailRecoveryActionId? id; + final UTCDate? deletedBefore; + final UTCDate? deletedAfter; + final UTCDate? receivedBefore; + final UTCDate? receivedAfter; + final bool? hasAttachment; + final String? subject; + final String? sender; + final List? recipients; + final UnsignedInt? successfulRestoreCount; + final UnsignedInt? errorRestoreCount; + final Status? status; + + EmailRecoveryAction({ + this.id, + this.deletedBefore, + this.deletedAfter, + this.receivedBefore, + this.receivedAfter, + this.hasAttachment, + this.subject, + this.sender, + this.recipients, + this.successfulRestoreCount, + this.errorRestoreCount, + this.status, + }); + + factory EmailRecoveryAction.fromJson(Map json) => + _$EmailRecoveryActionFromJson(json); + + Map toJson() => _$EmailRecoveryActionToJson(this); + + EmailRecoveryAction copyWith({ + EmailRecoveryActionId? id, + UTCDate? deletedBefore, + UTCDate? deletedAfter, + UTCDate? receivedBefore, + UTCDate? receivedAfter, + bool? hasAttachment, + String? subject, + String? sender, + List? recipients, + UnsignedInt? successfulRestoreCount, + UnsignedInt? errorRestoreCount, + Status? status, + }) { + return EmailRecoveryAction( + id: id ?? this.id, + deletedBefore: deletedBefore ?? this.deletedBefore, + deletedAfter: deletedAfter ?? this.deletedAfter, + receivedBefore: receivedBefore ?? this.receivedBefore, + receivedAfter: receivedAfter ?? this.receivedAfter, + hasAttachment: hasAttachment ?? this.hasAttachment, + subject: subject ?? this.subject, + sender: sender ?? this.sender, + recipients: recipients ?? this.recipients, + successfulRestoreCount: successfulRestoreCount ?? this.successfulRestoreCount, + errorRestoreCount: errorRestoreCount ?? this.errorRestoreCount, + status: status ?? this.status, + ); + } + + List get props => [ + id, + deletedBefore, + deletedAfter, + receivedBefore, + receivedAfter, + hasAttachment, + subject, + sender, + recipients, + successfulRestoreCount, + errorRestoreCount, + status, + ]; +} \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/email_recovery_action_id.dart b/email_recovery/lib/email_recovery/email_recovery_action_id.dart new file mode 100644 index 000000000..0875a58ac --- /dev/null +++ b/email_recovery/lib/email_recovery/email_recovery_action_id.dart @@ -0,0 +1,15 @@ +import 'package:email_recovery/email_recovery/converter/email_recovery_action_id_converter.dart'; +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/http/converter/id_converter.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; + +@EmailRecoveryActionIdConverter() +@IdConverter() +class EmailRecoveryActionId with EquatableMixin { + final Id id; + + EmailRecoveryActionId(this.id); + + @override + List get props => [id]; +} \ No newline at end of file diff --git a/email_recovery/lib/email_recovery/status.dart b/email_recovery/lib/email_recovery/status.dart new file mode 100644 index 000000000..fe2313961 --- /dev/null +++ b/email_recovery/lib/email_recovery/status.dart @@ -0,0 +1,16 @@ +import 'package:equatable/equatable.dart'; + +class Status with EquatableMixin { + static final waiting = Status('waiting'); + static final inProgress = Status('inProgress'); + static final completed = Status('completed'); + static final failed = Status('failed'); + static final canceled = Status('canceled'); + + final String value; + + Status(this.value); + + @override + List get props => [value]; +} \ No newline at end of file