From 269e8dbfeffa5c3479c7f543c51d3ea66113f415 Mon Sep 17 00:00:00 2001 From: ManhNTX Date: Tue, 12 Jul 2022 15:27:53 +0700 Subject: [PATCH] create exception for session web --- core/lib/core.dart | 1 + .../exception/session_web_exception.dart | 5 +++ ...on-before-unload-not-support-indexed-db.md | 2 +- ... session_storage_composer_datasource.dart} | 2 +- ...sion_storage_composer_datasoure_impl.dart} | 13 +++---- .../data/model/composer_cache.dart | 2 -- .../composer_cache_repository_impl.dart | 4 +-- ...move_composer_cache_on_web_interactor.dart | 5 +-- ...save_composer_cache_on_web_interactor.dart | 7 ++-- .../bindings/mailbox_dashboard_bindings.dart | 10 +++--- .../mailbox_dashboard_controller.dart | 36 +++++++++---------- 11 files changed, 47 insertions(+), 40 deletions(-) create mode 100644 core/lib/data/model/exception/session_web_exception.dart rename lib/features/mailbox_dashboard/data/datasource/{composer_cache_datasource.dart => session_storage_composer_datasource.dart} (84%) rename lib/features/mailbox_dashboard/data/datasource_impl/{composer_cache_datasoure_impl.dart => session_storage_composer_datasoure_impl.dart} (75%) diff --git a/core/lib/core.dart b/core/lib/core.dart index 3a1acc5d6..cfa6fb2d4 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -88,6 +88,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'; // 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 new file mode 100644 index 000000000..8c7edf62f --- /dev/null +++ b/core/lib/data/model/exception/session_web_exception.dart @@ -0,0 +1,5 @@ +class SessionWebException implements Exception { + final String? errorMessage; + + SessionWebException({this.errorMessage}); +} diff --git a/docs/adr/0009-on-before-unload-not-support-indexed-db.md b/docs/adr/0009-on-before-unload-not-support-indexed-db.md index ada4197b3..5af4a1275 100644 --- a/docs/adr/0009-on-before-unload-not-support-indexed-db.md +++ b/docs/adr/0009-on-before-unload-not-support-indexed-db.md @@ -16,7 +16,7 @@ Accepted ## Consequences -- Using local storage to save data in onBeforeUnload state of web +- Using session storage to save data in onBeforeUnload state of web ## Reference diff --git a/lib/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart b/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart similarity index 84% rename from lib/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart rename to lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart index 56450f831..622506aa0 100644 --- a/lib/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart +++ b/lib/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart @@ -1,7 +1,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; -abstract class ComposerCacheDataSource { +abstract class SessionStorageComposerDatasource { void saveComposerCacheOnWeb(Email email); ComposerCache getComposerCacheOnWeb(); diff --git a/lib/features/mailbox_dashboard/data/datasource_impl/composer_cache_datasoure_impl.dart b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart similarity index 75% rename from lib/features/mailbox_dashboard/data/datasource_impl/composer_cache_datasoure_impl.dart rename to lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart index 85042f2fa..1a192bfa4 100644 --- a/lib/features/mailbox_dashboard/data/datasource_impl/composer_cache_datasoure_impl.dart +++ b/lib/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart @@ -1,11 +1,12 @@ import 'dart:convert'; +import 'package:core/core.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:universal_html/html.dart' as html; -class ComposerCacheDataSourceImpl extends ComposerCacheDataSource { +class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasource { @override ComposerCache getComposerCacheOnWeb() { try { @@ -17,10 +18,10 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource { final emailCache = ComposerCache.fromJson(jsonHandle); return emailCache; } else { - throw UnimplementedError(); + throw SessionWebException(); } } catch (e) { - throw UnimplementedError(e.toString()); + throw SessionWebException(errorMessage: e.toString()); } } @@ -30,7 +31,7 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource { html.window.sessionStorage .removeWhere((key, value) => key == EmailActionType.edit.name); } catch (e) { - throw UnimplementedError(e.toString()); + throw SessionWebException(errorMessage: e.toString()); } } @@ -42,7 +43,7 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource { }; html.window.sessionStorage.addAll(entries); } catch (e) { - throw UnimplementedError(e.toString()); + throw SessionWebException(errorMessage: e.toString()); } } } diff --git a/lib/features/mailbox_dashboard/data/model/composer_cache.dart b/lib/features/mailbox_dashboard/data/model/composer_cache.dart index 6d9b1cb26..bbe03218c 100644 --- a/lib/features/mailbox_dashboard/data/model/composer_cache.dart +++ b/lib/features/mailbox_dashboard/data/model/composer_cache.dart @@ -52,7 +52,6 @@ class ComposerCache with EquatableMixin { replyTo: (json['replyTo'] as List?)?.map((json) => EmailAddress.fromJson(json)).toSet(), textBody: (json['textBody'] as List?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), htmlBody: (json['htmlBody'] as List?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), - ); } @@ -65,7 +64,6 @@ class ComposerCache with EquatableMixin { cc, bcc, replyTo, - ]; List get emailContentList { diff --git a/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart b/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart index 91b41fe0b..c7ca32519 100644 --- a/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart +++ b/lib/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart @@ -1,11 +1,11 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; class ComposerCacheRepositoryImpl extends ComposerCacheRepository { - final ComposerCacheDataSource composerCacheDataSource; + final SessionStorageComposerDatasource composerCacheDataSource; ComposerCacheRepositoryImpl(this.composerCacheDataSource); diff --git a/lib/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart b/lib/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart index 1b13c7486..6674a5029 100644 --- a/lib/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart +++ b/lib/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart @@ -1,3 +1,4 @@ +import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_composer_cache_state.dart'; @@ -7,10 +8,10 @@ class RemoveComposerCacheOnWebInteractor { RemoveComposerCacheOnWebInteractor(this.composerCacheRepository); - execute() { + Either execute() { try { composerCacheRepository.removeComposerCacheOnWeb(); - return const Right(RemoveComposerCacheSuccess); + return Right(RemoveComposerCacheSuccess()); } catch (exception) { return Left(RemoveComposerCacheFailure(exception)); } diff --git a/lib/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart b/lib/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart index e4b073c6d..e08c19eef 100644 --- a/lib/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart +++ b/lib/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart @@ -1,3 +1,4 @@ +import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; @@ -8,12 +9,12 @@ class SaveComposerCacheOnWebInteractor { SaveComposerCacheOnWebInteractor(this.composerCacheRepository); - execute(Email email) { + Either execute(Email email) { try { composerCacheRepository.saveComposerCacheOnWeb(email); - return const Right(SaveComposerCacheSuccess); + return Right(SaveComposerCacheSuccess()); } catch (exception) { return Left(SaveComposerCacheFailure(exception)); } } -} \ No newline at end of file +} diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index 5a1610eb2..55fb2d79a 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -19,8 +19,8 @@ import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/composer_cache_datasource.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/composer_cache_datasoure_impl.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/session_storage_composer_datasource.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/composer_cache_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart'; @@ -119,7 +119,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); - Get.lazyPut(() => Get.find()); + Get.lazyPut(() => Get.find()); } @override @@ -142,7 +142,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find() )); - Get.lazyPut(() => ComposerCacheDataSourceImpl()); + Get.lazyPut(() => SessionStorageComposerDatasourceImpl()); } @override @@ -218,6 +218,6 @@ class MailboxDashBoardBindings extends BaseBindings { )); Get.lazyPut(() => AccountRepositoryImpl(Get.find())); Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find())); - Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find())); + Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find())); } } \ No newline at end of file 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 c523c78f1..7fbc637ee 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -126,24 +126,24 @@ 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); - } - } + (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); + } + }, ); }