TF-3416 Implement preview EML attachment
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.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:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class PreviewEmailEMLRequest with EquatableMixin {
|
||||
final AccountId accountId;
|
||||
final UserName userName;
|
||||
final Id blobId;
|
||||
final Email email;
|
||||
final Locale locale;
|
||||
final AppLocalizations appLocalizations;
|
||||
final String baseDownloadUrl;
|
||||
|
||||
PreviewEmailEMLRequest({
|
||||
required this.accountId,
|
||||
required this.userName,
|
||||
required this.blobId,
|
||||
required this.email,
|
||||
required this.locale,
|
||||
required this.appLocalizations,
|
||||
required this.baseDownloadUrl,
|
||||
});
|
||||
|
||||
String get keyStored => blobId.value;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
accountId,
|
||||
userName,
|
||||
blobId,
|
||||
email,
|
||||
locale,
|
||||
appLocalizations,
|
||||
baseDownloadUrl,
|
||||
];
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
|
||||
@@ -181,4 +182,10 @@ abstract class EmailRepository {
|
||||
EventActionType eventActionType);
|
||||
|
||||
Future<List<Email>> parseEmailByBlobIds(AccountId accountId, Set<Id> blobIds);
|
||||
|
||||
Future<String> generatePreviewEmailEMLContent(PreviewEmailEMLRequest previewEmailEMLRequest);
|
||||
|
||||
Future<void> sharePreviewEmailEMLContent(String keyStored, String previewEMLContent);
|
||||
|
||||
Future<String> getPreviewEmailEMLContentShared(String keyStored);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
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);
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
|
||||
class ParsingEmailByBlobId extends LoadingState {}
|
||||
@@ -7,11 +8,12 @@ class ParsingEmailByBlobId extends LoadingState {}
|
||||
class ParseEmailByBlobIdSuccess extends UIState {
|
||||
|
||||
final Email email;
|
||||
final Id blobId;
|
||||
|
||||
ParseEmailByBlobIdSuccess(this.email);
|
||||
ParseEmailByBlobIdSuccess(this.email, this.blobId);
|
||||
|
||||
@override
|
||||
List<Object> get props => [email];
|
||||
List<Object> get props => [email, blobId];
|
||||
}
|
||||
|
||||
class ParseEmailByBlobIdFailure extends FeatureFailure {
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class PreviewingEmailFromEmlFile extends LoadingState {}
|
||||
|
||||
class PreviewEmailFromEmlFileSuccess extends UIState {
|
||||
|
||||
final String storeKey;
|
||||
|
||||
PreviewEmailFromEmlFileSuccess(this.storeKey);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [storeKey];
|
||||
}
|
||||
|
||||
class PreviewEmailFromEmlFileFailure extends FeatureFailure {
|
||||
|
||||
PreviewEmailFromEmlFileFailure(dynamic exception) : super(exception: exception);
|
||||
}
|
||||
+24
@@ -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/get_preview_email_content_shared_state.dart';
|
||||
|
||||
class GetPreviewEmailEMLContentSharedInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
const GetPreviewEmailEMLContentSharedInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(String keyStored) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(GettingPreviewEmailEMLContentShared());
|
||||
|
||||
final previewEMLContent = await _emailRepository
|
||||
.getPreviewEmailEMLContentShared(keyStored);
|
||||
|
||||
yield Right<Failure, Success>(GetPreviewEmailEMLContentSharedSuccess(previewEMLContent));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(GetPreviewEmailEMLContentSharedFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,10 @@ class ParseEmailByBlobIdInteractor {
|
||||
{blobId},
|
||||
);
|
||||
|
||||
yield Right<Failure, Success>(ParseEmailByBlobIdSuccess(emailParsed.first));
|
||||
yield Right<Failure, Success>(ParseEmailByBlobIdSuccess(
|
||||
emailParsed.first,
|
||||
blobId,
|
||||
));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(ParseEmailByBlobIdFailure(e));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
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/model/preview_email_eml_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/preview_email_from_eml_file_state.dart';
|
||||
|
||||
class PreviewEmailFromEmlFileInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
const PreviewEmailFromEmlFileInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
PreviewEmailEMLRequest previewEmailEMLRequest,
|
||||
) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(PreviewingEmailFromEmlFile());
|
||||
|
||||
final previewEMLContent = await _emailRepository
|
||||
.generatePreviewEmailEMLContent(previewEmailEMLRequest);
|
||||
|
||||
final keyStored = previewEmailEMLRequest.keyStored;
|
||||
|
||||
await _emailRepository.sharePreviewEmailEMLContent(keyStored, previewEMLContent);
|
||||
|
||||
yield Right<Failure, Success>(PreviewEmailFromEmlFileSuccess(keyStored));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(PreviewEmailFromEmlFileFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user