TF-2901 Implement caching composer on log out

This commit is contained in:
DatDang
2024-06-18 15:24:02 +07:00
committed by Dat H. Pham
parent c4bffd6626
commit b2c92388f2
18 changed files with 507 additions and 185 deletions
@@ -0,0 +1,18 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class RestoringEmailInlineImages extends LoadingState {}
class RestoreEmailInlineImagesSuccess extends UIState {
final String emailContent;
RestoreEmailInlineImagesSuccess(this.emailContent);
@override
List<Object?> get props => [emailContent];
}
class RestoreEmailInlineImagesFailure extends FeatureFailure {
RestoreEmailInlineImagesFailure({super.exception});
}
@@ -0,0 +1,30 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/composer/domain/state/restore_email_inline_images_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
class RestoreEmailInlineImagesInteractor {
RestoreEmailInlineImagesInteractor(this._composerCacheRepository);
final ComposerCacheRepository _composerCacheRepository;
Stream<Either<Failure, Success>> execute({
required String htmlContent,
required TransformConfiguration transformConfiguration,
required Map<String, String> mapUrlDownloadCID
}) async* {
try {
yield Right(RestoringEmailInlineImages());
final emailContent = await _composerCacheRepository.restoreEmailInlineImages(
htmlContent,
transformConfiguration,
mapUrlDownloadCID);
yield Right(RestoreEmailInlineImagesSuccess(emailContent));
} catch (exception) {
yield Left(RestoreEmailInlineImagesFailure(exception: exception));
}
}
}
@@ -1,8 +1,11 @@
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/user_name.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/save_composer_cache_state.dart';
@@ -15,10 +18,22 @@ class SaveComposerCacheOnWebInteractor {
this._composerRepository,
);
Future<Either<Failure, Success>> execute(CreateEmailRequest createEmailRequest) async {
Future<Either<Failure, Success>> execute(
CreateEmailRequest createEmailRequest,
AccountId accountId,
UserName userName,
{required ScreenDisplayMode displayMode}
) async {
try {
final emailCreated = await _composerRepository.generateEmail(createEmailRequest);
_composerCacheRepository.saveComposerCacheOnWeb(emailCreated);
final identity = createEmailRequest.identity;
await _composerCacheRepository.saveComposerCacheOnWeb(
emailCreated,
accountId: accountId,
userName: userName,
displayMode: displayMode,
identity: identity,
readReceipentEnabled: createEmailRequest.isRequestReadReceipt);
return Right(SaveComposerCacheSuccess());
} catch (exception) {
return Left(SaveComposerCacheFailure(exception));