TF-3416 Handle preview EML attachment on mobile

This commit is contained in:
dab246
2025-01-14 01:27:48 +07:00
committed by Dat H. Pham
parent aa7fded1ff
commit 33d0e91178
17 changed files with 120 additions and 71 deletions
@@ -186,13 +186,13 @@ abstract class EmailRepository {
Future<String> generatePreviewEmailEMLContent(PreviewEmailEMLRequest previewEmailEMLRequest);
Future<void> sharePreviewEmailEMLContent(String keyStored, EMLPreviewer emlPreviewer);
Future<void> sharePreviewEmailEMLContent(EMLPreviewer emlPreviewer);
Future<EMLPreviewer> getPreviewEmailEMLContentShared(String keyStored);
Future<void> removePreviewEmailEMLContentShared(String keyStored);
Future<void> storePreviewEMLContentToSessionStorage(String keyStored, EMLPreviewer emlPreviewer);
Future<void> storePreviewEMLContentToSessionStorage(EMLPreviewer emlPreviewer);
Future<EMLPreviewer> getPreviewEMLContentInMemory(String keyStored);
}
@@ -6,13 +6,12 @@ class GettingPreviewEmailEMLContentShared extends LoadingState {}
class GetPreviewEmailEMLContentSharedSuccess extends UIState {
final String keyStored;
final EMLPreviewer emlPreviewer;
GetPreviewEmailEMLContentSharedSuccess(this.keyStored, this.emlPreviewer);
GetPreviewEmailEMLContentSharedSuccess(this.emlPreviewer);
@override
List<Object?> get props => [keyStored, emlPreviewer];
List<Object?> get props => [emlPreviewer];
}
class GetPreviewEmailEMLContentSharedFailure extends FeatureFailure {
@@ -6,13 +6,12 @@ class PreviewingEmailFromEmlFile extends LoadingState {}
class PreviewEmailFromEmlFileSuccess extends UIState {
final String storeKey;
final EMLPreviewer emlPreviewer;
PreviewEmailFromEmlFileSuccess(this.storeKey, this.emlPreviewer);
PreviewEmailFromEmlFileSuccess(this.emlPreviewer);
@override
List<Object?> get props => [storeKey, emlPreviewer];
List<Object?> get props => [emlPreviewer];
}
class PreviewEmailFromEmlFileFailure extends FeatureFailure {
@@ -16,7 +16,7 @@ class GetPreviewEmailEMLContentSharedInteractor {
final previewEMLContent = await _emailRepository
.getPreviewEmailEMLContentShared(keyStored);
yield Right<Failure, Success>(GetPreviewEmailEMLContentSharedSuccess(keyStored, previewEMLContent));
yield Right<Failure, Success>(GetPreviewEmailEMLContentSharedSuccess(previewEMLContent));
} catch (e) {
yield Left<Failure, Success>(GetPreviewEmailEMLContentSharedFailure(
keyStored: keyStored,
@@ -10,12 +10,12 @@ class MovePreviewEmlContentFromPersistentToMemoryInteractor {
const MovePreviewEmlContentFromPersistentToMemoryInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(String keyStored, EMLPreviewer emlPreviewer) async* {
Stream<Either<Failure, Success>> execute(EMLPreviewer emlPreviewer) async* {
try {
yield Right<Failure, Success>(MovingPreviewEmailEMLContentFromPersistentToMemory());
await Future.wait([
_emailRepository.removePreviewEmailEMLContentShared(keyStored),
_emailRepository.storePreviewEMLContentToSessionStorage(keyStored, emlPreviewer),
_emailRepository.removePreviewEmailEMLContentShared(emlPreviewer.id),
_emailRepository.storePreviewEMLContentToSessionStorage(emlPreviewer),
]);
yield Right<Failure, Success>(MovePreviewEmailEMLContentFromPersistentToMemorySuccess());
} catch (e) {
@@ -1,5 +1,6 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
@@ -20,20 +21,21 @@ class PreviewEmailFromEmlFileInteractor {
final previewEMLContent = await _emailRepository
.generatePreviewEmailEMLContent(previewEmailEMLRequest);
final keyStored = previewEmailEMLRequest.keyStored;
final emlPreviewer = EMLPreviewer(
id: previewEmailEMLRequest.keyStored,
title: previewEmailEMLRequest.title,
content: previewEMLContent,
);
if (previewEmailEMLRequest.isShared) {
await _emailRepository.sharePreviewEmailEMLContent(keyStored, emlPreviewer);
} else {
await _emailRepository.storePreviewEMLContentToSessionStorage(keyStored, emlPreviewer);
if (PlatformInfo.isWeb) {
if (previewEmailEMLRequest.isShared) {
await _emailRepository.sharePreviewEmailEMLContent(emlPreviewer);
} else {
await _emailRepository.storePreviewEMLContentToSessionStorage(emlPreviewer);
}
}
yield Right<Failure, Success>(PreviewEmailFromEmlFileSuccess(keyStored, emlPreviewer));
yield Right<Failure, Success>(PreviewEmailFromEmlFileSuccess(emlPreviewer));
} catch (e) {
yield Left<Failure, Success>(PreviewEmailFromEmlFileFailure(e));
}