diff --git a/lib/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart b/lib/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart new file mode 100644 index 000000000..702f0da46 --- /dev/null +++ b/lib/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart @@ -0,0 +1,5 @@ +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; + +abstract class LinagoraEcosystemDatasource { + Future getLinagoraEcosystem(String baseUrl); +} diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/linagora_ecosystem_datasource_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/linagora_ecosystem_datasource_impl.dart new file mode 100644 index 000000000..bd250fc0c --- /dev/null +++ b/lib/features/mailbox_dashboard/data/datasource_impl/linagora_ecosystem_datasource_impl.dart @@ -0,0 +1,21 @@ +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; +import 'package:tmail_ui_user/main/exceptions/thrower/exception_thrower.dart'; + +class LinagoraEcosystemDatasourceImpl extends LinagoraEcosystemDatasource { + final LinagoraEcosystemApi _linagoraEcosystemApi; + final ExceptionThrower _exceptionThrower; + + LinagoraEcosystemDatasourceImpl( + this._linagoraEcosystemApi, + this._exceptionThrower, + ); + + @override + Future getLinagoraEcosystem(String baseUrl) { + return Future.sync(() async { + return await _linagoraEcosystemApi.getLinagoraEcosystem(baseUrl); + }).catchError(_exceptionThrower.throwException); + } +} 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 index 9edcbc55c..fab0841d9 100644 --- a/lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart +++ b/lib/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart @@ -1,15 +1,14 @@ -import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart'; class LinagoraEcosystemRepositoryImpl extends LinagoraEcosystemRepository { - final LinagoraEcosystemApi _linagoraEcosystemApi; + final LinagoraEcosystemDatasource _ecosystemDatasource; - LinagoraEcosystemRepositoryImpl(this._linagoraEcosystemApi); + LinagoraEcosystemRepositoryImpl(this._ecosystemDatasource); @override Future getLinagoraEcosystem(String baseUrl) { - return _linagoraEcosystemApi.getLinagoraEcosystem(baseUrl); + return _ecosystemDatasource.getLinagoraEcosystem(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 59edd6f02..9d866d12c 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 @@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosyst import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_properties.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart'; class LinagoraEcosystemConverter { static final defaultConverter = LinagoraEcosystemConverter(); @@ -29,6 +30,7 @@ class LinagoraEcosystemConverter { LinagoraEcosystemIdentifier.mobileApps: MobileAppsLinagoraEcosystemConverter.deserialize, LinagoraEcosystemIdentifier.paywallURL: ApiUrlLinagoraEcosystem.deserialize, LinagoraEcosystemIdentifier.scribePromptUrl: ApiUrlLinagoraEcosystem.deserialize, + LinagoraEcosystemIdentifier.sentryConfig: SentryConfigLinagoraEcosystem.deserialize, }); } diff --git a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart index 80cb52def..db5fedee8 100644 --- a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart +++ b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart @@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosyst import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_identifier.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_properties.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/mobile_apps_linagora_ecosystem.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart'; class LinagoraEcosystem with EquatableMixin { final Map? properties; @@ -48,4 +49,8 @@ extension LinagoraEcosystemExtension on LinagoraEcosystem { String? get scribePromptUrl => (properties?[LinagoraEcosystemIdentifier.scribePromptUrl] as ApiUrlLinagoraEcosystem?)?.value; + + SentryConfigLinagoraEcosystem? get sentryConfigEcosystem => + (properties?[LinagoraEcosystemIdentifier.sentryConfig] + as SentryConfigLinagoraEcosystem?); } \ No newline at end of file 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 13306a28e..43649cd02 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 @@ -13,6 +13,7 @@ class LinagoraEcosystemIdentifier with EquatableMixin { static final linShare = LinagoraEcosystemIdentifier('LinShare'); static final paywallURL = LinagoraEcosystemIdentifier('paywallUrlTemplate'); static final scribePromptUrl = LinagoraEcosystemIdentifier('scribePromptUrl'); + static final sentryConfig = LinagoraEcosystemIdentifier('sentry'); final String value; diff --git a/lib/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart new file mode 100644 index 000000000..7f13757b2 --- /dev/null +++ b/lib/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart @@ -0,0 +1,53 @@ +import 'package:core/utils/application_manager.dart'; +import 'package:core/utils/sentry/sentry_config.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/empty_linagora_ecosystem.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem_properties.dart'; + +part 'sentry_config_linagora_ecosystem.g.dart'; + +@JsonSerializable(explicitToJson: true, includeIfNull: false) +class SentryConfigLinagoraEcosystem extends LinagoraEcosystemProperties { + @JsonKey(fromJson: _parseBool) + final bool? enabled; + final String? dsn; + final String? environment; + + SentryConfigLinagoraEcosystem({this.enabled, this.dsn, this.environment}); + + factory SentryConfigLinagoraEcosystem.fromJson(Map json) => + _$SentryConfigLinagoraEcosystemFromJson(json); + + static bool? _parseBool(dynamic value) { + if (value == null) return null; + if (value is bool) return value; + if (value is String) return value.toLowerCase() == 'true'; + return null; + } + + Map toJson() => _$SentryConfigLinagoraEcosystemToJson(this); + + static LinagoraEcosystemProperties? deserialize(dynamic json) { + if (json is Map) { + return SentryConfigLinagoraEcosystem.fromJson(json); + } else { + return EmptyLinagoraEcosystem(); + } + } + + @override + List get props => [enabled, dsn, environment]; +} + +extension SentryConfigLinagoraEcosystemExtension on SentryConfigLinagoraEcosystem { + Future toSentryConfig() async { + final appVersion = await ApplicationManager().getAppVersion(); + + return SentryConfig( + dsn: dsn ?? '', + environment: environment ?? '', + release: appVersion, + isAvailable: enabled ?? false, + ); + } +} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_state.dart b/lib/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_state.dart index 27736c1a0..1d63d49c3 100644 --- a/lib/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_state.dart +++ b/lib/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_state.dart @@ -2,6 +2,8 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; +class GettingLinagoraEcosystem extends LoadingState {} + class GetLinagoraEcosystemSuccess extends Success { final LinagoraEcosystem linagoraEcosystem; diff --git a/lib/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart b/lib/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart index fddeb9077..1bd36e375 100644 --- a/lib/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart +++ b/lib/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart @@ -10,6 +10,7 @@ class GetLinagoraEcosystemInteractor { Stream> execute(String baseUrl) async* { try { + yield Right(GettingLinagoraEcosystem()); final linagoraEcosystem = await _linagoraEcosystemRepository.getLinagoraEcosystem(baseUrl); yield Right(GetLinagoraEcosystemSuccess(linagoraEcosystem)); diff --git a/lib/features/mailbox_dashboard/presentation/bindings/linagora_ecosystem_interactor_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/linagora_ecosystem_interactor_bindings.dart new file mode 100644 index 000000000..2b4e2cfec --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/bindings/linagora_ecosystem_interactor_bindings.dart @@ -0,0 +1,53 @@ +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/linagora_ecosystem_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/linagora_ecosystem_datasource_impl.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart'; +import 'package:tmail_ui_user/main/exceptions/thrower/remote_exception_thrower.dart'; + +class LinagoraEcosystemInteractorBindings extends InteractorsBindings { + @override + void bindingsDataSource() { + Get.lazyPut( + () => Get.find(), + ); + } + + @override + void bindingsDataSourceImpl() { + Get.lazyPut( + () => LinagoraEcosystemDatasourceImpl( + Get.find(), + Get.find(), + ), + ); + } + + @override + void bindingsInteractor() { + Get.lazyPut( + () => GetLinagoraEcosystemInteractor( + Get.find(), + ), + ); + } + + @override + void bindingsRepository() { + Get.lazyPut( + () => Get.find(), + ); + } + + @override + void bindingsRepositoryImpl() { + Get.lazyPut( + () => LinagoraEcosystemRepositoryImpl( + Get.find(), + ), + ); + } +} diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index 9ecd3503c..88a41a42a 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -86,19 +86,16 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_o import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/app_grid_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/linagora_ecosystem_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/search_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/spam_report_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/app_grid_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/linagora_ecosystem_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/spam_report_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_app_dashboard_configuration_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_app_grid_linagra_ecosystem_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_linagora_system_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart'; @@ -113,6 +110,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_e import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_spam_report_state_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/email_action_interactor_bindings.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/linagora_ecosystem_interactor_bindings.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; @@ -385,7 +383,6 @@ class MailboxDashBoardBindings extends BaseBindings { Get.lazyPut(() => EmptySpamFolderInteractor(Get.find())); Get.lazyPut(() => GetAppDashboardConfigurationInteractor(Get.find())); Get.lazyPut(() => GetAppGridLinagraEcosystemInteractor(Get.find())); - Get.lazyPut(() => GetLinagoraEcosystemInteractor(Get.find())); Get.lazyPut(() => GetEmailByIdInteractor( Get.find(), Get.find())); @@ -435,6 +432,7 @@ class MailboxDashBoardBindings extends BaseBindings { ); EmailActionInteractorBindings(Get.find()).dependencies(); + LinagoraEcosystemInteractorBindings().dependencies(); } @override @@ -450,7 +448,6 @@ class MailboxDashBoardBindings extends BaseBindings { Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); - Get.lazyPut(() => Get.find()); } @override @@ -503,6 +500,5 @@ class MailboxDashBoardBindings extends BaseBindings { DataSourceType.network: Get.find(), DataSourceType.local: Get.find() },)); - Get.lazyPut(() => LinagoraEcosystemRepositoryImpl(Get.find())); } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 705bab7ba..354afc311 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -109,6 +109,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_ac import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/exceptions/spam_report_exception.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_state.dart'; @@ -153,6 +154,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_text_formatting_menu_state_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/sentry_ecosystem_mixin.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart'; @@ -162,7 +164,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/sear import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_rule_filter_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_ai_scribe_config_state.dart'; @@ -241,7 +242,8 @@ class MailboxDashBoardController extends ReloadableController AiScribeMixin, SearchLabelFilterModalMixin, AddLabelToEmailMixin, - HandleTeamMailboxMixin { + HandleTeamMailboxMixin, + SentryEcosystemMixin { final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find(); final EmailReceiveManager _emailReceiveManager = Get.find(); @@ -873,8 +875,12 @@ class MailboxDashBoardController extends ReloadableController await super.injectFCMBindings(session, accountId); await LocalNotificationManager.instance.recreateStreamController(); _registerLocalNotificationStreamListener(); - } catch (e) { - logWarning('MailboxDashBoardController::injectFCMBindings(): $e'); + } catch (e, st) { + logError( + 'MailboxDashBoardController::injectFCMBindings():', + exception: e, + stackTrace: st, + ); } } @@ -900,15 +906,19 @@ class MailboxDashBoardController extends ReloadableController accountId.value = currentAccountId; synchronizeOwnEmailAddress(session.getOwnEmailAddressOrEmpty()); - SentryManager.instance.setUser( - SentryUser( - id: currentAccountId.asString, - name: session.getUserDisplayName(), - username: session.username.value, - email: session.getOwnEmailAddressOrEmpty(), - ) + final sentryUser = SentryUser( + id: currentAccountId.asString, + name: session.getUserDisplayName(), + username: session.username.value, + email: session.getOwnEmailAddressOrEmpty(), ); + if (PlatformInfo.isWeb) { + SentryManager.instance.setUser(sentryUser); + } else { + initSentryUser(sentryUser); + } + _setUpMinInputLengthAutocomplete(); injectAutoCompleteBindings(session, currentAccountId); injectRuleFilterBindings(session, currentAccountId); @@ -3449,7 +3459,7 @@ class MailboxDashBoardController extends ReloadableController progressStateController.close(); _refreshActionEventController.close(); _notificationManager.closeStream(); - _fcmService.closeStream(); + unawaited(_fcmService.closeStream()); ApplicationManager().releaseUserAgent(); BackButtonInterceptor.removeByName(AppRoutes.dashboard); _identities = null; diff --git a/lib/features/mailbox_dashboard/presentation/extensions/ai_scribe/setup_scribe_prompt_url_extension.dart b/lib/features/mailbox_dashboard/presentation/extensions/ai_scribe/setup_scribe_prompt_url_extension.dart index 16e055966..2eff73e6d 100644 --- a/lib/features/mailbox_dashboard/presentation/extensions/ai_scribe/setup_scribe_prompt_url_extension.dart +++ b/lib/features/mailbox_dashboard/presentation/extensions/ai_scribe/setup_scribe_prompt_url_extension.dart @@ -10,6 +10,7 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController { void loadLinagoraEcosystem() { if (cachedLinagoraEcosystem != null) { _applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl); + _setUpSentry(cachedLinagoraEcosystem!); return; } @@ -30,6 +31,7 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController { void handleGetLinagoraEcosystemSuccess(GetLinagoraEcosystemSuccess success) { cachedLinagoraEcosystem = success.linagoraEcosystem; _applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl); + _setUpSentry(cachedLinagoraEcosystem!); } void handleGetLinagoraEcosystemFailure(GetLinagoraEcosystemFailure failure) { @@ -47,4 +49,15 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController { logWarning('SetupScribePromptUrlExtension::_applyScribePromptUrl: PromptService not found'); } } + + void _setUpSentry(LinagoraEcosystem ecosystem) { + final sentryConfigEcosystem = ecosystem.sentryConfigEcosystem; + if (sentryConfigEcosystem != null) { + setUpSentry(sentryConfigEcosystem); + } else { + logWarning( + 'LinagoraEcosystemController:_setUpSentry: Sentry config ecosystem is null', + ); + } + } } diff --git a/lib/features/mailbox_dashboard/presentation/mixin/sentry_ecosystem_mixin.dart b/lib/features/mailbox_dashboard/presentation/mixin/sentry_ecosystem_mixin.dart new file mode 100644 index 000000000..a74473f4d --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/mixin/sentry_ecosystem_mixin.dart @@ -0,0 +1,79 @@ +import 'package:core/presentation/extensions/string_extension.dart'; +import 'package:core/utils/app_logger.dart'; +import 'package:core/utils/sentry/sentry_config.dart'; +import 'package:core/utils/sentry/sentry_manager.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:tmail_ui_user/features/caching/caching_manager.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; + +mixin SentryEcosystemMixin { + SentryUser? _sentryUser; + + void initSentryUser(SentryUser? newSentryUser) { + _sentryUser = newSentryUser; + } + + Future setUpSentry( + SentryConfigLinagoraEcosystem ecosystemConfig, + ) async { + final dsn = ecosystemConfig.dsn?.trimmed; + final env = ecosystemConfig.environment?.trimmed; + final isValid = ecosystemConfig.enabled == true + && (dsn?.isNotEmpty ?? false) + && (env?.isNotEmpty ?? false); + + if (!isValid) { + logWarning( + 'SentryEcosystemMixin::setUpSentry: config invalid ' + '(enabled=${ecosystemConfig.enabled}, dsn=${dsn?.isNotEmpty}, env=${env?.isNotEmpty})', + ); + await clearSentryConfiguration(); + return; + } + + final sentryConfig = await ecosystemConfig.toSentryConfig(); + + await SentryManager.instance.initializeWithSentryConfig(sentryConfig); + + _setupSentryUser(); + + await _saveSentryConfiguration( + sentryConfig: sentryConfig, + sentryUser: _sentryUser, + ); + } + + void _setupSentryUser() { + if (_sentryUser == null) return; + + SentryManager.instance.setUser(_sentryUser!); + } + + Future _saveSentryConfiguration({ + required SentryConfig sentryConfig, + SentryUser? sentryUser, + }) async { + final cachingManager = getBinding(); + if (cachingManager != null) { + await cachingManager.saveSentryConfiguration(sentryConfig); + + if (sentryUser != null) { + await cachingManager.saveSentryUser(sentryUser); + } + } else { + logTrace( + 'SentryEcosystemMixin::saveSentryConfiguration: CachingManager is null'); + } + } + + Future clearSentryConfiguration() async { + final cachingManager = getBinding(); + if (cachingManager != null) { + await cachingManager.clearSentryConfiguration(); + } else { + logTrace( + 'SentryEcosystemMixin::clearSentryConfiguration: CachingManager is null'); + } + } +}