Fix some file with mimeType is empty cannot drag n drop attachment

(cherry picked from commit ad223e1e9d3d6da67e247341ff2da52dbcf4a412)
This commit is contained in:
dab246
2023-10-06 16:43:50 +07:00
committed by Dat H. Pham
parent 82964427b6
commit c9f329d9a8
7 changed files with 11 additions and 43 deletions
@@ -3,14 +3,14 @@ import 'package:core/domain/preview/supported_preview_file_types.dart';
import 'package:http_parser/http_parser.dart'; import 'package:http_parser/http_parser.dart';
extension MediaTypeExtension on MediaType { extension MediaTypeExtension on MediaType {
static const String imageType = 'image';
bool isAndroidSupportedPreview() => SupportedPreviewFileTypes.androidSupportedTypes.contains(mimeType); bool isAndroidSupportedPreview() => SupportedPreviewFileTypes.androidSupportedTypes.contains(mimeType);
bool isIOSSupportedPreview() => SupportedPreviewFileTypes.iOSSupportedTypes.containsKey(mimeType); bool isIOSSupportedPreview() => SupportedPreviewFileTypes.iOSSupportedTypes.containsKey(mimeType);
bool isImageFile() => SupportedPreviewFileTypes.imageMimeTypes.contains(mimeType); bool isImageFile() => SupportedPreviewFileTypes.imageMimeTypes.contains(mimeType);
bool isImageValid() => type == 'image';
bool isDocFile() => SupportedPreviewFileTypes.docMimeTypes.contains(mimeType); bool isDocFile() => SupportedPreviewFileTypes.docMimeTypes.contains(mimeType);
bool isPowerPointFile() => SupportedPreviewFileTypes.pptMimeTypes.contains(mimeType); bool isPowerPointFile() => SupportedPreviewFileTypes.pptMimeTypes.contains(mimeType);
@@ -1955,26 +1955,10 @@ class ComposerController extends BaseController {
return; return;
} }
if (fileUpload.type == null) { if (fileUpload.type?.startsWith(MediaTypeExtension.imageType) == true) {
final fileInfo = await fileUpload.toFileInfo();
if (fileInfo != null) {
_addAttachmentFromDragAndDrop(fileInfo: fileInfo);
} else if (context.mounted) {
_appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).can_not_upload_this_file_as_attachments
);
}
return;
}
final mediaType = MediaType.parse(fileUpload.type!);
if (mediaType.isImageValid()) {
_addInlineImageFromDragAndDrop( _addInlineImageFromDragAndDrop(
base64Data: fileUpload.base64!, base64Data: fileUpload.base64!,
name: fileUpload.name, name: fileUpload.name,
type: mediaType,
size: fileUpload.size,
); );
} else { } else {
final fileInfo = await fileUpload.toFileInfo(); final fileInfo = await fileUpload.toFileInfo();
@@ -1989,19 +1973,9 @@ class ComposerController extends BaseController {
} }
} }
void _addInlineImageFromDragAndDrop({ void _addInlineImageFromDragAndDrop({required String base64Data, String? name}) {
required String base64Data,
String? name,
MediaType? type,
int? size
}) {
log('ComposerController::_addInlineImageFromDragAndDrop:name: $name'); log('ComposerController::_addInlineImageFromDragAndDrop:name: $name');
richTextWebController.insertInlineImage( richTextWebController.insertInlineImage(base64Data: base64Data, name: name);
base64Data: base64Data,
name: name,
type: type,
size: size,
);
} }
void handleImageUploadFailure({ void handleImageUploadFailure({
@@ -8,7 +8,6 @@ import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:html_editor_enhanced/html_editor.dart'; import 'package:html_editor_enhanced/html_editor.dart';
import 'package:http_parser/http_parser.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/code_view_state.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/dropdown_menu_font_status.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/formatting_options_state.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/formatting_options_state.dart';
@@ -186,13 +185,8 @@ class RichTextWebController extends BaseRichTextController {
} }
} }
void insertInlineImage({ void insertInlineImage({required String base64Data, String? name}) async {
required String base64Data, log('RichTextWebController::insertInlineImage():name: $name');
String? name,
MediaType? type,
int? size,
}) async {
log('RichTextWebController::insertInlineImage():name: $name | type: $type');
final base64Uri = '<img src="$base64Data" data-filename="$name" alt="Inline Image TeamMail" style="max-width: 100%" />'; final base64Uri = '<img src="$base64Data" data-filename="$name" alt="Inline Image TeamMail" style="max-width: 100%" />';
editorController.insertHtml(base64Uri); editorController.insertHtml(base64Uri);
} }
@@ -8,7 +8,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_body_value.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_body_value.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_content.dart'; import 'package:model/email/email_content.dart';
import 'package:model/extensions/media_type_extension.dart'; import 'package:model/extensions/media_type_nullable_extension.dart';
class ComposerCache with EquatableMixin { class ComposerCache with EquatableMixin {
+1 -1
View File
@@ -13,7 +13,7 @@ import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_content.dart'; import 'package:model/email/email_content.dart';
import 'package:model/extensions/email_address_extension.dart'; import 'package:model/extensions/email_address_extension.dart';
import 'package:model/extensions/media_type_extension.dart'; import 'package:model/extensions/media_type_nullable_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart'; import 'package:model/mailbox/select_mode.dart';
@@ -1,7 +1,7 @@
import 'package:http_parser/http_parser.dart'; import 'package:http_parser/http_parser.dart';
import 'package:model/email/email_content_type.dart'; import 'package:model/email/email_content_type.dart';
extension MediaTypeExtension on MediaType? { extension MediaTypeNullableExtension on MediaType? {
EmailContentType toEmailContentType() { EmailContentType toEmailContentType() {
if (this == null) { if (this == null) {
+1 -1
View File
@@ -43,7 +43,7 @@ export 'extensions/list_presentation_email_extension.dart';
export 'extensions/mailbox_extension.dart'; export 'extensions/mailbox_extension.dart';
export 'extensions/mailbox_id_extension.dart'; export 'extensions/mailbox_id_extension.dart';
export 'extensions/mailbox_name_extension.dart'; export 'extensions/mailbox_name_extension.dart';
export 'extensions/media_type_extension.dart'; export 'extensions/media_type_nullable_extension.dart';
export 'extensions/presentation_email_extension.dart'; export 'extensions/presentation_email_extension.dart';
export 'extensions/presentation_mailbox_extension.dart'; export 'extensions/presentation_mailbox_extension.dart';
export 'extensions/properties_extension.dart'; export 'extensions/properties_extension.dart';