From 8c16bd1fad37ff21afcd2d8476939768224fbc3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Thu, 11 Dec 2025 16:29:42 +0100 Subject: [PATCH] Add AI capability --- .../domain/extensions/session_extensions.dart | 17 ++++++++++++++++ model/lib/ai/ai_capability.dart | 20 +++++++++++++++++++ model/lib/ai/capability_ai.dart | 3 +++ 3 files changed, 40 insertions(+) create mode 100644 model/lib/ai/ai_capability.dart create mode 100644 model/lib/ai/capability_ai.dart diff --git a/lib/features/home/domain/extensions/session_extensions.dart b/lib/features/home/domain/extensions/session_extensions.dart index 67af48f84..9e7006cd0 100644 --- a/lib/features/home/domain/extensions/session_extensions.dart +++ b/lib/features/home/domain/extensions/session_extensions.dart @@ -12,6 +12,8 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:model/ai/ai_capability.dart'; +import 'package:model/ai/capability_ai.dart'; import 'package:model/download_all/download_all_capability.dart'; import 'package:model/mailbox/mailbox_constants.dart'; import 'package:model/model.dart'; @@ -33,6 +35,7 @@ extension SessionExtensions on Session { linagoraDownloadAllCapability: DownloadAllCapability.deserialize, capabilityServerSettings: SettingsCapability.deserialize, linagoraSaaSCapability: SaaSAccountCapability.deserialize, + capabilityAI: AICapability.deserialize, }; Map toJson() { @@ -165,4 +168,18 @@ extension SessionExtensions on Session { return null; } } + + AICapability? getAICapability(AccountId accountId) { + try { + final aiCapability = getCapabilityProperties( + accountId, + capabilityAI, + ); + log('SessionExtensions::getAICapability:aiCapability = $aiCapability'); + return aiCapability; + } catch (e) { + logError('SessionExtensions::getAICapability():[Exception] $e'); + return null; + } + } } \ No newline at end of file diff --git a/model/lib/ai/ai_capability.dart b/model/lib/ai/ai_capability.dart new file mode 100644 index 000000000..657316cd7 --- /dev/null +++ b/model/lib/ai/ai_capability.dart @@ -0,0 +1,20 @@ +import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'ai_capability.g.dart'; + +@JsonSerializable(includeIfNull: false) +class AICapability extends CapabilityProperties { + AICapability({this.scribeEndpoint}); + + final String? scribeEndpoint; + + factory AICapability.fromJson(Map json) => _$AICapabilityFromJson(json); + + Map toJson() => _$AICapabilityToJson(this); + + factory AICapability.deserialize(Map json) => _$AICapabilityFromJson(json); + + @override + List get props => [scribeEndpoint]; +} diff --git a/model/lib/ai/capability_ai.dart b/model/lib/ai/capability_ai.dart new file mode 100644 index 000000000..392e1f8b2 --- /dev/null +++ b/model/lib/ai/capability_ai.dart @@ -0,0 +1,3 @@ +import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; + +final capabilityAI = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:aibot'));