TF-3416 Implement preview EML attachment
This commit is contained in:
@@ -7,12 +7,14 @@ import 'package:core/utils/application_manager.dart';
|
||||
import 'package:core/utils/config/app_config_loader.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:core/utils/preview_eml_file_utils.dart';
|
||||
import 'package:core/utils/print_utils.dart';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||
@@ -72,6 +74,7 @@ class CoreBindings extends Bindings {
|
||||
if (PlatformInfo.isIOS) {
|
||||
Get.put(IOSNotificationManager());
|
||||
}
|
||||
Get.put(PreviewEmlFileUtils());
|
||||
}
|
||||
|
||||
void _bindingIsolate() {
|
||||
@@ -88,5 +91,6 @@ class CoreBindings extends Bindings {
|
||||
accessibility: KeychainAccessibility.first_unlock_this_device
|
||||
)
|
||||
));
|
||||
Get.put(LocalStorageManager());
|
||||
}
|
||||
}
|
||||
@@ -4294,4 +4294,17 @@ class AppLocalizations {
|
||||
);
|
||||
}
|
||||
|
||||
String get parseEmailByBlobIdFailed {
|
||||
return Intl.message(
|
||||
'Cannot parse email by blob id',
|
||||
name: 'parseEmailByBlobIdFailed',
|
||||
);
|
||||
}
|
||||
|
||||
String get previewEmailFromEMLFileFailed {
|
||||
return Intl.message(
|
||||
'Cannot preview this eml file',
|
||||
name: 'previewEmailFromEMLFileFailed',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'
|
||||
import 'package:tmail_ui_user/features/contact/presentation/contact_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart' deferred as destination_picker;
|
||||
import 'package:tmail_ui_user/features/email_previewer/email_previewer_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/email_recovery/presentation/email_recovery_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/home/presentation/home_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/home/presentation/home_view.dart';
|
||||
@@ -36,6 +37,7 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_view.dart' deferred as search_mailbox_view;
|
||||
import 'package:tmail_ui_user/features/mailto/presentation/mailto_url_view.dart' deferred as mailto_url_view;
|
||||
import 'package:tmail_ui_user/features/email_recovery/presentation/email_recovery_view.dart' deferred as email_recovery;
|
||||
import 'package:tmail_ui_user/features/email_previewer/email_previewer_view.dart' deferred as email_previewer_view;
|
||||
|
||||
class AppPages {
|
||||
static final pages = [
|
||||
@@ -82,6 +84,14 @@ class AppPages {
|
||||
contact_view.loadLibrary,
|
||||
() => contact_view.ContactView()),
|
||||
binding: ContactBindings()),
|
||||
GetPage(
|
||||
name: AppRoutes.emailEMLPreviewer,
|
||||
page: () => DeferredWidget(
|
||||
email_previewer_view.loadLibrary,
|
||||
() => email_previewer_view.EmailPreviewerView(),
|
||||
),
|
||||
binding: EmailPreviewerBindings(),
|
||||
),
|
||||
unknownRoutePage,
|
||||
if (PlatformInfo.isMobile)
|
||||
...[
|
||||
|
||||
@@ -16,4 +16,5 @@ abstract class AppRoutes {
|
||||
static const searchMailbox = '/search_mailbox';
|
||||
static const mailtoURL = '/mailto';
|
||||
static const emailRecovery = '/email_recovery';
|
||||
static const emailEMLPreviewer = '/mail/eml/preview';
|
||||
}
|
||||
@@ -83,12 +83,22 @@ abstract class RouteUtils {
|
||||
return servicePath;
|
||||
}
|
||||
|
||||
static ServicePath _createEmailEMLPreviewerServicePath(String route, {String? previewId}) {
|
||||
ServicePath servicePath = ServicePath(route);
|
||||
if (previewId?.trim().isNotEmpty == true) {
|
||||
servicePath = servicePath.withQueryParameters([
|
||||
StringQueryParameter(paramID, previewId!)
|
||||
]);
|
||||
}
|
||||
return servicePath;
|
||||
}
|
||||
|
||||
static ServicePath _createServicePath(String route) {
|
||||
ServicePath servicePath = ServicePath(route);
|
||||
return servicePath;
|
||||
}
|
||||
|
||||
static Uri createUrlWebLocationBar(String route, {NavigationRouter? router}) {
|
||||
static Uri createUrlWebLocationBar(String route, {NavigationRouter? router, String? previewId}) {
|
||||
if (route == AppRoutes.dashboard) {
|
||||
final servicePath = _createDashboardServicePath(
|
||||
'$baseOriginUrl$route',
|
||||
@@ -98,6 +108,12 @@ abstract class RouteUtils {
|
||||
} else if (route == AppRoutes.settings) {
|
||||
final servicePath = _createSettingServicePath('$baseOriginUrl$route', router: router);
|
||||
return Uri.parse(servicePath.path);
|
||||
} else if (route == AppRoutes.emailEMLPreviewer) {
|
||||
final servicePath = _createEmailEMLPreviewerServicePath(
|
||||
'$baseOriginUrl$route',
|
||||
previewId: previewId,
|
||||
);
|
||||
return Uri.parse(servicePath.path);
|
||||
} else {
|
||||
final servicePath = _createServicePath('$baseOriginUrl$route');
|
||||
return Uri.parse(servicePath.path);
|
||||
|
||||
@@ -5,6 +5,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/parse_email_by_blob_id_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/preview_email_from_eml_file_state.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
|
||||
@@ -84,6 +86,10 @@ class ToastManager {
|
||||
} else {
|
||||
message = AppLocalizations.of(currentContext!).createTwakeIdFailed;
|
||||
}
|
||||
} else if (failure is ParseEmailByBlobIdFailure) {
|
||||
message = AppLocalizations.of(currentContext!).parseEmailByBlobIdFailed;
|
||||
} else if (failure is PreviewEmailFromEmlFileFailure) {
|
||||
message = AppLocalizations.of(currentContext!).previewEmailFromEMLFileFailed;
|
||||
}
|
||||
|
||||
if (message?.isNotEmpty == true) {
|
||||
|
||||
Reference in New Issue
Block a user