diff --git a/server_settings/lib/server_settings/capability_server_settings.dart b/server_settings/lib/server_settings/capability_server_settings.dart new file mode 100644 index 000000000..cd55810f2 --- /dev/null +++ b/server_settings/lib/server_settings/capability_server_settings.dart @@ -0,0 +1,3 @@ +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; + +final capabilityServerSettings = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:settings')); \ No newline at end of file diff --git a/server_settings/lib/server_settings/converter/always_read_receipt_nullable_converter.dart b/server_settings/lib/server_settings/converter/always_read_receipt_nullable_converter.dart new file mode 100644 index 000000000..8427174f8 --- /dev/null +++ b/server_settings/lib/server_settings/converter/always_read_receipt_nullable_converter.dart @@ -0,0 +1,19 @@ +import 'package:json_annotation/json_annotation.dart'; + +class AlwaysReadReceiptNullableConverter implements JsonConverter { + const AlwaysReadReceiptNullableConverter(); + + @override + bool? fromJson(String? json) { + if (json == null) { + return null; + } else if (json == 'true') { + return true; + } else { + return false; + } + } + + @override + String? toJson(bool? object) => object?.toString(); +} \ No newline at end of file diff --git a/server_settings/lib/server_settings/converter/server_settings_id_nullable_converter.dart b/server_settings/lib/server_settings/converter/server_settings_id_nullable_converter.dart new file mode 100644 index 000000000..1537e26ce --- /dev/null +++ b/server_settings/lib/server_settings/converter/server_settings_id_nullable_converter.dart @@ -0,0 +1,13 @@ +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:server_settings/server_settings/server_settings_id.dart'; + +class ServerSettingsIdNullableConverter implements JsonConverter { + const ServerSettingsIdNullableConverter(); + + @override + ServerSettingsId? fromJson(String? json) => json != null ? ServerSettingsId(id: Id(json)) : null; + + @override + String? toJson(ServerSettingsId? object) => object?.id.value; +} diff --git a/server_settings/lib/server_settings/server_settings_id.dart b/server_settings/lib/server_settings/server_settings_id.dart new file mode 100644 index 000000000..046ecd685 --- /dev/null +++ b/server_settings/lib/server_settings/server_settings_id.dart @@ -0,0 +1,23 @@ +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; + +enum ServerSettingsIdType { + singleton('singleton'); + + const ServerSettingsIdType(this.value); + + final String value; +} + +class ServerSettingsId with EquatableMixin { + final Id id; + + ServerSettingsId({required this.id}); + + @override + List get props => [id]; +} + +extension ServerSettingsIdExtension on ServerSettingsId { + static ServerSettingsId get serverSettingsIdSingleton => ServerSettingsId(id: Id(ServerSettingsIdType.singleton.value)); +} diff --git a/server_settings/lib/server_settings/tmail_server_settings.dart b/server_settings/lib/server_settings/tmail_server_settings.dart new file mode 100644 index 000000000..648d15fc4 --- /dev/null +++ b/server_settings/lib/server_settings/tmail_server_settings.dart @@ -0,0 +1,50 @@ +import 'package:equatable/equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:server_settings/server_settings/converter/always_read_receipt_nullable_converter.dart'; +import 'package:server_settings/server_settings/converter/server_settings_id_nullable_converter.dart'; +import 'package:server_settings/server_settings/server_settings.dart'; +import 'package:server_settings/server_settings/server_settings_id.dart'; + +part 'tmail_server_settings.g.dart'; + +@JsonSerializable( + explicitToJson: true, + includeIfNull: false, + converters: [ServerSettingsIdNullableConverter()]) +class TMailServerSettings extends ServerSettings { + final ServerSettingsId? id; + final TMailServerSettingOptions? settings; + TMailServerSettings({this.id, this.settings}); + + factory TMailServerSettings.fromJson(Map json) => + _$TMailServerSettingsFromJson(json); + + Map toJson() => _$TMailServerSettingsToJson(this); + + @override + List get props => [id, settings]; +} + +@JsonSerializable( + explicitToJson: true, + includeIfNull: false, + converters: [AlwaysReadReceiptNullableConverter()]) +class TMailServerSettingOptions with EquatableMixin { + @JsonKey(name: 'read.receipts.always') + final bool? alwaysReadReceipts; + TMailServerSettingOptions({this.alwaysReadReceipts}); + + factory TMailServerSettingOptions.fromJson(Map json) => + _$TMailServerSettingOptionsFromJson(json); + + Map toJson() => _$TMailServerSettingOptionsToJson(this); + + TMailServerSettingOptions copyWith({bool? alwaysReadReceipts}) { + return TMailServerSettingOptions( + alwaysReadReceipts: alwaysReadReceipts ?? this.alwaysReadReceipts, + ); + } + + @override + List get props => [alwaysReadReceipts]; +}