TF-3416 Persist preview EML content when make reload page action

This commit is contained in:
dab246
2025-01-13 12:50:35 +07:00
committed by Dat H. Pham
parent d304083b2e
commit 0ce99c745c
28 changed files with 623 additions and 40 deletions
@@ -188,4 +188,10 @@ abstract class EmailRepository {
Future<void> sharePreviewEmailEMLContent(String keyStored, String previewEMLContent);
Future<String> getPreviewEmailEMLContentShared(String keyStored);
Future<void> removePreviewEmailEMLContentShared(String keyStored);
Future<void> movePreviewEMLContentFromPersistentToMemory(String keyStored, String content);
Future<String> getPreviewEMLContentInMemory(String keyStored);
}
@@ -1,19 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class GettingPreviewEmailEMLContentShared extends LoadingState {}
class GetPreviewEmailEMLContentSharedSuccess extends UIState {
final String previewEMLContent;
GetPreviewEmailEMLContentSharedSuccess(this.previewEMLContent);
@override
List<Object?> get props => [previewEMLContent];
}
class GetPreviewEmailEMLContentSharedFailure extends FeatureFailure {
GetPreviewEmailEMLContentSharedFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,27 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class GettingPreviewEmailEMLContentShared extends LoadingState {}
class GetPreviewEmailEMLContentSharedSuccess extends UIState {
final String keyStored;
final String previewEMLContent;
GetPreviewEmailEMLContentSharedSuccess(this.keyStored, this.previewEMLContent);
@override
List<Object?> get props => [keyStored, previewEMLContent];
}
class GetPreviewEmailEMLContentSharedFailure extends FeatureFailure {
final String? keyStored;
GetPreviewEmailEMLContentSharedFailure({
this.keyStored,
dynamic exception,
}) : super(exception: exception);
@override
List<Object?> get props => [keyStored, exception];
}
@@ -0,0 +1,18 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class GettingPreviewEMLContentInMemory extends LoadingState {}
class GetPreviewEMLContentInMemorySuccess extends UIState {
final String previewEMLContent;
GetPreviewEMLContentInMemorySuccess(this.previewEMLContent);
@override
List<Object?> get props => [previewEMLContent];
}
class GetPreviewEMLContentInMemoryFailure extends FeatureFailure {
GetPreviewEMLContentInMemoryFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class MovingPreviewEmailEMLContentFromPersistentToMemory extends LoadingState {}
class MovePreviewEmailEMLContentFromPersistentToMemorySuccess extends UIState {}
class MovePreviewEmailEMLContentFromPersistentToMemoryFailure extends FeatureFailure {
MovePreviewEmailEMLContentFromPersistentToMemoryFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,11 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class RemovingPreviewEmailEMLContentShared extends LoadingState {}
class RemovePreviewEmailEMLContentSharedSuccess extends UIState {}
class RemovePreviewEmailEMLContentSharedFailure extends FeatureFailure {
RemovePreviewEmailEMLContentSharedFailure(dynamic exception) : super(exception: exception);
}
@@ -2,7 +2,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_content_shared_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_eml_content_shared_state.dart';
class GetPreviewEmailEMLContentSharedInteractor {
final EmailRepository _emailRepository;
@@ -16,9 +16,12 @@ class GetPreviewEmailEMLContentSharedInteractor {
final previewEMLContent = await _emailRepository
.getPreviewEmailEMLContentShared(keyStored);
yield Right<Failure, Success>(GetPreviewEmailEMLContentSharedSuccess(previewEMLContent));
yield Right<Failure, Success>(GetPreviewEmailEMLContentSharedSuccess(keyStored, previewEMLContent));
} catch (e) {
yield Left<Failure, Success>(GetPreviewEmailEMLContentSharedFailure(e));
yield Left<Failure, Success>(GetPreviewEmailEMLContentSharedFailure(
keyStored: keyStored,
exception: e,
));
}
}
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_preview_eml_content_in_memory_state.dart';
class GetPreviewEmlContentInMemoryInteractor {
final EmailRepository _emailRepository;
const GetPreviewEmlContentInMemoryInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(String keyStored) async* {
try {
yield Right<Failure, Success>(GettingPreviewEMLContentInMemory());
final previewEMLContent = await _emailRepository.getPreviewEMLContentInMemory(keyStored);
yield Right<Failure, Success>(GetPreviewEMLContentInMemorySuccess(previewEMLContent));
} catch (e) {
yield Left<Failure, Success>(GetPreviewEMLContentInMemoryFailure(e));
}
}
}
@@ -0,0 +1,24 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/move_preview_eml_content_from_persistent_to_memory_state.dart';
class MovePreviewEmlContentFromPersistentToMemoryInteractor {
final EmailRepository _emailRepository;
const MovePreviewEmlContentFromPersistentToMemoryInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(String keyStored, String content) async* {
try {
yield Right<Failure, Success>(MovingPreviewEmailEMLContentFromPersistentToMemory());
await Future.wait([
_emailRepository.removePreviewEmailEMLContentShared(keyStored),
_emailRepository.movePreviewEMLContentFromPersistentToMemory(keyStored, content),
]);
yield Right<Failure, Success>(MovePreviewEmailEMLContentFromPersistentToMemorySuccess());
} catch (e) {
yield Left<Failure, Success>(MovePreviewEmailEMLContentFromPersistentToMemoryFailure(e));
}
}
}
@@ -0,0 +1,21 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/remove_preview_email_eml_content_shared_state.dart';
class RemovePreviewEmailEmlContentSharedInteractor {
final EmailRepository _emailRepository;
const RemovePreviewEmailEmlContentSharedInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(String keyStored) async* {
try {
yield Right<Failure, Success>(RemovingPreviewEmailEMLContentShared());
await _emailRepository.removePreviewEmailEMLContentShared(keyStored);
yield Right<Failure, Success>(RemovePreviewEmailEMLContentSharedSuccess());
} catch (e) {
yield Left<Failure, Success>(RemovePreviewEmailEMLContentSharedFailure(e));
}
}
}