diff --git a/core/lib/core.dart b/core/lib/core.dart index 4a04dfcc9..f8a0a644a 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -1,97 +1,94 @@ library core; -// Extensions -export 'presentation/extensions/color_extension.dart'; -export 'presentation/extensions/url_extension.dart'; -export 'presentation/extensions/capitalize_extension.dart'; -export 'presentation/extensions/list_extensions.dart'; -export 'domain/extensions/datetime_extension.dart'; -export 'presentation/extensions/html_extension.dart'; -export 'presentation/extensions/compare_string_extension.dart'; -export 'presentation/extensions/compare_list_extensions.dart'; +export 'package:core/domain/extensions/media_type_extension.dart'; +// Preview +export 'package:core/domain/preview/document_uti.dart'; +export 'package:core/domain/preview/supported_preview_file_types.dart'; -// Exceptions -export 'domain/exceptions/download_file_exception.dart'; -export 'data/extensions/options_extensions.dart'; - -// Utils -export 'presentation/utils/theme_utils.dart'; -export 'presentation/utils/responsive_utils.dart'; -export 'presentation/utils/keyboard_utils.dart'; -export 'presentation/utils/style_utils.dart'; -export 'presentation/utils/app_toast.dart'; -export 'presentation/utils/html_transformer/html_template.dart'; -export 'presentation/utils/html_transformer/html_transform.dart'; -export 'presentation/utils/html_transformer/transform_configuration.dart'; -export 'presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart'; -export 'data/utils/device_manager.dart'; -export 'utils/app_logger.dart'; -export 'utils/benchmark.dart'; -export 'utils/fps_manager.dart'; -export 'utils/build_utils.dart'; - -// Views -export 'presentation/views/text/slogan_builder.dart'; -export 'presentation/views/text/text_field_builder.dart'; -export 'presentation/views/text/input_decoration_builder.dart'; -export 'presentation/views/text/text_builder.dart'; -export 'presentation/views/text/rich_text_builder.dart'; -export 'presentation/views/responsive/responsive_widget.dart'; -export 'presentation/views/list/tree_view.dart'; -export 'presentation/views/button/button_builder.dart'; -export 'presentation/views/button/icon_button_web.dart'; -export 'presentation/views/image/avatar_builder.dart'; -export 'presentation/views/list/sliver_grid_delegate_fixed_height.dart'; -export 'presentation/views/image/icon_builder.dart'; -export 'presentation/views/context_menu/context_menu_action_builder.dart'; -export 'presentation/views/context_menu/context_menu_builder.dart'; -export 'presentation/views/context_menu/context_menu_header_builder.dart'; -export 'presentation/views/context_menu/simple_context_menu_action_builder.dart'; -export 'presentation/views/dialog/downloading_file_dialog_builder.dart'; -export 'presentation/views/dialog/confirmation_dialog_builder.dart'; -export 'presentation/views/dialog/edit_text_dialog_builder.dart'; -export 'presentation/views/background/background_widget_builder.dart'; -export 'presentation/views/html_viewer/html_content_viewer_widget.dart'; -export 'presentation/views/html_viewer/html_content_viewer_on_web_widget.dart'; -export 'presentation/views/html_viewer/html_viewer_controller_for_web.dart'; -export 'presentation/views/floating_button/scrolling_floating_button_animated.dart'; -export 'presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart'; -export 'presentation/views/bottom_popup/cupertino_action_sheet_builder.dart'; -export 'presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart'; -export 'presentation/views/modal_sheets/edit_text_modal_sheet_builder.dart'; -export 'presentation/views/search/search_bar_view.dart'; -export 'presentation/views/popup_menu/popup_menu_item_widget.dart'; -export 'presentation/views/tab_bar/custom_tab_indicator.dart'; -export 'presentation/views/quick_search/quick_search_input_form.dart'; -export 'presentation/views/toast/toast_position.dart'; -export 'presentation/views/toast/tmail_toast.dart'; - -// Resources -export 'presentation/resources/assets_paths.dart'; -export 'presentation/resources/image_paths.dart'; - -// Constants -export 'presentation/constants/constants_ui.dart'; export 'data/constants/constant.dart'; - +export 'data/extensions/options_extensions.dart'; +// Local +export 'data/local/config/database_config.dart'; +export 'data/local/config/email_address_table.dart'; +export 'data/local/database_client.dart'; +export 'data/local/database_manager.dart'; +export 'data/model/query/query_parameter.dart'; +// Model +export 'data/model/source_type/data_source_type.dart'; // Network export 'data/network/config/dynamic_url_interceptors.dart'; export 'data/network/config/service_path.dart'; export 'data/network/dio_client.dart'; export 'data/network/download/download_client.dart'; export 'data/network/download/download_manager.dart'; - +export 'data/network/download/downloaded_response.dart'; +export 'data/utils/device_manager.dart'; +// Exceptions +export 'domain/exceptions/download_file_exception.dart'; +export 'domain/extensions/datetime_extension.dart'; +// Constants +export 'presentation/constants/constants_ui.dart'; +export 'presentation/extensions/capitalize_extension.dart'; +// Extensions +export 'presentation/extensions/color_extension.dart'; +export 'presentation/extensions/compare_list_extensions.dart'; +export 'presentation/extensions/compare_string_extension.dart'; +export 'presentation/extensions/html_extension.dart'; +export 'presentation/extensions/list_extensions.dart'; +export 'presentation/extensions/url_extension.dart'; +// Resources +export 'presentation/resources/assets_paths.dart'; +export 'presentation/resources/image_paths.dart'; +export 'presentation/state/app_state.dart'; +export 'presentation/state/failure.dart'; // State export 'presentation/state/success.dart'; -export 'presentation/state/failure.dart'; -export 'presentation/state/app_state.dart'; - -// Local -export 'data/local/config/database_config.dart'; -export 'data/local/config/email_address_table.dart'; -export 'data/local/database_client.dart'; -export 'data/local/database_manager.dart'; - -// Model -export 'data/model/source_type/data_source_type.dart'; -export 'data/model/query/query_parameter.dart'; \ No newline at end of file +export 'presentation/utils/app_toast.dart'; +export 'presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart'; +export 'presentation/utils/html_transformer/html_template.dart'; +export 'presentation/utils/html_transformer/html_transform.dart'; +export 'presentation/utils/html_transformer/transform_configuration.dart'; +export 'presentation/utils/keyboard_utils.dart'; +export 'presentation/utils/responsive_utils.dart'; +export 'presentation/utils/style_utils.dart'; +// Utils +export 'presentation/utils/theme_utils.dart'; +export 'presentation/views/background/background_widget_builder.dart'; +export 'presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart'; +export 'presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart'; +export 'presentation/views/bottom_popup/cupertino_action_sheet_builder.dart'; +export 'presentation/views/button/button_builder.dart'; +export 'presentation/views/button/icon_button_web.dart'; +export 'presentation/views/context_menu/context_menu_action_builder.dart'; +export 'presentation/views/context_menu/context_menu_builder.dart'; +export 'presentation/views/context_menu/context_menu_header_builder.dart'; +export 'presentation/views/context_menu/simple_context_menu_action_builder.dart'; +export 'presentation/views/dialog/confirmation_dialog_builder.dart'; +export 'presentation/views/dialog/downloading_file_dialog_builder.dart'; +export 'presentation/views/dialog/edit_text_dialog_builder.dart'; +export 'presentation/views/floating_button/scrolling_floating_button_animated.dart'; +export 'presentation/views/html_viewer/html_content_viewer_on_web_widget.dart'; +export 'presentation/views/html_viewer/html_content_viewer_widget.dart'; +export 'presentation/views/html_viewer/html_viewer_controller_for_web.dart'; +export 'presentation/views/image/avatar_builder.dart'; +export 'presentation/views/image/icon_builder.dart'; +export 'presentation/views/list/sliver_grid_delegate_fixed_height.dart'; +export 'presentation/views/list/tree_view.dart'; +export 'presentation/views/modal_sheets/edit_text_modal_sheet_builder.dart'; +export 'presentation/views/popup_menu/popup_menu_item_widget.dart'; +export 'presentation/views/quick_search/quick_search_input_form.dart'; +export 'presentation/views/responsive/responsive_widget.dart'; +export 'presentation/views/search/search_bar_view.dart'; +export 'presentation/views/tab_bar/custom_tab_indicator.dart'; +export 'presentation/views/text/input_decoration_builder.dart'; +export 'presentation/views/text/rich_text_builder.dart'; +// Views +export 'presentation/views/text/slogan_builder.dart'; +export 'presentation/views/text/text_builder.dart'; +export 'presentation/views/text/text_field_builder.dart'; +export 'presentation/views/toast/tmail_toast.dart'; +export 'presentation/views/toast/toast_position.dart'; +export 'utils/app_logger.dart'; +export 'utils/benchmark.dart'; +export 'utils/build_utils.dart'; +export 'utils/fps_manager.dart'; \ No newline at end of file diff --git a/core/lib/data/network/download/downloaded_response.dart b/core/lib/data/network/download/downloaded_response.dart new file mode 100644 index 000000000..709ef52b3 --- /dev/null +++ b/core/lib/data/network/download/downloaded_response.dart @@ -0,0 +1,12 @@ +import 'package:equatable/equatable.dart'; +import 'package:http_parser/http_parser.dart'; + +class DownloadedResponse with EquatableMixin { + final String filePath; + final MediaType? mediaType; + + DownloadedResponse(this.filePath, {this.mediaType}); + + @override + List get props => [filePath, mediaType]; +} \ No newline at end of file diff --git a/core/lib/domain/extensions/media_type_extension.dart b/core/lib/domain/extensions/media_type_extension.dart new file mode 100644 index 000000000..d09d3ae61 --- /dev/null +++ b/core/lib/domain/extensions/media_type_extension.dart @@ -0,0 +1,13 @@ +import 'package:core/domain/preview/document_uti.dart'; +import 'package:core/domain/preview/supported_preview_file_types.dart'; +import 'package:http_parser/http_parser.dart'; + +extension MediaTypeExtension on MediaType { + bool isAndroidSupportedPreview() => SupportedPreviewFileTypes.androidSupportedTypes.contains(mimeType); + + bool isIOSSupportedPreview() => SupportedPreviewFileTypes.iOSSupportedTypes.containsKey(mimeType); + + bool isImageFile() => SupportedPreviewFileTypes.imageMimeTypes.contains(mimeType); + + DocumentUti getDocumentUti() => DocumentUti(SupportedPreviewFileTypes.iOSSupportedTypes[mimeType]); +} diff --git a/core/lib/domain/preview/document_uti.dart b/core/lib/domain/preview/document_uti.dart new file mode 100644 index 000000000..2c796494a --- /dev/null +++ b/core/lib/domain/preview/document_uti.dart @@ -0,0 +1,10 @@ +import 'package:equatable/equatable.dart'; + +class DocumentUti with EquatableMixin{ + final String? value; + + DocumentUti(this.value); + + @override + List get props => [value]; +} diff --git a/core/lib/domain/preview/supported_preview_file_types.dart b/core/lib/domain/preview/supported_preview_file_types.dart new file mode 100644 index 000000000..378e2e58b --- /dev/null +++ b/core/lib/domain/preview/supported_preview_file_types.dart @@ -0,0 +1,82 @@ +class SupportedPreviewFileTypes { + static const imageMimeTypes = [ + 'image/bmp', + 'image/jpeg', + 'image/gif', + 'image/png',]; + + static const iOSSupportedTypes = { + 'text/plain' : 'public.plain-text', + 'text/html' : 'public.html', + 'video/x-msvideo' : 'public.avi', + 'video/mpeg' : 'public.mpeg', + 'video/mp4' : 'public.mpeg-4', + 'video/3gpp' : 'public.3gpp', + 'video/quicktime' : 'public.mpeg-4', + 'audio/mpeg' : 'public.mp3', + 'audio/wav' : 'com.microsoft.waveform-​audio', + 'audio/x-ms-wmv' : 'com.microsoft.windows-​media-wmv', + 'image/jpeg' : 'public.jpeg', + 'image/png' : 'public.png', + 'image/gif' : 'com.compuserve.gif', + 'image/bmp' : 'com.microsoft.bmp', + 'image/vnd.microsoft.icon' : 'com.microsoft.ico', + 'application/zip' : 'com.pkware.zip-archive', + 'application/rtf' : 'public.rtf', + 'application/xml' : 'public.xml', + 'application/x-tar' : 'public.tar-archive', + 'application/gzip' : 'org.gnu.gnu-zip-archive', + 'application/x-compressed' : 'org.gnu.gnu-zip-tar-archive', + 'application/msword' : 'com.microsoft.word.doc', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'com.microsoft.word.doc', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'com.microsoft.excel.xls', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'com.microsoft.powerpoint.​ppt', + 'application/pdf' : 'com.adobe.pdf', + }; + + static const androidSupportedTypes = [ + 'image/bmp', + 'image/jpeg', + 'image/gif', + 'image/png', + 'text/plain', + 'text/html', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/msword', + 'application/vnd.ms-excel', + 'application/vnd.ms-powerpoint', + 'application/vnd.ms-outlook', + 'application/vnd.ms-works', + 'application/vnd.mpohun.certificate', + 'application/vnd.android.package-archive', + 'application/octet-stream', + 'application/x-tar', + 'application/x-gtar', + 'application/x-gzip', + 'application/x-javascript', + 'application/x-compressed', + 'application/x-zip-compressed', + 'application/java-archive', + 'application/pdf', + 'application/rtf', + 'audio/x-mpegurl', + 'video/x-m4v', + 'video/x-ms-asf', + 'video/x-msvideo', + 'audio/x-mpeg', + 'audio/mp4a-latm', + 'video/vnd.mpegurl', + 'video/quicktime', + 'video/mp4', + 'video/3gpp', + 'video/mpeg', + 'audio/mpeg', + 'audio/ogg', + 'audio/x-pn-realaudio', + 'audio/x-wav', + 'audio/x-ms-wma', + 'audio/x-ms-wmv', + ]; +}