From a98368e6a63c04e8f9336b8f80626070cbda7b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Thu, 19 Feb 2026 14:56:46 +0100 Subject: [PATCH] Allow to get scribePromptUrl from LinagoraEcosystem --- .../data/network/linagora_ecosystem_api.dart | 19 ++++++++++++++++++ .../linagora_ecosystem_repository_impl.dart | 13 ++++++++++++ .../linagora_ecosystem_converter.dart | 1 + .../linagora_ecosystem_identifier.dart | 1 + .../linagora_ecosystem_repository.dart | 3 +++ .../state/get_scribe_prompt_url_state.dart | 20 +++++++++++++++++++ .../get_scribe_prompt_url_interactor.dart | 20 +++++++++++++++++++ 7 files changed, 77 insertions(+) create mode 100644 lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart create mode 100644 lib/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart create mode 100644 lib/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart create mode 100644 lib/features/mailbox_dashboard/domain/usecases/get_scribe_prompt_url_interactor.dart diff --git a/lib/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart b/lib/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart index 59d462a99..9b661008f 100644 --- a/lib/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart +++ b/lib/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart @@ -58,4 +58,23 @@ class LinagoraEcosystemApi { } } } + + Future getScribePromptUrl(String baseUrl) async { + LinagoraEcosystem? linagoraEcosystem; + + try { + linagoraEcosystem = await getLinagoraEcosystem(baseUrl); + } catch (exception) { + if (exception is NotFoundLinagoraEcosystem) { + return null; + } + rethrow; + } + + final scribePromptProperty = + linagoraEcosystem.properties?[LinagoraEcosystemIdentifier.scribePromptUrl] as ApiUrlLinagoraEcosystem?; + log('LinagoraEcosystemApi::getScribePromptUrl: scribePromptProperty = $scribePromptProperty'); + + return scribePromptProperty?.value; + } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart b/lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart new file mode 100644 index 000000000..b73496f1d --- /dev/null +++ b/lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart @@ -0,0 +1,13 @@ +import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart'; + +class LinagoraEcosystemRepositoryImpl extends LinagoraEcosystemRepository { + final LinagoraEcosystemApi _linagoraEcosystemApi; + + LinagoraEcosystemRepositoryImpl(this._linagoraEcosystemApi); + + @override + Future getScribePromptUrl(String baseUrl) { + return _linagoraEcosystemApi.getScribePromptUrl(baseUrl); + } +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/converters/linagora_ecosystem_converter.dart b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/converters/linagora_ecosystem_converter.dart index e031963ae..59edd6f02 100644 --- a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/converters/linagora_ecosystem_converter.dart +++ b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/converters/linagora_ecosystem_converter.dart @@ -28,6 +28,7 @@ class LinagoraEcosystemConverter { LinagoraEcosystemIdentifier.linShare: AppLinagoraEcosystem.deserialize, LinagoraEcosystemIdentifier.mobileApps: MobileAppsLinagoraEcosystemConverter.deserialize, LinagoraEcosystemIdentifier.paywallURL: ApiUrlLinagoraEcosystem.deserialize, + LinagoraEcosystemIdentifier.scribePromptUrl: ApiUrlLinagoraEcosystem.deserialize, }); } diff --git a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart index f4a5f38c4..13306a28e 100644 --- a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart +++ b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart @@ -12,6 +12,7 @@ class LinagoraEcosystemIdentifier with EquatableMixin { static final twakeSync = LinagoraEcosystemIdentifier('Twake Sync'); static final linShare = LinagoraEcosystemIdentifier('LinShare'); static final paywallURL = LinagoraEcosystemIdentifier('paywallUrlTemplate'); + static final scribePromptUrl = LinagoraEcosystemIdentifier('scribePromptUrl'); final String value; diff --git a/lib/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart b/lib/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart new file mode 100644 index 000000000..461d3d4b0 --- /dev/null +++ b/lib/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart @@ -0,0 +1,3 @@ +abstract class LinagoraEcosystemRepository { + Future getScribePromptUrl(String baseUrl); +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart b/lib/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart new file mode 100644 index 000000000..06676923b --- /dev/null +++ b/lib/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart @@ -0,0 +1,20 @@ +import 'package:core/presentation/state/success.dart'; +import 'package:core/presentation/state/failure.dart'; + +class GetScribePromptUrlSuccess extends Success { + final String? promptUrl; + + GetScribePromptUrlSuccess(this.promptUrl); + + @override + List get props => [promptUrl]; +} + +class GetScribePromptUrlFailure extends Failure { + final dynamic exception; + + GetScribePromptUrlFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/domain/usecases/get_scribe_prompt_url_interactor.dart b/lib/features/mailbox_dashboard/domain/usecases/get_scribe_prompt_url_interactor.dart new file mode 100644 index 000000000..571a19cac --- /dev/null +++ b/lib/features/mailbox_dashboard/domain/usecases/get_scribe_prompt_url_interactor.dart @@ -0,0 +1,20 @@ +import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart'; + +class GetScribePromptUrlInteractor { + final LinagoraEcosystemRepository _linagoraEcosystemRepository; + + GetScribePromptUrlInteractor(this._linagoraEcosystemRepository); + + Stream> execute(String baseUrl) async* { + try { + final promptUrl = await _linagoraEcosystemRepository.getScribePromptUrl(baseUrl); + + yield Right(GetScribePromptUrlSuccess(promptUrl)); + } catch (e) { + yield Left(GetScribePromptUrlFailure(e)); + } + } +} \ No newline at end of file