TF-106 Fix display inlined image CIDs of emails

This commit is contained in:
dab246
2021-10-18 14:46:11 +07:00
committed by Dat H. Pham
parent 1432cb0209
commit 60ffa5ace0
25 changed files with 202 additions and 81 deletions
@@ -2,5 +2,8 @@
import 'package:model/model.dart';
abstract class HtmlDataSource {
Future<EmailContent> transformEmailContent(EmailContent emailContent);
Future<EmailContent> transformEmailContent(
EmailContent emailContent,
Map<String, String> mapUrlDownloadCID
);
}
@@ -1,17 +1,22 @@
import 'package:model/email/email_content.dart';
import 'package:core/core.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
class HtmlDataSourceImpl extends HtmlDataSource {
final HtmlAnalyzer _htmlAnalyzer;
final DioClient _dioClient;
HtmlDataSourceImpl(this._htmlAnalyzer);
HtmlDataSourceImpl(this._htmlAnalyzer, this._dioClient);
@override
Future<EmailContent> transformEmailContent(EmailContent emailContent) {
Future<EmailContent> transformEmailContent(
EmailContent emailContent,
Map<String, String>? mapUrlDownloadCID
) {
return Future.sync(() async {
return await _htmlAnalyzer.transformEmailContent(emailContent);
return await _htmlAnalyzer.transformEmailContent(emailContent, mapUrlDownloadCID, _dioClient);
}).catchError((error) {
throw error;
});
@@ -1,15 +1,23 @@
import 'package:core/core.dart';
import 'package:core/presentation/utils/html_transformer/html_transform.dart';
import 'package:model/email/email_content_type.dart';
import 'package:model/model.dart';
class HtmlAnalyzer {
Future<EmailContent> transformEmailContent(EmailContent emailContent) async {
Future<EmailContent> transformEmailContent(
EmailContent emailContent,
Map<String, String>? mapUrlDownloadCID,
DioClient dioClient
) async {
switch(emailContent.type) {
case EmailContentType.textHtml:
final htmlTransform = HtmlTransform(emailContent.content);
final htmlContent = htmlTransform.transformToHtml();
final htmlTransform = HtmlTransform(
emailContent.content,
dioClient,
mapUrlDownloadCID);
final htmlContent = await htmlTransform.transformToHtml();
return EmailContent(emailContent.type, htmlContent);
default:
return emailContent;
@@ -72,10 +72,19 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<EmailContent>> transformEmailContent(List<EmailContent> emailContents) async {
Future<List<EmailContent>> transformEmailContent(
List<EmailContent> emailContents,
List<Attachment> attachmentInlines,
String? baseUrlDownload,
AccountId accountId
) async {
final mapUrlDownloadCID = Map<String, String>.fromIterable(
attachmentInlines,
key: (attachment) => attachment.cid!,
value: (attachment) => attachment.getDownloadUrl(baseUrlDownload, accountId));
return await Future.wait(emailContents
.map((emailContent) async {
return await _htmlDataSource.transformEmailContent(emailContent);
return await _htmlDataSource.transformEmailContent(emailContent, mapUrlDownloadCID);
})
.toList());
}