TF-4268 Initialize Sentry from Linagora Ecosystem configuration

This commit is contained in:
dab246
2026-04-07 16:10:57 +07:00
committed by Dat H. Pham
parent c9ec1c2820
commit d2566dd9aa
14 changed files with 263 additions and 23 deletions
@@ -0,0 +1,5 @@
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/linagora_ecosystem.dart';
abstract class LinagoraEcosystemDatasource {
Future<LinagoraEcosystem> getLinagoraEcosystem(String baseUrl);
}
@@ -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<LinagoraEcosystem> getLinagoraEcosystem(String baseUrl) {
return Future.sync(() async {
return await _linagoraEcosystemApi.getLinagoraEcosystem(baseUrl);
}).catchError(_exceptionThrower.throwException);
}
}
@@ -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/linagora_ecosystem/linagora_ecosystem.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/linagora_ecosystem_repository.dart';
class LinagoraEcosystemRepositoryImpl extends LinagoraEcosystemRepository { class LinagoraEcosystemRepositoryImpl extends LinagoraEcosystemRepository {
final LinagoraEcosystemApi _linagoraEcosystemApi; final LinagoraEcosystemDatasource _ecosystemDatasource;
LinagoraEcosystemRepositoryImpl(this._linagoraEcosystemApi); LinagoraEcosystemRepositoryImpl(this._ecosystemDatasource);
@override @override
Future<LinagoraEcosystem> getLinagoraEcosystem(String baseUrl) { Future<LinagoraEcosystem> getLinagoraEcosystem(String baseUrl) {
return _linagoraEcosystemApi.getLinagoraEcosystem(baseUrl); return _ecosystemDatasource.getLinagoraEcosystem(baseUrl);
} }
} }
@@ -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.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_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/linagora_ecosystem_properties.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/linagora_ecosystem/sentry_config_linagora_ecosystem.dart';
class LinagoraEcosystemConverter { class LinagoraEcosystemConverter {
static final defaultConverter = LinagoraEcosystemConverter(); static final defaultConverter = LinagoraEcosystemConverter();
@@ -29,6 +30,7 @@ class LinagoraEcosystemConverter {
LinagoraEcosystemIdentifier.mobileApps: MobileAppsLinagoraEcosystemConverter.deserialize, LinagoraEcosystemIdentifier.mobileApps: MobileAppsLinagoraEcosystemConverter.deserialize,
LinagoraEcosystemIdentifier.paywallURL: ApiUrlLinagoraEcosystem.deserialize, LinagoraEcosystemIdentifier.paywallURL: ApiUrlLinagoraEcosystem.deserialize,
LinagoraEcosystemIdentifier.scribePromptUrl: ApiUrlLinagoraEcosystem.deserialize, LinagoraEcosystemIdentifier.scribePromptUrl: ApiUrlLinagoraEcosystem.deserialize,
LinagoraEcosystemIdentifier.sentryConfig: SentryConfigLinagoraEcosystem.deserialize,
}); });
} }
@@ -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_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/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/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 { class LinagoraEcosystem with EquatableMixin {
final Map<LinagoraEcosystemIdentifier, LinagoraEcosystemProperties?>? properties; final Map<LinagoraEcosystemIdentifier, LinagoraEcosystemProperties?>? properties;
@@ -48,4 +49,8 @@ extension LinagoraEcosystemExtension on LinagoraEcosystem {
String? get scribePromptUrl => String? get scribePromptUrl =>
(properties?[LinagoraEcosystemIdentifier.scribePromptUrl] as ApiUrlLinagoraEcosystem?)?.value; (properties?[LinagoraEcosystemIdentifier.scribePromptUrl] as ApiUrlLinagoraEcosystem?)?.value;
SentryConfigLinagoraEcosystem? get sentryConfigEcosystem =>
(properties?[LinagoraEcosystemIdentifier.sentryConfig]
as SentryConfigLinagoraEcosystem?);
} }
@@ -13,6 +13,7 @@ class LinagoraEcosystemIdentifier with EquatableMixin {
static final linShare = LinagoraEcosystemIdentifier('LinShare'); static final linShare = LinagoraEcosystemIdentifier('LinShare');
static final paywallURL = LinagoraEcosystemIdentifier('paywallUrlTemplate'); static final paywallURL = LinagoraEcosystemIdentifier('paywallUrlTemplate');
static final scribePromptUrl = LinagoraEcosystemIdentifier('scribePromptUrl'); static final scribePromptUrl = LinagoraEcosystemIdentifier('scribePromptUrl');
static final sentryConfig = LinagoraEcosystemIdentifier('sentry');
final String value; final String value;
@@ -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<String, dynamic> 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<String, dynamic> toJson() => _$SentryConfigLinagoraEcosystemToJson(this);
static LinagoraEcosystemProperties? deserialize(dynamic json) {
if (json is Map<String, dynamic>) {
return SentryConfigLinagoraEcosystem.fromJson(json);
} else {
return EmptyLinagoraEcosystem();
}
}
@override
List<Object?> get props => [enabled, dsn, environment];
}
extension SentryConfigLinagoraEcosystemExtension on SentryConfigLinagoraEcosystem {
Future<SentryConfig> toSentryConfig() async {
final appVersion = await ApplicationManager().getAppVersion();
return SentryConfig(
dsn: dsn ?? '',
environment: environment ?? '',
release: appVersion,
isAvailable: enabled ?? false,
);
}
}
@@ -2,6 +2,8 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
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.dart';
class GettingLinagoraEcosystem extends LoadingState {}
class GetLinagoraEcosystemSuccess extends Success { class GetLinagoraEcosystemSuccess extends Success {
final LinagoraEcosystem linagoraEcosystem; final LinagoraEcosystem linagoraEcosystem;
@@ -10,6 +10,7 @@ class GetLinagoraEcosystemInteractor {
Stream<Either<Failure, Success>> execute(String baseUrl) async* { Stream<Either<Failure, Success>> execute(String baseUrl) async* {
try { try {
yield Right(GettingLinagoraEcosystem());
final linagoraEcosystem = await _linagoraEcosystemRepository.getLinagoraEcosystem(baseUrl); final linagoraEcosystem = await _linagoraEcosystemRepository.getLinagoraEcosystem(baseUrl);
yield Right(GetLinagoraEcosystemSuccess(linagoraEcosystem)); yield Right(GetLinagoraEcosystemSuccess(linagoraEcosystem));
@@ -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<LinagoraEcosystemDatasource>(
() => Get.find<LinagoraEcosystemDatasourceImpl>(),
);
}
@override
void bindingsDataSourceImpl() {
Get.lazyPut(
() => LinagoraEcosystemDatasourceImpl(
Get.find<LinagoraEcosystemApi>(),
Get.find<RemoteExceptionThrower>(),
),
);
}
@override
void bindingsInteractor() {
Get.lazyPut(
() => GetLinagoraEcosystemInteractor(
Get.find<LinagoraEcosystemRepository>(),
),
);
}
@override
void bindingsRepository() {
Get.lazyPut<LinagoraEcosystemRepository>(
() => Get.find<LinagoraEcosystemRepositoryImpl>(),
);
}
@override
void bindingsRepositoryImpl() {
Get.lazyPut(
() => LinagoraEcosystemRepositoryImpl(
Get.find<LinagoraEcosystemDatasource>(),
),
);
}
}
@@ -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/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/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/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/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/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/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/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/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/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_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_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_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_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_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_spam_report_state_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_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_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/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/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/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/app_grid_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_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<ThreadRepository>())); Get.lazyPut(() => EmptySpamFolderInteractor(Get.find<ThreadRepository>()));
Get.lazyPut(() => GetAppDashboardConfigurationInteractor(Get.find<AppGridRepository>())); Get.lazyPut(() => GetAppDashboardConfigurationInteractor(Get.find<AppGridRepository>()));
Get.lazyPut(() => GetAppGridLinagraEcosystemInteractor(Get.find<AppGridRepository>())); Get.lazyPut(() => GetAppGridLinagraEcosystemInteractor(Get.find<AppGridRepository>()));
Get.lazyPut(() => GetLinagoraEcosystemInteractor(Get.find<LinagoraEcosystemRepository>()));
Get.lazyPut(() => GetEmailByIdInteractor( Get.lazyPut(() => GetEmailByIdInteractor(
Get.find<ThreadRepository>(), Get.find<ThreadRepository>(),
Get.find<EmailRepository>())); Get.find<EmailRepository>()));
@@ -435,6 +432,7 @@ class MailboxDashBoardBindings extends BaseBindings {
); );
EmailActionInteractorBindings(Get.find<EmailRepository>()).dependencies(); EmailActionInteractorBindings(Get.find<EmailRepository>()).dependencies();
LinagoraEcosystemInteractorBindings().dependencies();
} }
@override @override
@@ -450,7 +448,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut<ServerSettingsRepository>(() => Get.find<ServerSettingsRepositoryImpl>()); Get.lazyPut<ServerSettingsRepository>(() => Get.find<ServerSettingsRepositoryImpl>());
Get.lazyPut<IdentityCreatorRepository>(() => Get.find<IdentityCreatorRepositoryImpl>()); Get.lazyPut<IdentityCreatorRepository>(() => Get.find<IdentityCreatorRepositoryImpl>());
Get.lazyPut<AppGridRepository>(() => Get.find<AppGridRepositoryImpl>()); Get.lazyPut<AppGridRepository>(() => Get.find<AppGridRepositoryImpl>());
Get.lazyPut<LinagoraEcosystemRepository>(() => Get.find<LinagoraEcosystemRepositoryImpl>());
} }
@override @override
@@ -503,6 +500,5 @@ class MailboxDashBoardBindings extends BaseBindings {
DataSourceType.network: Get.find<AppGridDatasource>(), DataSourceType.network: Get.find<AppGridDatasource>(),
DataSourceType.local: Get.find<LocalAppGridDatasourceImpl>() DataSourceType.local: Get.find<LocalAppGridDatasourceImpl>()
},)); },));
Get.lazyPut(() => LinagoraEcosystemRepositoryImpl(Get.find<LinagoraEcosystemApi>()));
} }
} }
@@ -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/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.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/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/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_composer_cache_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_linagora_ecosystem_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_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/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/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/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/download/download_task_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_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/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/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/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/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/create_new_rule_filter_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_ai_scribe_config_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, AiScribeMixin,
SearchLabelFilterModalMixin, SearchLabelFilterModalMixin,
AddLabelToEmailMixin, AddLabelToEmailMixin,
HandleTeamMailboxMixin { HandleTeamMailboxMixin,
SentryEcosystemMixin {
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>(); final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>(); final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
@@ -873,8 +875,12 @@ class MailboxDashBoardController extends ReloadableController
await super.injectFCMBindings(session, accountId); await super.injectFCMBindings(session, accountId);
await LocalNotificationManager.instance.recreateStreamController(); await LocalNotificationManager.instance.recreateStreamController();
_registerLocalNotificationStreamListener(); _registerLocalNotificationStreamListener();
} catch (e) { } catch (e, st) {
logWarning('MailboxDashBoardController::injectFCMBindings(): $e'); logError(
'MailboxDashBoardController::injectFCMBindings():',
exception: e,
stackTrace: st,
);
} }
} }
@@ -900,15 +906,19 @@ class MailboxDashBoardController extends ReloadableController
accountId.value = currentAccountId; accountId.value = currentAccountId;
synchronizeOwnEmailAddress(session.getOwnEmailAddressOrEmpty()); synchronizeOwnEmailAddress(session.getOwnEmailAddressOrEmpty());
SentryManager.instance.setUser( final sentryUser = SentryUser(
SentryUser( id: currentAccountId.asString,
id: currentAccountId.asString, name: session.getUserDisplayName(),
name: session.getUserDisplayName(), username: session.username.value,
username: session.username.value, email: session.getOwnEmailAddressOrEmpty(),
email: session.getOwnEmailAddressOrEmpty(),
)
); );
if (PlatformInfo.isWeb) {
SentryManager.instance.setUser(sentryUser);
} else {
initSentryUser(sentryUser);
}
_setUpMinInputLengthAutocomplete(); _setUpMinInputLengthAutocomplete();
injectAutoCompleteBindings(session, currentAccountId); injectAutoCompleteBindings(session, currentAccountId);
injectRuleFilterBindings(session, currentAccountId); injectRuleFilterBindings(session, currentAccountId);
@@ -3449,7 +3459,7 @@ class MailboxDashBoardController extends ReloadableController
progressStateController.close(); progressStateController.close();
_refreshActionEventController.close(); _refreshActionEventController.close();
_notificationManager.closeStream(); _notificationManager.closeStream();
_fcmService.closeStream(); unawaited(_fcmService.closeStream());
ApplicationManager().releaseUserAgent(); ApplicationManager().releaseUserAgent();
BackButtonInterceptor.removeByName(AppRoutes.dashboard); BackButtonInterceptor.removeByName(AppRoutes.dashboard);
_identities = null; _identities = null;
@@ -10,6 +10,7 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController {
void loadLinagoraEcosystem() { void loadLinagoraEcosystem() {
if (cachedLinagoraEcosystem != null) { if (cachedLinagoraEcosystem != null) {
_applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl); _applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl);
_setUpSentry(cachedLinagoraEcosystem!);
return; return;
} }
@@ -30,6 +31,7 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController {
void handleGetLinagoraEcosystemSuccess(GetLinagoraEcosystemSuccess success) { void handleGetLinagoraEcosystemSuccess(GetLinagoraEcosystemSuccess success) {
cachedLinagoraEcosystem = success.linagoraEcosystem; cachedLinagoraEcosystem = success.linagoraEcosystem;
_applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl); _applyScribePromptUrl(cachedLinagoraEcosystem!.scribePromptUrl);
_setUpSentry(cachedLinagoraEcosystem!);
} }
void handleGetLinagoraEcosystemFailure(GetLinagoraEcosystemFailure failure) { void handleGetLinagoraEcosystemFailure(GetLinagoraEcosystemFailure failure) {
@@ -47,4 +49,15 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController {
logWarning('SetupScribePromptUrlExtension::_applyScribePromptUrl: PromptService not found'); 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',
);
}
}
} }
@@ -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<void> 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<void> _saveSentryConfiguration({
required SentryConfig sentryConfig,
SentryUser? sentryUser,
}) async {
final cachingManager = getBinding<CachingManager>();
if (cachingManager != null) {
await cachingManager.saveSentryConfiguration(sentryConfig);
if (sentryUser != null) {
await cachingManager.saveSentryUser(sentryUser);
}
} else {
logTrace(
'SentryEcosystemMixin::saveSentryConfiguration: CachingManager is null');
}
}
Future<void> clearSentryConfiguration() async {
final cachingManager = getBinding<CachingManager>();
if (cachingManager != null) {
await cachingManager.clearSentryConfiguration();
} else {
logTrace(
'SentryEcosystemMixin::clearSentryConfiguration: CachingManager is null');
}
}
}