create exception for session web

This commit is contained in:
ManhNTX
2022-07-12 15:27:53 +07:00
committed by Dat H. Pham
parent ef436c3557
commit 269e8dbfef
11 changed files with 47 additions and 40 deletions
+1
View File
@@ -88,6 +88,7 @@ export 'data/network/download/download_client.dart';
export 'data/network/download/download_manager.dart'; export 'data/network/download/download_manager.dart';
export 'data/network/download/downloaded_response.dart'; export 'data/network/download/downloaded_response.dart';
export 'data/network/download/download_client.dart'; export 'data/network/download/download_client.dart';
export 'data/model/exception/session_web_exception.dart';
// State // State
export 'presentation/state/success.dart'; export 'presentation/state/success.dart';
@@ -0,0 +1,5 @@
class SessionWebException implements Exception {
final String? errorMessage;
SessionWebException({this.errorMessage});
}
@@ -16,7 +16,7 @@ Accepted
## Consequences ## Consequences
- Using local storage to save data in onBeforeUnload state of web - Using session storage to save data in onBeforeUnload state of web
## Reference ## Reference
@@ -1,7 +1,7 @@
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/model/composer_cache.dart';
abstract class ComposerCacheDataSource { abstract class SessionStorageComposerDatasource {
void saveComposerCacheOnWeb(Email email); void saveComposerCacheOnWeb(Email email);
ComposerCache getComposerCacheOnWeb(); ComposerCache getComposerCacheOnWeb();
@@ -1,11 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:core/core.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.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/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; import 'package:universal_html/html.dart' as html;
class ComposerCacheDataSourceImpl extends ComposerCacheDataSource { class SessionStorageComposerDatasourceImpl extends SessionStorageComposerDatasource {
@override @override
ComposerCache getComposerCacheOnWeb() { ComposerCache getComposerCacheOnWeb() {
try { try {
@@ -17,10 +18,10 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource {
final emailCache = ComposerCache.fromJson(jsonHandle); final emailCache = ComposerCache.fromJson(jsonHandle);
return emailCache; return emailCache;
} else { } else {
throw UnimplementedError(); throw SessionWebException();
} }
} catch (e) { } catch (e) {
throw UnimplementedError(e.toString()); throw SessionWebException(errorMessage: e.toString());
} }
} }
@@ -30,7 +31,7 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource {
html.window.sessionStorage html.window.sessionStorage
.removeWhere((key, value) => key == EmailActionType.edit.name); .removeWhere((key, value) => key == EmailActionType.edit.name);
} catch (e) { } catch (e) {
throw UnimplementedError(e.toString()); throw SessionWebException(errorMessage: e.toString());
} }
} }
@@ -42,7 +43,7 @@ class ComposerCacheDataSourceImpl extends ComposerCacheDataSource {
}; };
html.window.sessionStorage.addAll(entries); html.window.sessionStorage.addAll(entries);
} catch (e) { } catch (e) {
throw UnimplementedError(e.toString()); throw SessionWebException(errorMessage: e.toString());
} }
} }
} }
@@ -52,7 +52,6 @@ class ComposerCache with EquatableMixin {
replyTo: (json['replyTo'] as List<dynamic>?)?.map((json) => EmailAddress.fromJson(json)).toSet(), replyTo: (json['replyTo'] as List<dynamic>?)?.map((json) => EmailAddress.fromJson(json)).toSet(),
textBody: (json['textBody'] as List<dynamic>?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), textBody: (json['textBody'] as List<dynamic>?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(),
htmlBody: (json['htmlBody'] as List<dynamic>?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(), htmlBody: (json['htmlBody'] as List<dynamic>?)?.map((json) => EmailBodyPart.fromJson(json)).toSet(),
); );
} }
@@ -65,7 +64,6 @@ class ComposerCache with EquatableMixin {
cc, cc,
bcc, bcc,
replyTo, replyTo,
]; ];
List<EmailContent> get emailContentList { List<EmailContent> get emailContentList {
@@ -1,11 +1,11 @@
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; 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/data/model/composer_cache.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
class ComposerCacheRepositoryImpl extends ComposerCacheRepository { class ComposerCacheRepositoryImpl extends ComposerCacheRepository {
final ComposerCacheDataSource composerCacheDataSource; final SessionStorageComposerDatasource composerCacheDataSource;
ComposerCacheRepositoryImpl(this.composerCacheDataSource); ComposerCacheRepositoryImpl(this.composerCacheDataSource);
@@ -1,3 +1,4 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.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/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_composer_cache_state.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); RemoveComposerCacheOnWebInteractor(this.composerCacheRepository);
execute() { Either<Failure, Success> execute() {
try { try {
composerCacheRepository.removeComposerCacheOnWeb(); composerCacheRepository.removeComposerCacheOnWeb();
return const Right(RemoveComposerCacheSuccess); return Right(RemoveComposerCacheSuccess());
} catch (exception) { } catch (exception) {
return Left(RemoveComposerCacheFailure(exception)); return Left(RemoveComposerCacheFailure(exception));
} }
@@ -1,3 +1,4 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.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'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/composer_cache_repository.dart';
@@ -8,10 +9,10 @@ class SaveComposerCacheOnWebInteractor {
SaveComposerCacheOnWebInteractor(this.composerCacheRepository); SaveComposerCacheOnWebInteractor(this.composerCacheRepository);
execute(Email email) { Either<Failure, Success> execute(Email email) {
try { try {
composerCacheRepository.saveComposerCacheOnWeb(email); composerCacheRepository.saveComposerCacheOnWeb(email);
return const Right(SaveComposerCacheSuccess); return Right(SaveComposerCacheSuccess());
} catch (exception) { } catch (exception) {
return Left(SaveComposerCacheFailure(exception)); return Left(SaveComposerCacheFailure(exception));
} }
@@ -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/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/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.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/session_storage_composer_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_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/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/repository/composer_cache_repository.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.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<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>()); Get.lazyPut<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>());
Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>()); Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>());
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>()); Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
Get.lazyPut<ComposerCacheDataSource>(() => Get.find<ComposerCacheDataSourceImpl>()); Get.lazyPut<SessionStorageComposerDatasource>(() => Get.find<SessionStorageComposerDatasourceImpl>());
} }
@override @override
@@ -142,7 +142,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<TokenOidcCacheManager>(), Get.find<TokenOidcCacheManager>(),
Get.find<OidcConfigurationCacheManager>() Get.find<OidcConfigurationCacheManager>()
)); ));
Get.lazyPut(() => ComposerCacheDataSourceImpl()); Get.lazyPut(() => SessionStorageComposerDatasourceImpl());
} }
@override @override
@@ -218,6 +218,6 @@ class MailboxDashBoardBindings extends BaseBindings {
)); ));
Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>())); Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>()));
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>())); Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<ComposerCacheDataSource>())); Get.lazyPut(() => ComposerCacheRepositoryImpl(Get.find<SessionStorageComposerDatasource>()));
} }
} }
@@ -126,24 +126,24 @@ class MailboxDashBoardController extends ReloadableController {
void _handleComposerCache() async { void _handleComposerCache() async {
_getEmailCacheOnWebInteractor.execute().fold( _getEmailCacheOnWebInteractor.execute().fold(
(failure) {}, (failure) {},
(success) { (success) {
if(success is GetComposerCacheSuccess){ if(success is GetComposerCacheSuccess){
final ComposerArguments composerArguments = ComposerArguments( final ComposerArguments composerArguments = ComposerArguments(
emailActionType: EmailActionType.edit, emailActionType: EmailActionType.edit,
presentationEmail: PresentationEmail( presentationEmail: PresentationEmail(
success.composerCache.id, success.composerCache.id,
subject: success.composerCache.subject, subject: success.composerCache.subject,
from: success.composerCache.from, from: success.composerCache.from,
to: success.composerCache.to, to: success.composerCache.to,
cc: success.composerCache.cc, cc: success.composerCache.cc,
bcc: success.composerCache.bcc, bcc: success.composerCache.bcc,
), ),
emailContents: success.composerCache.emailContentList, emailContents: success.composerCache.emailContentList,
); );
openComposerOverlay(composerArguments); openComposerOverlay(composerArguments);
} }
} },
); );
} }