Fix displaying the external url of the link tag

This commit is contained in:
dab246
2022-04-14 11:19:47 +07:00
committed by Dat H. Pham
parent 701502c6b7
commit 561f8041ea
25 changed files with 182 additions and 299 deletions
@@ -6,4 +6,6 @@ abstract class HtmlDataSource {
EmailContent emailContent,
Map<String, String> mapUrlDownloadCID
);
Future<EmailContent> addTooltipWhenHoverOnLink(EmailContent emailContent);
}
@@ -21,4 +21,13 @@ class HtmlDataSourceImpl extends HtmlDataSource {
throw error;
});
}
@override
Future<EmailContent> addTooltipWhenHoverOnLink(EmailContent emailContent) {
return Future.sync(() async {
return await _htmlAnalyzer.addTooltipWhenHoverOnLink(emailContent);
}).catchError((error) {
throw error;
});
}
}
@@ -1,6 +1,5 @@
import 'package:core/core.dart';
import 'package:core/presentation/utils/html_transformer/html_transform.dart';
import 'package:model/model.dart';
class HtmlAnalyzer {
@@ -14,12 +13,24 @@ class HtmlAnalyzer {
case EmailContentType.textHtml:
final htmlTransform = HtmlTransform(
emailContent.content,
dioClient,
mapUrlDownloadCID);
dioClient: dioClient,
mapUrlDownloadCID: mapUrlDownloadCID);
final htmlContent = await htmlTransform.transformToHtml();
return EmailContent(emailContent.type, htmlContent);
default:
return emailContent;
}
}
Future<EmailContent> addTooltipWhenHoverOnLink(EmailContent emailContent) async {
switch(emailContent.type) {
case EmailContentType.textHtml:
final htmlTransform = HtmlTransform(emailContent.content);
final htmlContent = await htmlTransform.transformToHtml(
transformConfiguration: TransformConfiguration.create(customDomTransformers: [AddTooltipLinkTransformer()]));
return EmailContent(emailContent.type, htmlContent);
default:
return emailContent;
}
}
}
@@ -124,4 +124,11 @@ class EmailRepositoryImpl extends EmailRepository {
Future<bool> deleteEmailPermanently(AccountId accountId, EmailId emailId) {
return emailDataSource.deleteEmailPermanently(accountId, emailId);
}
@override
Future<List<EmailContent>> addTooltipWhenHoverOnLink(List<EmailContent> emailContents) {
return Future.wait(emailContents
.map((emailContent) => _htmlDataSource.addTooltipWhenHoverOnLink(emailContent))
.toList());
}
}
@@ -52,6 +52,8 @@ abstract class EmailRepository {
AccountId accountId
);
Future<List<EmailContent>> addTooltipWhenHoverOnLink(List<EmailContent> emailContents);
Future<Email?> saveEmailAsDrafts(AccountId accountId, Email email);
Future<bool> removeEmailDrafts(AccountId accountId, EmailId emailId);
@@ -3,12 +3,13 @@ import 'package:model/model.dart';
class GetEmailContentSuccess extends UIState {
final List<EmailContent> emailContents;
final List<EmailContent> emailContentsDisplayed;
final List<Attachment> attachments;
GetEmailContentSuccess(this.emailContents, this.attachments);
GetEmailContentSuccess(this.emailContents, this.emailContentsDisplayed, this.attachments);
@override
List<Object?> get props => [emailContents, attachments];
List<Object?> get props => [emailContents, emailContentsDisplayed, attachments];
}
class GetEmailContentFailure extends FeatureFailure {
@@ -1,4 +1,5 @@
import 'package:core/core.dart';
import 'package:flutter/foundation.dart';
import 'package:model/model.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
@@ -22,7 +23,10 @@ class GetEmailContentInteractor {
email.allAttachments.listAttachmentsDisplayedInContent,
baseDownloadUrl,
accountId);
yield Right<Failure, Success>(GetEmailContentSuccess(newEmailContents, email.allAttachments));
final newEmailContentsDisplayed = kIsWeb
? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents)
: newEmailContents;
yield Right<Failure, Success>(GetEmailContentSuccess(newEmailContents, newEmailContentsDisplayed, email.allAttachments));
} else {
yield Left(GetEmailContentFailure(null));
}
@@ -65,6 +65,7 @@ class EmailController extends BaseController {
final emailContents = <EmailContent>[].obs;
final attachments = <Attachment>[].obs;
EmailId? _currentEmailId;
List<EmailContent>? initialEmailContents;
PresentationMailbox? get currentMailbox => mailboxDashBoardController.selectedMailbox.value;
@@ -152,7 +153,8 @@ class EmailController extends BaseController {
}
void _getEmailContentSuccess(GetEmailContentSuccess success) {
emailContents.value = success.emailContents;
emailContents.value = success.emailContentsDisplayed;
initialEmailContents = success.emailContents;
attachments.value = success.attachments;
}
@@ -161,6 +163,7 @@ class EmailController extends BaseController {
emailAddressExpandMode.value = ExpandMode.COLLAPSE;
isDisplayFullEmailAddress.value = false;
emailContents.clear();
initialEmailContents?.clear();
attachments.clear();
}
@@ -592,7 +595,7 @@ class EmailController extends BaseController {
final arguments = ComposerArguments(
emailActionType: emailActionType,
presentationEmail: mailboxDashBoardController.selectedEmail.value!,
emailContents: emailContents,
emailContents: initialEmailContents,
attachments: attachments,
mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role);