diff --git a/lib/features/mailto/presentation/mailto_url_bindings.dart b/lib/features/mailto/presentation/mailto_url_bindings.dart new file mode 100644 index 000000000..b3f89ca29 --- /dev/null +++ b/lib/features/mailto/presentation/mailto_url_bindings.dart @@ -0,0 +1,69 @@ +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/base/base_bindings.dart'; +import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart'; +import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart'; +import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache_manager.dart'; +import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart'; +import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart'; +import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart'; +import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart'; +import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart'; +import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart'; +import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; +import 'package:tmail_ui_user/features/mailto/presentation/mailto_url_controller.dart'; +import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart'; + +class MailtoUrlBindings extends BaseBindings { + + @override + void bindingsController() { + Get.lazyPut(() => MailtoUrlController( + Get.find(), + Get.find(), + )); + } + + @override + void bindingsDataSource() { + Get.lazyPut(() => Get.find()); + } + + @override + void bindingsDataSourceImpl() { + Get.lazyPut(() => AuthenticationOIDCDataSourceImpl( + Get.find(), + Get.find(), + Get.find(), + Get.find(), + Get.find(), + )); + } + + @override + void bindingsInteractor() { + Get.lazyPut(() => GetStoredTokenOidcInteractor( + Get.find(), + Get.find(), + )); + Get.lazyPut(() => GetAuthenticatedAccountInteractor( + Get.find(), + Get.find(), + Get.find(), + )); + Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find())); + } + + @override + void bindingsRepository() { + Get.lazyPut(() => Get.find()); + } + + @override + void bindingsRepositoryImpl() { + Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find())); + } +} \ No newline at end of file diff --git a/lib/features/mailto/presentation/mailto_url_controller.dart b/lib/features/mailto/presentation/mailto_url_controller.dart new file mode 100644 index 000000000..ec90fc723 --- /dev/null +++ b/lib/features/mailto/presentation/mailto_url_controller.dart @@ -0,0 +1,55 @@ +import 'package:core/utils/app_logger.dart'; +import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; +import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/navigation_router.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; +import 'package:tmail_ui_user/main/routes/route_utils.dart'; + +class MailtoUrlController extends ReloadableController { + + MailtoUrlController( + GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, + UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor, + ) : super( + getAuthenticatedAccountInteractor, + updateAuthenticationAccountInteractor + ); + + @override + void onReady() { + super.onReady(); + final parameters = Get.parameters; + log('MailtoUrlController::onReady():parameters: $parameters'); + if (parameters.containsKey('uri')) { + reload(); + } else { + popAndPush(AppRoutes.unknownRoutePage); + } + } + + @override + void handleReloaded(Session session) { + final parameters = Get.parameters; + log('MailtoUrlController::handleReloaded():parameters: $parameters'); + if (parameters.containsKey('uri')) { + final mailtoArgument = MailtoArguments( + session: session, + emailAddress: parameters['uri'] + ); + popAndPush( + RouteUtils.generateNavigationRoute( + AppRoutes.dashboard, + NavigationRouter.initial() + ), + arguments: mailtoArgument + ); + } else { + popAndPush(AppRoutes.unknownRoutePage); + } + } +} \ No newline at end of file diff --git a/lib/features/mailto/presentation/mailto_url_view.dart b/lib/features/mailto/presentation/mailto_url_view.dart new file mode 100644 index 000000000..35bf853f0 --- /dev/null +++ b/lib/features/mailto/presentation/mailto_url_view.dart @@ -0,0 +1,23 @@ +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/utils/theme_utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/mailto/presentation/mailto_url_controller.dart'; + +class MailtoUrlView extends GetWidget { + const MailtoUrlView({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + ThemeUtils.setSystemDarkUIStyle(); + + return Container( + color: AppColor.primaryLightColor, + child: const SizedBox( + width: 100, + height: 100, + child: CupertinoActivityIndicator(), + ), + ); + } +} \ No newline at end of file diff --git a/lib/features/mailto/presentation/model/mailto_arguments.dart b/lib/features/mailto/presentation/model/mailto_arguments.dart new file mode 100644 index 000000000..d1294d328 --- /dev/null +++ b/lib/features/mailto/presentation/model/mailto_arguments.dart @@ -0,0 +1,22 @@ + +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/router_arguments.dart'; + +class MailtoArguments extends RouterArguments { + + final Session session; + final String? emailAddress; + + MailtoArguments({required this.session, this.emailAddress}); + + Map toMapRouter() { + return { + 'routeName': AppRoutes.mailtoURL, + 'emailAddress': emailAddress + }; + } + + @override + List get props => [session, emailAddress]; +} \ No newline at end of file