create exception for session web
This commit is contained in:
@@ -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
-1
@@ -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();
|
||||||
+7
-6
@@ -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);
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -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,12 +9,12 @@ 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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -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>()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+18
-18
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user