diff --git a/core/lib/data/network/download/download_client.dart b/core/lib/data/network/download/download_client.dart index b8be90520..ceef66404 100644 --- a/core/lib/data/network/download/download_client.dart +++ b/core/lib/data/network/download/download_client.dart @@ -4,7 +4,7 @@ import 'dart:io'; import 'package:core/data/network/dio_client.dart'; import 'package:core/data/utils/compress_file_utils.dart'; -import 'package:core/presentation/extensions/html_extension.dart'; +import 'package:core/presentation/utils/html_transformer/html_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; import 'package:dio/dio.dart'; @@ -103,18 +103,11 @@ class DownloadClient { var mimeType = entryParam['mimeType']; final cid = entryParam['cid']; var fileName = entryParam['fileName']; - final base64Data = base64Encode(bytesData); - if (mimeType.endsWith('svg')) { - mimeType = 'image/svg+xml'; - } - if (!base64Data.endsWith('==')) { - base64Data.append('=='); - } if (fileName.contains('.')) { fileName = fileName.split('.').first; } - final base64Uri = '$fileName'; + final base64Uri = '$fileName'; return base64Uri; } } \ No newline at end of file diff --git a/core/lib/presentation/utils/html_transformer/html_utils.dart b/core/lib/presentation/utils/html_transformer/html_utils.dart index abfd1f33a..44b19972a 100644 --- a/core/lib/presentation/utils/html_transformer/html_utils.dart +++ b/core/lib/presentation/utils/html_transformer/html_utils.dart @@ -1,5 +1,7 @@ +import 'package:core/presentation/extensions/html_extension.dart'; import 'package:core/presentation/utils/html_transformer/html_event_action.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; @@ -122,4 +124,25 @@ class HtmlUtils { return ''; } } + + static String validateHtmlImageResourceMimeType(String mimeType) { + if (mimeType.endsWith('svg')) { + mimeType = 'image/svg+xml'; + } + log('HtmlUtils::validateHtmlImageResourceMimeType:mimeType: $mimeType'); + return mimeType; + } + + static String convertBase64ToImageResourceData({ + required String base64Data, + required String mimeType + }) { + mimeType = validateHtmlImageResourceMimeType(mimeType); + if (!base64Data.endsWith('==')) { + base64Data.append('=='); + } + final imageResource = 'data:$mimeType;base64,$base64Data'; + log('HtmlUtils::convertBase64ToImageResourceData:imageResource: $imageResource'); + return imageResource; + } } diff --git a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart index cd09c7fd2..50255814d 100644 --- a/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart +++ b/lib/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:core/presentation/utils/html_transformer/html_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:file_picker/file_picker.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; @@ -40,7 +41,7 @@ class RichTextMobileTabletController extends BaseRichTextController { final bytesData = await File(platformFile.path!).readAsBytes(); await htmlEditorApi?.insertImageData( bytesData, - 'image/${platformFile.extension}', + HtmlUtils.validateHtmlImageResourceMimeType('image/${platformFile.extension}'), maxWidth: maxWidth ); } else { diff --git a/lib/features/composer/presentation/controller/rich_text_web_controller.dart b/lib/features/composer/presentation/controller/rich_text_web_controller.dart index 39b296478..936cea92f 100644 --- a/lib/features/composer/presentation/controller/rich_text_web_controller.dart +++ b/lib/features/composer/presentation/controller/rich_text_web_controller.dart @@ -2,20 +2,21 @@ import 'dart:convert'; import 'package:core/presentation/extensions/color_extension.dart'; -import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; +import 'package:core/presentation/utils/html_transformer/html_utils.dart'; import 'package:core/utils/app_logger.dart'; +import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:html_editor_enhanced/html_editor.dart'; +import 'package:tmail_ui_user/features/composer/presentation/controller/base_rich_text_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/code_view_state.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/dropdown_menu_font_status.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/font_name_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/formatting_options_state.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/image_source.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/inline_image.dart'; -import 'package:tmail_ui_user/features/composer/presentation/controller/base_rich_text_controller.dart'; -import 'package:tmail_ui_user/features/composer/presentation/model/font_name_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/order_list_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/paragraph_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/rich_text_style_type.dart'; @@ -288,7 +289,7 @@ class RichTextWebController extends BaseRichTextController { if (platformFile.bytes != null) { final base64Data = base64Encode(platformFile.bytes!); editorController.insertHtml( - 'Image in my signature' + 'Image in my signature' ); } else { logError("RichTextWebController::insertImageAsBase64: bytes is null");