diff --git a/core/lib/data/model/source_type/data_source_type.dart b/core/lib/data/model/source_type/data_source_type.dart index 90ab33dd9..416d2f6ac 100644 --- a/core/lib/data/model/source_type/data_source_type.dart +++ b/core/lib/data/model/source_type/data_source_type.dart @@ -2,5 +2,6 @@ enum DataSourceType { network, local, + session, hiveCache; } \ No newline at end of file diff --git a/core/lib/utils/app_logger.dart b/core/lib/utils/app_logger.dart index 7664a65b1..4c691ae26 100644 --- a/core/lib/utils/app_logger.dart +++ b/core/lib/utils/app_logger.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; final logHistory = _Dispatcher(''); void log(String? value, {Level level = Level.info}) { - if (!kDebugMode) return; + // if (!kDebugMode) return; String logsStr = value ?? ''; logHistory.value = '$logsStr\n${logHistory.value}'; diff --git a/lib/features/caching/utils/session_storage_manager.dart b/lib/features/caching/utils/session_storage_manager.dart new file mode 100644 index 000000000..1afac4db2 --- /dev/null +++ b/lib/features/caching/utils/session_storage_manager.dart @@ -0,0 +1,27 @@ + +import 'package:collection/collection.dart'; +import 'package:tmail_ui_user/features/caching/exceptions/local_storage_exception.dart'; +import 'package:universal_html/html.dart' as html; + +class SessionStorageManager { + + void save(String key, String value) { + html.window.sessionStorage.addAll({key: value}); + } + + String get(String key) { + final entry = html.window.sessionStorage + .entries + .firstWhereOrNull((entry) => entry.key == key); + + if (entry != null) { + return entry.value; + } else { + throw NotFoundDataWithThisKeyException(); + } + } + + void remove(String key) { + html.window.sessionStorage.remove(key); + } +} \ No newline at end of file diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index e2ad10338..9c1c97009 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -3,6 +3,7 @@ import 'package:core/utils/application_manager.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart'; import 'package:tmail_ui_user/features/composer/data/datasource/contact_datasource.dart'; import 'package:tmail_ui_user/features/composer/data/datasource_impl/composer_datasource_impl.dart'; @@ -26,6 +27,7 @@ import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasour import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -136,6 +138,9 @@ class ComposerBindings extends BaseBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); Get.lazyPut(() => RemoteServerSettingsDataSourceImpl( Get.find(), Get.find())); @@ -177,6 +182,7 @@ class ComposerBindings extends BaseBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index a989e2b1e..02bb9e822 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -194,4 +194,10 @@ abstract class EmailDataSource { Future sharePreviewEmailEMLContent(String keyStored, String previewEMLContent); Future getPreviewEmailEMLContentShared(String keyStored); + + Future removePreviewEmailEMLContentShared(String keyStored); + + Future storePreviewEMLContentToSessionStorage(String keyStored, String content); + + Future getPreviewEMLContentInMemory(String keyStored); } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart index 6c89cd042..f04a59dc6 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -523,4 +523,19 @@ class EmailDataSourceImpl extends EmailDataSource { Future getPreviewEmailEMLContentShared(String keyStored) { throw UnimplementedError(); } + + @override + Future storePreviewEMLContentToSessionStorage(String keyStored, String content) { + throw UnimplementedError(); + } + + @override + Future removePreviewEmailEMLContentShared(String keyStored) { + throw UnimplementedError(); + } + + @override + Future getPreviewEMLContentInMemory(String keyStored) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart index fe38c8ed6..3cc3d4bad 100644 --- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart @@ -547,4 +547,19 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { Future getPreviewEmailEMLContentShared(String keyStored) { throw UnimplementedError(); } + + @override + Future removePreviewEmailEMLContentShared(String keyStored) { + throw UnimplementedError(); + } + + @override + Future storePreviewEMLContentToSessionStorage(String keyStored, String content) { + throw UnimplementedError(); + } + + @override + Future getPreviewEMLContentInMemory(String keyStored) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart index bdea0f469..6ebb40ef5 100644 --- a/lib/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart @@ -221,4 +221,21 @@ class EmailLocalStorageDataSourceImpl extends EmailDataSource { return _localStorageManager.get(keyStored); }).catchError(_exceptionThrower.throwException); } + + @override + Future storePreviewEMLContentToSessionStorage(String keyStored, String content) { + throw UnimplementedError(); + } + + @override + Future removePreviewEmailEMLContentShared(String keyStored) { + return Future.sync(() async { + return _localStorageManager.remove(keyStored); + }).catchError(_exceptionThrower.throwException); + } + + @override + Future getPreviewEMLContentInMemory(String keyStored) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart new file mode 100644 index 000000000..6cb872596 --- /dev/null +++ b/lib/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart @@ -0,0 +1,239 @@ + +import 'dart:async'; +import 'dart:typed_data'; + +import 'package:core/data/network/download/downloaded_response.dart'; +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/error/set_error.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; +import 'package:jmap_dart_client/jmap/core/session/session.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:model/account/account_request.dart'; +import 'package:model/download/download_task_id.dart'; +import 'package:model/email/attachment.dart'; +import 'package:model/email/mark_star_action.dart'; +import 'package:model/email/read_actions.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; +import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; +import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; +import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; +import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; +import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; + +class EmailSessionStorageDatasourceImpl extends EmailDataSource { + + final SessionStorageManager _sessionStorageManager; + final ExceptionThrower _exceptionThrower; + + EmailSessionStorageDatasourceImpl( + this._sessionStorageManager, + this._exceptionThrower, + ); + + @override + Future deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId, {CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future<({List emailIdsSuccess, Map mapErrors})> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List emailIds) { + throw UnimplementedError(); + } + + @override + Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { + throw UnimplementedError(); + } + + @override + Future deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) { + throw UnimplementedError(); + } + + @override + Future downloadAttachmentForWeb(DownloadTaskId taskId, Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, StreamController> onReceiveController, {CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future> downloadAttachments(List attachments, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest) { + throw UnimplementedError(); + } + + @override + Future exportAttachment(Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, CancelToken cancelToken) { + throw UnimplementedError(); + } + + @override + Future generatePreviewEmailEMLContent(PreviewEmailEMLRequest previewEmailEMLRequest) { + throw UnimplementedError(); + } + + @override + Future> getAllSendingEmails(AccountId accountId, UserName userName) { + throw UnimplementedError(); + } + + @override + Future getDetailedEmailById(Session session, AccountId accountId, EmailId emailId) { + throw UnimplementedError(); + } + + @override + Future getEmailContent(Session session, AccountId accountId, EmailId emailId, {Properties? additionalProperties}) { + throw UnimplementedError(); + } + + @override + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + throw UnimplementedError(); + } + + @override + Future getStoredEmail(Session session, AccountId accountId, EmailId emailId) { + throw UnimplementedError(); + } + + @override + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId) { + throw UnimplementedError(); + } + + @override + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId) { + throw UnimplementedError(); + } + + @override + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId) { + throw UnimplementedError(); + } + + @override + Future<({List emailIdsSuccess, Map mapErrors})> markAsRead(Session session, AccountId accountId, List emailIds, ReadActions readActions) { + throw UnimplementedError(); + } + + @override + Future<({List emailIdsSuccess, Map mapErrors})> markAsStar(Session session, AccountId accountId, List emailIds, MarkStarAction markStarAction) { + throw UnimplementedError(); + } + + @override + Future<({List emailIdsSuccess, Map mapErrors})> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) { + throw UnimplementedError(); + } + + @override + Future> parseEmailByBlobIds(AccountId accountId, Set blobIds) { + throw UnimplementedError(); + } + + @override + Future removeEmailDrafts(Session session, AccountId accountId, EmailId emailId, {CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest) { + throw UnimplementedError(); + } + + @override + Future saveEmailAsDrafts(Session session, AccountId accountId, Email email, {CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future sendEmail(Session session, AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest, CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future sharePreviewEmailEMLContent(String keyStored, String previewEMLContent) { + throw UnimplementedError(); + } + + @override + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { + throw UnimplementedError(); + } + + @override + Future storeEmail(Session session, AccountId accountId, Email email) { + throw UnimplementedError(); + } + + @override + Future storeEventAttendanceStatus(Session session, AccountId accountId, EmailId emailId, EventActionType eventActionType) { + throw UnimplementedError(); + } + + @override + Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { + throw UnimplementedError(); + } + + @override + Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail) { + throw UnimplementedError(); + } + + @override + Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { + throw UnimplementedError(); + } + + @override + Future updateEmailDrafts(Session session, AccountId accountId, Email newEmail, EmailId oldEmailId, {CancelToken? cancelToken}) { + throw UnimplementedError(); + } + + @override + Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails) { + throw UnimplementedError(); + } + + @override + Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail) { + throw UnimplementedError(); + } + + @override + Future getPreviewEmailEMLContentShared(String keyStored) { + throw UnimplementedError(); + } + + @override + Future storePreviewEMLContentToSessionStorage(String keyStored, String content) { + return Future.sync(() async { + return _sessionStorageManager.save(keyStored, content); + }).catchError(_exceptionThrower.throwException); + } + + @override + Future removePreviewEmailEMLContentShared(String keyStored) { + throw UnimplementedError(); + } + + @override + Future getPreviewEMLContentInMemory(String keyStored) { + return Future.sync(() async { + return _sessionStorageManager.get(keyStored); + }).catchError(_exceptionThrower.throwException); + } +} \ No newline at end of file diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index 1cbc92f9a..e87e54289 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -504,4 +504,19 @@ class EmailRepositoryImpl extends EmailRepository { Future getPreviewEmailEMLContentShared(String keyStored) { return emailDataSource[DataSourceType.local]!.getPreviewEmailEMLContentShared(keyStored); } + + @override + Future removePreviewEmailEMLContentShared(String keyStored) { + return emailDataSource[DataSourceType.local]!.removePreviewEmailEMLContentShared(keyStored); + } + + @override + Future movePreviewEMLContentFromPersistentToMemory(String keyStored, String content) { + return emailDataSource[DataSourceType.session]!.storePreviewEMLContentToSessionStorage(keyStored, content); + } + + @override + Future getPreviewEMLContentInMemory(String keyStored) { + return emailDataSource[DataSourceType.session]!.getPreviewEMLContentInMemory(keyStored); + } } \ No newline at end of file diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index 9e86760a7..c4d95fa84 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -188,4 +188,10 @@ abstract class EmailRepository { Future sharePreviewEmailEMLContent(String keyStored, String previewEMLContent); Future getPreviewEmailEMLContentShared(String keyStored); + + Future removePreviewEmailEMLContentShared(String keyStored); + + Future movePreviewEMLContentFromPersistentToMemory(String keyStored, String content); + + Future getPreviewEMLContentInMemory(String keyStored); } \ No newline at end of file diff --git a/lib/features/email/domain/state/get_preview_email_content_shared_state.dart b/lib/features/email/domain/state/get_preview_email_content_shared_state.dart deleted file mode 100644 index c64fa3397..000000000 --- a/lib/features/email/domain/state/get_preview_email_content_shared_state.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:core/presentation/state/failure.dart'; -import 'package:core/presentation/state/success.dart'; - -class GettingPreviewEmailEMLContentShared extends LoadingState {} - -class GetPreviewEmailEMLContentSharedSuccess extends UIState { - - final String previewEMLContent; - - GetPreviewEmailEMLContentSharedSuccess(this.previewEMLContent); - - @override - List get props => [previewEMLContent]; -} - -class GetPreviewEmailEMLContentSharedFailure extends FeatureFailure { - - GetPreviewEmailEMLContentSharedFailure(dynamic exception) : super(exception: exception); -} \ No newline at end of file diff --git a/lib/features/email/domain/state/get_preview_email_eml_content_shared_state.dart b/lib/features/email/domain/state/get_preview_email_eml_content_shared_state.dart new file mode 100644 index 000000000..b6ce43a18 --- /dev/null +++ b/lib/features/email/domain/state/get_preview_email_eml_content_shared_state.dart @@ -0,0 +1,27 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class GettingPreviewEmailEMLContentShared extends LoadingState {} + +class GetPreviewEmailEMLContentSharedSuccess extends UIState { + + final String keyStored; + final String previewEMLContent; + + GetPreviewEmailEMLContentSharedSuccess(this.keyStored, this.previewEMLContent); + + @override + List get props => [keyStored, previewEMLContent]; +} + +class GetPreviewEmailEMLContentSharedFailure extends FeatureFailure { + final String? keyStored; + + GetPreviewEmailEMLContentSharedFailure({ + this.keyStored, + dynamic exception, + }) : super(exception: exception); + + @override + List get props => [keyStored, exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/state/get_preview_eml_content_in_memory_state.dart b/lib/features/email/domain/state/get_preview_eml_content_in_memory_state.dart new file mode 100644 index 000000000..b36ea9bb9 --- /dev/null +++ b/lib/features/email/domain/state/get_preview_eml_content_in_memory_state.dart @@ -0,0 +1,18 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class GettingPreviewEMLContentInMemory extends LoadingState {} + +class GetPreviewEMLContentInMemorySuccess extends UIState { + final String previewEMLContent; + + GetPreviewEMLContentInMemorySuccess(this.previewEMLContent); + + @override + List get props => [previewEMLContent]; +} + +class GetPreviewEMLContentInMemoryFailure extends FeatureFailure { + + GetPreviewEMLContentInMemoryFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/state/move_preview_eml_content_from_persistent_to_memory_state.dart b/lib/features/email/domain/state/move_preview_eml_content_from_persistent_to_memory_state.dart new file mode 100644 index 000000000..d19731b3c --- /dev/null +++ b/lib/features/email/domain/state/move_preview_eml_content_from_persistent_to_memory_state.dart @@ -0,0 +1,11 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class MovingPreviewEmailEMLContentFromPersistentToMemory extends LoadingState {} + +class MovePreviewEmailEMLContentFromPersistentToMemorySuccess extends UIState {} + +class MovePreviewEmailEMLContentFromPersistentToMemoryFailure extends FeatureFailure { + + MovePreviewEmailEMLContentFromPersistentToMemoryFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/state/remove_preview_email_eml_content_shared_state.dart b/lib/features/email/domain/state/remove_preview_email_eml_content_shared_state.dart new file mode 100644 index 000000000..621e5b827 --- /dev/null +++ b/lib/features/email/domain/state/remove_preview_email_eml_content_shared_state.dart @@ -0,0 +1,11 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class RemovingPreviewEmailEMLContentShared extends LoadingState {} + +class RemovePreviewEmailEMLContentSharedSuccess extends UIState {} + +class RemovePreviewEmailEMLContentSharedFailure extends FeatureFailure { + + RemovePreviewEmailEMLContentSharedFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/get_preview_email_eml_content_shared_interactor.dart b/lib/features/email/domain/usecases/get_preview_email_eml_content_shared_interactor.dart index 744dbb62f..be7a894e6 100644 --- a/lib/features/email/domain/usecases/get_preview_email_eml_content_shared_interactor.dart +++ b/lib/features/email/domain/usecases/get_preview_email_eml_content_shared_interactor.dart @@ -2,7 +2,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; -import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_content_shared_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_eml_content_shared_state.dart'; class GetPreviewEmailEMLContentSharedInteractor { final EmailRepository _emailRepository; @@ -16,9 +16,12 @@ class GetPreviewEmailEMLContentSharedInteractor { final previewEMLContent = await _emailRepository .getPreviewEmailEMLContentShared(keyStored); - yield Right(GetPreviewEmailEMLContentSharedSuccess(previewEMLContent)); + yield Right(GetPreviewEmailEMLContentSharedSuccess(keyStored, previewEMLContent)); } catch (e) { - yield Left(GetPreviewEmailEMLContentSharedFailure(e)); + yield Left(GetPreviewEmailEMLContentSharedFailure( + keyStored: keyStored, + exception: e, + )); } } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/get_preview_eml_content_in_memory_interactor.dart b/lib/features/email/domain/usecases/get_preview_eml_content_in_memory_interactor.dart new file mode 100644 index 000000000..812b01c64 --- /dev/null +++ b/lib/features/email/domain/usecases/get_preview_eml_content_in_memory_interactor.dart @@ -0,0 +1,21 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_eml_content_in_memory_state.dart'; + +class GetPreviewEmlContentInMemoryInteractor { + final EmailRepository _emailRepository; + + const GetPreviewEmlContentInMemoryInteractor(this._emailRepository); + + Stream> execute(String keyStored) async* { + try { + yield Right(GettingPreviewEMLContentInMemory()); + final previewEMLContent = await _emailRepository.getPreviewEMLContentInMemory(keyStored); + yield Right(GetPreviewEMLContentInMemorySuccess(previewEMLContent)); + } catch (e) { + yield Left(GetPreviewEMLContentInMemoryFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/move_preview_eml_content_from_persistent_to_memory_interactor.dart b/lib/features/email/domain/usecases/move_preview_eml_content_from_persistent_to_memory_interactor.dart new file mode 100644 index 000000000..6ed36c19c --- /dev/null +++ b/lib/features/email/domain/usecases/move_preview_eml_content_from_persistent_to_memory_interactor.dart @@ -0,0 +1,24 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/move_preview_eml_content_from_persistent_to_memory_state.dart'; + +class MovePreviewEmlContentFromPersistentToMemoryInteractor { + final EmailRepository _emailRepository; + + const MovePreviewEmlContentFromPersistentToMemoryInteractor(this._emailRepository); + + Stream> execute(String keyStored, String content) async* { + try { + yield Right(MovingPreviewEmailEMLContentFromPersistentToMemory()); + await Future.wait([ + _emailRepository.removePreviewEmailEMLContentShared(keyStored), + _emailRepository.movePreviewEMLContentFromPersistentToMemory(keyStored, content), + ]); + yield Right(MovePreviewEmailEMLContentFromPersistentToMemorySuccess()); + } catch (e) { + yield Left(MovePreviewEmailEMLContentFromPersistentToMemoryFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/remove_preview_email_eml_content_shared_interactor.dart b/lib/features/email/domain/usecases/remove_preview_email_eml_content_shared_interactor.dart new file mode 100644 index 000000000..68d88f589 --- /dev/null +++ b/lib/features/email/domain/usecases/remove_preview_email_eml_content_shared_interactor.dart @@ -0,0 +1,21 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/remove_preview_email_eml_content_shared_state.dart'; + +class RemovePreviewEmailEmlContentSharedInteractor { + final EmailRepository _emailRepository; + + const RemovePreviewEmailEmlContentSharedInteractor(this._emailRepository); + + Stream> execute(String keyStored) async* { + try { + yield Right(RemovingPreviewEmailEMLContentShared()); + await _emailRepository.removePreviewEmailEMLContentShared(keyStored); + yield Right(RemovePreviewEmailEMLContentSharedSuccess()); + } catch (e) { + yield Left(RemovePreviewEmailEMLContentSharedFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/email/presentation/bindings/email_bindings.dart b/lib/features/email/presentation/bindings/email_bindings.dart index 9019e3a35..384407ed0 100644 --- a/lib/features/email/presentation/bindings/email_bindings.dart +++ b/lib/features/email/presentation/bindings/email_bindings.dart @@ -2,12 +2,14 @@ import 'package:core/core.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -127,6 +129,9 @@ class EmailBindings extends BaseBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); } @override @@ -182,6 +187,7 @@ class EmailBindings extends BaseBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/features/email_previewer/email_previewer_bindings.dart b/lib/features/email_previewer/email_previewer_bindings.dart index 8a52fe404..ac4924d83 100644 --- a/lib/features/email_previewer/email_previewer_bindings.dart +++ b/lib/features/email_previewer/email_previewer_bindings.dart @@ -6,12 +6,14 @@ import 'package:core/utils/print_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -19,6 +21,9 @@ 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/get_preview_email_eml_content_shared_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/get_preview_eml_content_in_memory_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/move_preview_eml_content_from_persistent_to_memory_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/remove_preview_email_eml_content_shared_interactor.dart'; import 'package:tmail_ui_user/features/email_previewer/email_previewer_controller.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_datasource_impl.dart'; @@ -38,7 +43,10 @@ class EmailPreviewerBindings extends BaseBindings { @override void bindingsController() { Get.lazyPut(() => EmailPreviewerController( - Get.find())); + Get.find(), + Get.find(), + Get.find(), + Get.find())); } @override @@ -79,12 +87,21 @@ class EmailPreviewerBindings extends BaseBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); } @override void bindingsInteractor() { Get.lazyPut(() => GetPreviewEmailEMLContentSharedInteractor( Get.find())); + Get.lazyPut(() => MovePreviewEmlContentFromPersistentToMemoryInteractor( + Get.find())); + Get.lazyPut(() => RemovePreviewEmailEmlContentSharedInteractor( + Get.find())); + Get.lazyPut(() => GetPreviewEmlContentInMemoryInteractor( + Get.find())); } @override @@ -99,6 +116,7 @@ class EmailPreviewerBindings extends BaseBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/features/email_previewer/email_previewer_controller.dart b/lib/features/email_previewer/email_previewer_controller.dart index d2666ba69..3c075c9fc 100644 --- a/lib/features/email_previewer/email_previewer_controller.dart +++ b/lib/features/email_previewer/email_previewer_controller.dart @@ -1,32 +1,88 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/caching/exceptions/local_storage_exception.dart'; import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart'; -import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_content_shared_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_eml_content_shared_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_eml_content_in_memory_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/get_preview_email_eml_content_shared_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/get_preview_eml_content_in_memory_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/move_preview_eml_content_from_persistent_to_memory_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/remove_preview_email_eml_content_shared_interactor.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart'; class EmailPreviewerController extends BaseController { final GetPreviewEmailEMLContentSharedInteractor _getPreviewEmailEMLContentSharedInteractor; + final MovePreviewEmlContentFromPersistentToMemoryInteractor _movePreviewEmlContentFromPersistentToMemoryInteractor; + final RemovePreviewEmailEmlContentSharedInteractor _removePreviewEmailEmlContentSharedInteractor; + final GetPreviewEmlContentInMemoryInteractor _getPreviewEmlContentInMemoryInteractor; + + final emlContentViewState = Rx>(Right(UIState.idle)); EmailPreviewerController( this._getPreviewEmailEMLContentSharedInteractor, + this._movePreviewEmlContentFromPersistentToMemoryInteractor, + this._removePreviewEmailEmlContentSharedInteractor, + this._getPreviewEmlContentInMemoryInteractor, ); + @override + void onInit() { + consumeState(Stream.value(Right(GettingPreviewEmailEMLContentShared()))); + super.onInit(); + } + @override void onReady() { super.onReady(); _getPreviewEmailEMLContentShared(); } + @override + void handleSuccessViewState(Success success) { + if (success is GettingPreviewEmailEMLContentShared || + success is GettingPreviewEMLContentInMemory || + success is GetPreviewEMLContentInMemorySuccess) { + emlContentViewState.value = Right(success); + } else if (success is GetPreviewEmailEMLContentSharedSuccess) { + emlContentViewState.value = Right(success); + _movePreviewEmlContentFromPersistentToMemory( + success.keyStored, + success.previewEMLContent); + } else { + super.handleSuccessViewState(success); + } + } + + @override + void handleFailureViewState(Failure failure) { + if (failure is GetPreviewEmailEMLContentSharedFailure) { + emlContentViewState.value = Left(failure); + + if (failure.keyStored == null) return; + + if (failure.exception is NotFoundDataWithThisKeyException) { + _getPreviewEMLContentInMemory(failure.keyStored!); + } else { + _removePreviewEmlContentShared(failure.keyStored!); + } + } else if (failure is GetPreviewEMLContentInMemoryFailure) { + emlContentViewState.value = Left(failure); + } else { + super.handleFailureViewState(failure); + } + } + void _getPreviewEmailEMLContentShared() { final parameters = Get.parameters; if (parameters.isEmpty) { consumeState(Stream.value(Left(GetPreviewEmailEMLContentSharedFailure( - NotFoundBlobIdException([]))))); + exception: NotFoundBlobIdException([]))))); return; } @@ -35,7 +91,27 @@ class EmailPreviewerController extends BaseController { consumeState(_getPreviewEmailEMLContentSharedInteractor.execute(keyStored!)); } else { consumeState(Stream.value(Left(GetPreviewEmailEMLContentSharedFailure( - NotFoundBlobIdException([]))))); + exception: NotFoundBlobIdException([]))))); } } + + void _movePreviewEmlContentFromPersistentToMemory( + String keyStored, + String content, + ) { + consumeState( + _movePreviewEmlContentFromPersistentToMemoryInteractor.execute( + keyStored, + content, + ), + ); + } + + void _removePreviewEmlContentShared(String keyStored) { + consumeState(_removePreviewEmailEmlContentSharedInteractor.execute(keyStored)); + } + + void _getPreviewEMLContentInMemory(String keyStored) { + consumeState(_getPreviewEmlContentInMemoryInteractor.execute(keyStored)); + } } \ No newline at end of file diff --git a/lib/features/email_previewer/email_previewer_view.dart b/lib/features/email_previewer/email_previewer_view.dart index 534623019..d04032530 100644 --- a/lib/features/email_previewer/email_previewer_view.dart +++ b/lib/features/email_previewer/email_previewer_view.dart @@ -3,7 +3,8 @@ import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_w import 'package:core/presentation/views/loading/cupertino_loading_widget.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_content_shared_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_email_eml_content_shared_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_preview_eml_content_in_memory_state.dart'; import 'package:tmail_ui_user/features/email_previewer/email_previewer_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -16,19 +17,11 @@ class EmailPreviewerView extends GetWidget { return Scaffold( backgroundColor: Colors.white, body: Obx(() { - final viewState = controller.viewState.value; + final viewState = controller.emlContentViewState.value; return viewState.fold( - (failure) { - if (viewState is GetPreviewEmailEMLContentSharedFailure) { - return Center( - child: Text(AppLocalizations.of(context).previewEmailFromEMLFileFailed), - ); - } else { - return const Center( - child: CupertinoLoadingWidget(), - ); - } - }, + (failure) => Center( + child: Text(AppLocalizations.of(context).previewEmailFromEMLFileFailed), + ), (success) { if (success is GetPreviewEmailEMLContentSharedSuccess) { return HtmlContentViewerOnWeb( @@ -36,6 +29,12 @@ class EmailPreviewerView extends GetWidget { heightContent: context.height, contentHtml: success.previewEMLContent, ); + } else if (success is GetPreviewEMLContentInMemorySuccess) { + return HtmlContentViewerOnWeb( + widthContent: context.width, + heightContent: context.height, + contentHtml: success.previewEMLContent, + ); } else { return const Center( child: CupertinoLoadingWidget(), 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 0308ab80e..9b8489535 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -8,6 +8,7 @@ import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; import 'package:tmail_ui_user/features/caching/clients/recent_search_cache_client.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; @@ -17,6 +18,7 @@ import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasour import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -259,6 +261,9 @@ class MailboxDashBoardBindings extends BaseBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); Get.lazyPut(() => RemoteServerSettingsDataSourceImpl( Get.find(), Get.find() @@ -347,6 +352,7 @@ class MailboxDashBoardBindings extends BaseBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart index c605a695a..829fb2137 100644 --- a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart +++ b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart @@ -5,6 +5,7 @@ import 'package:core/utils/print_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; @@ -12,6 +13,7 @@ import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasour import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -94,6 +96,9 @@ class SendEmailInteractorBindings extends InteractorsBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); Get.lazyPut(() => RemoteServerSettingsDataSourceImpl( Get.find(), Get.find())); @@ -118,6 +123,7 @@ class SendEmailInteractorBindings extends InteractorsBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart index ee3b3813b..95e75d75f 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -5,12 +5,14 @@ import 'package:core/utils/print_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'; +import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart'; import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart'; +import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; @@ -132,6 +134,9 @@ class FcmInteractorBindings extends InteractorsBindings { Get.lazyPut(() => EmailLocalStorageDataSourceImpl( Get.find(), Get.find())); + Get.lazyPut(() => EmailSessionStorageDatasourceImpl( + Get.find(), + Get.find())); } @override @@ -187,6 +192,7 @@ class FcmInteractorBindings extends InteractorsBindings { DataSourceType.network: Get.find(), DataSourceType.hiveCache: Get.find(), DataSourceType.local: Get.find(), + DataSourceType.session: Get.find(), }, Get.find(), Get.find(), diff --git a/lib/main/bindings/core/core_bindings.dart b/lib/main/bindings/core/core_bindings.dart index 7a0194267..c932c96ba 100644 --- a/lib/main/bindings/core/core_bindings.dart +++ b/lib/main/bindings/core/core_bindings.dart @@ -15,6 +15,7 @@ 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/caching/utils/session_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'; @@ -92,5 +93,6 @@ class CoreBindings extends Bindings { ) )); Get.put(LocalStorageManager()); + Get.put(SessionStorageManager()); } } \ No newline at end of file