From 87350010100658c3274c55e6c426091754e8d350 Mon Sep 17 00:00:00 2001 From: ManhNTX Date: Tue, 12 Jul 2022 16:10:07 +0700 Subject: [PATCH] handle session when reload --- core/lib/core.dart | 3 +- .../exception/session_web_exception.dart | 5 -- .../exceptions/web_session_exception.dart | 19 ++++++++ .../presentation/composer_controller.dart | 10 ++-- .../model/composer_arguments.dart | 1 - ...ssion_storage_composer_datasoure_impl.dart | 14 +++--- .../mailbox_dashboard_controller.dart | 46 +++++++++---------- 7 files changed, 59 insertions(+), 39 deletions(-) delete mode 100644 core/lib/data/model/exception/session_web_exception.dart create mode 100644 core/lib/domain/exceptions/web_session_exception.dart diff --git a/core/lib/core.dart b/core/lib/core.dart index cfa6fb2d4..d68e58805 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -16,6 +16,7 @@ export 'domain/exceptions/download_file_exception.dart'; export 'data/extensions/options_extensions.dart'; export 'domain/exceptions/remote_exception.dart'; export 'data/network/remote_exception_thrower.dart'; +export 'domain/exceptions/web_session_exception.dart'; // Utils export 'presentation/utils/theme_utils.dart'; @@ -88,7 +89,7 @@ export 'data/network/download/download_client.dart'; export 'data/network/download/download_manager.dart'; export 'data/network/download/downloaded_response.dart'; export 'data/network/download/download_client.dart'; -export 'data/model/exception/session_web_exception.dart'; +export 'domain/exceptions/web_session_exception.dart'; // State export 'presentation/state/success.dart'; diff --git a/core/lib/data/model/exception/session_web_exception.dart b/core/lib/data/model/exception/session_web_exception.dart deleted file mode 100644 index 8c7edf62f..000000000 --- a/core/lib/data/model/exception/session_web_exception.dart +++ /dev/null @@ -1,5 +0,0 @@ -class SessionWebException implements Exception { - final String? errorMessage; - - SessionWebException({this.errorMessage}); -} diff --git a/core/lib/domain/exceptions/web_session_exception.dart b/core/lib/domain/exceptions/web_session_exception.dart new file mode 100644 index 000000000..62a2535a3 --- /dev/null +++ b/core/lib/domain/exceptions/web_session_exception.dart @@ -0,0 +1,19 @@ +import 'package:equatable/equatable.dart'; + +class NotFoundInWebSessionException with EquatableMixin implements Exception { + final String? errorMessage; + + NotFoundInWebSessionException({this.errorMessage}); + + @override + List get props => []; +} + +class SaveToWebSessionFailException with EquatableMixin implements Exception { + final String? errorMessage; + + SaveToWebSessionFailException({this.errorMessage}); + + @override + List get props => []; +} diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 9787b523c..320d03ba9 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -165,7 +165,9 @@ class ComposerController extends BaseController { await FkUserAgent.init(); }); } else { - _listenBrowserTabRefresh(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _listenBrowserTabRefresh(); + }); } } @@ -251,6 +253,7 @@ class ComposerController extends BaseController { _removeComposerCacheOnWebInteractor.execute(); if (userProfile != null) { final draftEmail = await _generateEmail( + currentContext!, mailboxDashBoardController.mapDefaultMailboxId, userProfile, ); @@ -258,7 +261,7 @@ class ComposerController extends BaseController { } }); } - + void _initEmail() { final arguments = kIsWeb ? mailboxDashBoardController.routerArguments : Get.arguments; if (arguments is ComposerArguments) { @@ -815,7 +818,8 @@ class ComposerController extends BaseController { void _getEmailContentAction(ComposerArguments arguments) async { if(arguments.emailContents != null && arguments.emailContents!.isNotEmpty){ - emailContents.value = arguments.emailContents; + _emailContents = arguments.emailContents; + emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!,[],[])); } else { final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first; diff --git a/lib/features/email/presentation/model/composer_arguments.dart b/lib/features/email/presentation/model/composer_arguments.dart index f599116a9..2111a73e5 100644 --- a/lib/features/email/presentation/model/composer_arguments.dart +++ b/lib/features/email/presentation/model/composer_arguments.dart @@ -1,4 +1,3 @@ - import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart index 1a192bfa4..eb55124b6 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart @@ -6,7 +6,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cac import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:universal_html/html.dart' as html; -class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasource { +class SessionStorageComposerDatasourceImpl + extends SessionStorageComposerDatasource { @override ComposerCache getComposerCacheOnWeb() { try { @@ -14,14 +15,15 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou .where((e) => e.key == EmailActionType.edit.name) .toList(); if (result.isNotEmpty) { - final jsonHandle = json.decode(result.first.value) as Map; + final jsonHandle = + json.decode(result.first.value) as Map; final emailCache = ComposerCache.fromJson(jsonHandle); return emailCache; } else { - throw SessionWebException(); + throw NotFoundInWebSessionException(); } } catch (e) { - throw SessionWebException(errorMessage: e.toString()); + throw NotFoundInWebSessionException(errorMessage: e.toString()); } } @@ -31,7 +33,7 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou html.window.sessionStorage .removeWhere((key, value) => key == EmailActionType.edit.name); } catch (e) { - throw SessionWebException(errorMessage: e.toString()); + throw NotFoundInWebSessionException(errorMessage: e.toString()); } } @@ -43,7 +45,7 @@ class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasou }; html.window.sessionStorage.addAll(entries); } catch (e) { - throw SessionWebException(errorMessage: e.toString()); + throw SaveToWebSessionFailException(errorMessage: e.toString()); } } } diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 7fbc637ee..73abf00b4 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -125,26 +125,28 @@ class MailboxDashBoardController extends ReloadableController { } void _handleComposerCache() async { - _getEmailCacheOnWebInteractor.execute().fold( - (failure) {}, - (success) { - if(success is GetComposerCacheSuccess){ - final ComposerArguments composerArguments = ComposerArguments( - emailActionType: EmailActionType.edit, - presentationEmail: PresentationEmail( - success.composerCache.id, - subject: success.composerCache.subject, - from: success.composerCache.from, - to: success.composerCache.to, - cc: success.composerCache.cc, - bcc: success.composerCache.bcc, - ), - emailContents: success.composerCache.emailContentList, - ); - openComposerOverlay(composerArguments); - } - }, - ); + if (kIsWeb && userProfile.value != null) { + _getEmailCacheOnWebInteractor.execute().fold( + (failure) {}, + (success) { + if(success is GetComposerCacheSuccess){ + final ComposerArguments composerArguments = ComposerArguments( + emailActionType: EmailActionType.edit, + presentationEmail: PresentationEmail( + success.composerCache.id, + subject: success.composerCache.subject, + from: success.composerCache.from, + to: success.composerCache.to, + cc: success.composerCache.cc, + bcc: success.composerCache.bcc, + ), + emailContents: success.composerCache.emailContentList, + ); + openComposerOverlay(composerArguments); + } + }, + ); + } } @override @@ -247,9 +249,6 @@ class MailboxDashBoardController extends ReloadableController { void _getUserProfile() async { userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; - if (kIsWeb && userProfile.value != null) { - _handleComposerCache(); - } } void _setSessionCurrent() { @@ -427,6 +426,7 @@ class MailboxDashBoardController extends ReloadableController { sessionCurrent = session; accountId.value = sessionCurrent?.accounts.keys.first; _getUserProfile(); + _handleComposerCache(); } UnsignedInt? get maxSizeAttachmentsPerEmail {