From 6a152767ebebfa2086128a0896b47a8e748e86c6 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 7 May 2024 16:40:35 +0700 Subject: [PATCH] TF-825 Add download message as EML method in interactor --- .../state/download_message_as_eml_state.dart | 11 ++++ .../download_message_as_eml_interactor.dart | 66 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 lib/features/email/domain/state/download_message_as_eml_state.dart create mode 100644 lib/features/email/domain/usecases/download_message_as_eml_interactor.dart diff --git a/lib/features/email/domain/state/download_message_as_eml_state.dart b/lib/features/email/domain/state/download_message_as_eml_state.dart new file mode 100644 index 0000000000..a6dcf74306 --- /dev/null +++ b/lib/features/email/domain/state/download_message_as_eml_state.dart @@ -0,0 +1,11 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class StartDownloadMessageAsEML extends LoadingState {} + +class DownloadMessageAsEMLSuccess extends UIState {} + +class DownloadMessageAsEMLFailure extends FeatureFailure { + + DownloadMessageAsEMLFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/download_message_as_eml_interactor.dart b/lib/features/email/domain/usecases/download_message_as_eml_interactor.dart new file mode 100644 index 0000000000..d22cf7b76d --- /dev/null +++ b/lib/features/email/domain/usecases/download_message_as_eml_interactor.dart @@ -0,0 +1,66 @@ +import 'dart:async'; + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:model/account/account_request.dart'; +import 'package:model/account/authentication_type.dart'; +import 'package:model/account/password.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/download_message_as_eml_state.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'; + +class DownloadMessageAsEMLInteractor { + final EmailRepository _emailRepository; + final CredentialRepository _credentialRepository; + final AccountRepository _accountRepository; + final AuthenticationOIDCRepository _authenticationOIDCRepository; + + DownloadMessageAsEMLInteractor( + this._emailRepository, + this._credentialRepository, + this._accountRepository, + this._authenticationOIDCRepository + ); + + Stream> execute( + AccountId accountId, + String baseDownloadUrl, + Id blobId, + String subjectEmail + ) async* { + try { + yield Right(StartDownloadMessageAsEML()); + + final currentAccount = await _accountRepository.getCurrentAccount(); + AccountRequest? accountRequest; + + if (currentAccount.authenticationType == AuthenticationType.oidc) { + final tokenOidc = await _authenticationOIDCRepository.getStoredTokenOIDC(currentAccount.id); + accountRequest = AccountRequest.withOidc(token: tokenOidc); + } else { + final authenticationInfoCache = await _credentialRepository.getAuthenticationInfoStored(); + accountRequest = AccountRequest.withBasic( + userName: UserName(authenticationInfoCache.username), + password: Password(authenticationInfoCache.password), + ); + } + + await _emailRepository.downloadMessageAsEML( + accountId, + baseDownloadUrl, + accountRequest, + blobId, + subjectEmail); + + yield Right(DownloadMessageAsEMLSuccess()); + } catch (exception) { + yield Left(DownloadMessageAsEMLFailure(exception)); + } + } +} \ No newline at end of file