From 6d96a1109e1769a2f54a33d73340b54e3b1c1c03 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 20 Jun 2023 22:20:23 +0700 Subject: [PATCH] TF-1923 Fix new email offline mode not working (cherry picked from commit c1c48e93d50cb0ebbccaf11c3f4a975af640b63a) --- lib/features/caching/caching_manager.dart | 12 +- ....dart => new_email_hive_cache_client.dart} | 4 +- .../caching/utils/caching_constants.dart | 4 +- .../presentation/composer_bindings.dart | 4 +- .../presentation/composer_controller.dart | 9 +- .../data/datasource/email_datasource.dart | 6 +- .../email_datasource_impl.dart | 6 +- .../email_hive_cache_datasource_impl.dart | 97 ++++++------- .../repository/email_repository_impl.dart | 21 ++- .../exceptions/email_cache_exceptions.dart | 4 + .../domain/exceptions/email_exceptions.dart | 4 +- .../extensions/detailed_email_extension.dart | 7 +- .../detailed_email_hive_cache_extension.dart | 6 +- .../domain/extensions/email_extension.dart | 3 +- ...ist_email_header_hive_cache_extension.dart | 2 +- .../email/domain/model/detailed_email.dart | 6 +- .../domain/repository/email_repository.dart | 8 +- .../domain/state/get_email_content_state.dart | 32 +++-- .../store_detailed_email_to_cache_state.dart | 13 -- .../domain/state/store_new_email_state.dart | 13 ++ ...ate.dart => store_opened_email_state.dart} | 0 .../get_email_content_interactor.dart | 135 ++++++++++++------ ...or.dart => store_new_email_interator.dart} | 16 +-- ...art => store_opened_email_interactor.dart} | 6 +- .../controller/single_email_controller.dart | 28 ++-- .../email/presentation/email_bindings.dart | 10 +- .../bindings/mailbox_dashboard_bindings.dart | 4 +- .../sending_email_interactor_bindings.dart | 4 +- ...ager.dart => new_email_cache_manager.dart} | 29 ++-- .../manager/opened_email_cache_manager.dart | 50 +++---- .../model/detailed_email_hive_cache.dart | 9 +- .../bindings/fcm_interactor_bindings.dart | 8 +- .../listener/email_change_listener.dart | 20 +-- .../sending_queue_interactor_bindings.dart | 4 +- lib/main/bindings/local/local_bindings.dart | 10 +- 35 files changed, 333 insertions(+), 261 deletions(-) rename lib/features/caching/clients/{detailed_email_hive_cache_client.dart => new_email_hive_cache_client.dart} (62%) create mode 100644 lib/features/email/domain/exceptions/email_cache_exceptions.dart delete mode 100644 lib/features/email/domain/state/store_detailed_email_to_cache_state.dart create mode 100644 lib/features/email/domain/state/store_new_email_state.dart rename lib/features/email/domain/state/{store_opened_email_to_cache_state.dart => store_opened_email_state.dart} (100%) rename lib/features/email/domain/usecases/{store_detailed_email_to_cache_interator.dart => store_new_email_interator.dart} (61%) rename lib/features/email/domain/usecases/{store_opened_email_to_cache_interactor.dart => store_opened_email_interactor.dart} (87%) rename lib/features/offline_mode/manager/{detailed_email_cache_manager.dart => new_email_cache_manager.dart} (71%) diff --git a/lib/features/caching/caching_manager.dart b/lib/features/caching/caching_manager.dart index 045a3f3ed..414684f03 100644 --- a/lib/features/caching/caching_manager.dart +++ b/lib/features/caching/caching_manager.dart @@ -4,7 +4,7 @@ import 'package:core/utils/platform_info.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/caching/clients/account_cache_client.dart'; -import 'package:tmail_ui_user/features/caching/clients/detailed_email_hive_cache_client.dart'; +import 'package:tmail_ui_user/features/caching/clients/new_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/opened_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/session_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart'; @@ -29,7 +29,7 @@ class CachingManager { final FcmCacheClient _fcmCacheClient; final FCMSubscriptionCacheClient _fcmSubscriptionCacheClient; final HiveCacheVersionClient _hiveCacheVersionClient; - final DetailedEmailHiveCacheClient _detailedEmailHiveCacheClient; + final NewEmailHiveCacheClient _newEmailHiveCacheClient; final OpenedEmailHiveCacheClient _openedEmailHiveCacheClient; final FileUtils _fileUtils; final SendingEmailCacheManager _sendingEmailCacheManager; @@ -44,7 +44,7 @@ class CachingManager { this._fcmCacheClient, this._fcmSubscriptionCacheClient, this._hiveCacheVersionClient, - this._detailedEmailHiveCacheClient, + this._newEmailHiveCacheClient, this._openedEmailHiveCacheClient, this._fileUtils, this._sendingEmailCacheManager, @@ -63,7 +63,7 @@ class CachingManager { if (PlatformInfo.isMobile) ...[ _sessionHiveCacheClient.clearAllData(), - _detailedEmailHiveCacheClient.clearAllData(), + _newEmailHiveCacheClient.clearAllData(), _openedEmailHiveCacheClient.clearAllData(), _clearSendingEmailCache(), ] @@ -80,7 +80,7 @@ class CachingManager { _recentSearchCacheClient.clearAllData(), if (PlatformInfo.isMobile) ...[ - _detailedEmailHiveCacheClient.clearAllData(), + _newEmailHiveCacheClient.clearAllData(), _openedEmailHiveCacheClient.clearAllData(), _clearSendingEmailCache(), ] @@ -123,7 +123,7 @@ class CachingManager { void clearAllFileInStorage() { if (PlatformInfo.isMobile) { - _fileUtils.removeFolder(CachingConstants.incomingEmailedContentFolderName); + _fileUtils.removeFolder(CachingConstants.newEmailsContentFolderName); _fileUtils.removeFolder(CachingConstants.openedEmailContentFolderName); } } diff --git a/lib/features/caching/clients/detailed_email_hive_cache_client.dart b/lib/features/caching/clients/new_email_hive_cache_client.dart similarity index 62% rename from lib/features/caching/clients/detailed_email_hive_cache_client.dart rename to lib/features/caching/clients/new_email_hive_cache_client.dart index 1ca0b0362..95f183334 100644 --- a/lib/features/caching/clients/detailed_email_hive_cache_client.dart +++ b/lib/features/caching/clients/new_email_hive_cache_client.dart @@ -3,8 +3,8 @@ import 'package:tmail_ui_user/features/caching/config/hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; -class DetailedEmailHiveCacheClient extends HiveCacheClient { +class NewEmailHiveCacheClient extends HiveCacheClient { @override - String get tableName => CachingConstants.incomingEmailedCacheBoxName; + String get tableName => CachingConstants.newEmailCacheBoxName; } \ No newline at end of file diff --git a/lib/features/caching/utils/caching_constants.dart b/lib/features/caching/utils/caching_constants.dart index 1c4f977e7..69c46a582 100644 --- a/lib/features/caching/utils/caching_constants.dart +++ b/lib/features/caching/utils/caching_constants.dart @@ -21,12 +21,12 @@ class CachingConstants { static const int typeIdSessionHiveObj = 19; static const String fcmCacheBoxName = 'fcm_cache_box'; - static const String incomingEmailedCacheBoxName = 'incoming_emailed_cache_box'; + static const String newEmailCacheBoxName = 'new_email_cache_box'; static const String openedEmailCacheBoxName = 'opened_email_cache_box'; static const String sendingEmailCacheBoxName = 'sending_email_cache_box'; static const String sessionCacheBoxName = 'session_cache_box'; - static const String incomingEmailedContentFolderName = 'incoming_emailed'; + static const String newEmailsContentFolderName = 'new_emails'; static const String openedEmailContentFolderName = 'opened_email'; static const int maxNumberNewEmailsForOffline = 10; diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index ae429965b..659b01f1f 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -44,8 +44,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -98,7 +98,7 @@ class ComposerBindings extends BaseBindings { Get.find())); Get.lazyPut(() => StateDataSourceImpl(Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 2bbdd8760..57af033bf 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -1133,7 +1133,14 @@ class ComposerController extends BaseController { if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty && arguments.sendingEmail != null) { _emailContents = arguments.emailContents; - emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], arguments.presentationEmail?.toEmail())); + emailContentsViewState.value = Right( + GetEmailContentSuccess( + emailContents: _emailContents!, + emailContentsDisplayed: [], + attachments: [], + emailCurrent: arguments.presentationEmail?.toEmail() + ) + ); } else { final session = mailboxDashBoardController.sessionCurrent; final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index 09bcebd44..ab11f90b5 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -76,7 +76,7 @@ abstract class EmailDataSource { Future deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId); - Future storeDetailedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); Future getDetailedEmailById(Session session, AccountId accountId, EmailId emailId); @@ -86,9 +86,9 @@ abstract class EmailDataSource { Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); - Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId); + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId); - Future getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId); + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId); Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); 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 77dde0ff2..7db4432d0 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -153,7 +153,7 @@ class EmailDataSourceImpl extends EmailDataSource { } @override - Future storeDetailedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { throw UnimplementedError(); } @@ -175,12 +175,12 @@ class EmailDataSourceImpl extends EmailDataSource { } @override - Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId) { + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId) { throw UnimplementedError(); } @override - Future getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId) { + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId) { throw UnimplementedError(); } 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 9f8cc12d1..5433abff1 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 @@ -31,10 +31,11 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/extensions/list_sending_email_extension.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; @@ -46,7 +47,7 @@ import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; class EmailHiveCacheDataSourceImpl extends EmailDataSource { - final DetailedEmailCacheManager _detailedEmailCacheManager; + final NewEmailCacheManager _newEmailCacheManager; final OpenedEmailCacheManager _openedEmailCacheManager; final DetailedEmailCacheWorkerQueue _cacheWorkerQueue; final OpenedEmailCacheWorkerQueue _openedEmailCacheWorkerQueue; @@ -56,7 +57,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { final ExceptionThrower _exceptionThrower; EmailHiveCacheDataSourceImpl( - this._detailedEmailCacheManager, + this._newEmailCacheManager, this._openedEmailCacheManager, this._cacheWorkerQueue, this._openedEmailCacheWorkerQueue, @@ -127,7 +128,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { } @override - Future storeDetailedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { return Future.sync(() async { final task = HiveTask( runnable: () async { @@ -136,17 +137,17 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { content: detailedEmail.htmlEmailContent ?? '', folderPath: detailedEmail.newEmailFolderPath ); - log('EmailHiveCacheDataSourceImpl::storeDetailedEmailToCache():fileSavedPath: ${fileSaved.path}'); + final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path); - final detailedEmailCache = await _detailedEmailCacheManager.handleStoreDetailedEmail( + final detailedEmailCache = await _newEmailCacheManager.storeDetailedNewEmail( accountId, session.username, detailedEmailSaved.toHiveCache()); return detailedEmailCache; }); - return await _cacheWorkerQueue.addTask(task); + return _cacheWorkerQueue.addTask(task); }).catchError(_exceptionThrower.throwException); } @@ -171,71 +172,59 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { return Future.sync(() async { final task = HiveTask( - runnable: () async { + runnable: () async { + final detailedEmailExisted = await _openedEmailCacheManager.isOpenedEmailAlreadyStored(accountId, session.username, detailedEmail.emailId); - final detailedEmailExisted = await _openedEmailCacheManager.isOpenedDetailEmailCached(accountId, session.username, detailedEmail.emailId); - log('EmailHiveCacheDataSourceImpl::storeOpenedEmail():detailedEmailExisted: $detailedEmailExisted'); + if (detailedEmailExisted) { + return Future.value(); + } - if (detailedEmailExisted) { - return Future.value(); - } + final fileSaved = await _fileUtils.saveToFile( + nameFile: detailedEmail.emailId.asString, + content: detailedEmail.htmlEmailContent ?? '', + folderPath: detailedEmail.openedEmailFolderPath + ); - final fileSaved = await _fileUtils.saveToFile( - nameFile: detailedEmail.emailId.asString, - content: detailedEmail.htmlEmailContent ?? '', - folderPath: detailedEmail.openedEmailFolderPath - ); + final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path); - log('EmailHiveCacheDataSourceImpl::storeOpenedEmail():fileSavedPath: ${fileSaved.path}'); + final detailedEmailCache = await _openedEmailCacheManager.storeOpenedEmail( + accountId, + session.username, + detailedEmailSaved.toHiveCache()); - final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path); - - await _openedEmailCacheManager.storeOpenedEmail( - accountId, - session.username, - detailedEmailSaved); - }); + return detailedEmailCache; + }); return _openedEmailCacheWorkerQueue.addTask(task); }).catchError(_exceptionThrower.throwException); } @override - Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId) { + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId) { return Future.sync(() async { - final openedEmailHiveCache = await _openedEmailCacheManager.getOpenedEmailExistedInCache(accountId, session.username, emailId); + final listResult = await Future.wait([ + _openedEmailCacheManager.getStoredOpenedEmail(accountId, session.username, emailId), + _fileUtils.getContentFromFile(nameFile: emailId.asString, folderPath: CachingConstants.openedEmailContentFolderName) + ], eagerError: true); - if (openedEmailHiveCache == null) { - return null; - } - - log('EmailHiveCacheDataSourceImpl::getOpenedEmail():folderPath: ${openedEmailHiveCache.emailContentPath}'); - - final emailContent = await _fileUtils.getContentFromFile( - nameFile: emailId.asString, - folderPath: CachingConstants.openedEmailContentFolderName - ); - - return openedEmailHiveCache.toDetailedEmailWithContent(emailContent); + final detailedEmailCache = listResult[0] as DetailedEmailHiveCache; + final emailContent = listResult[1] as String; + log('EmailHiveCacheDataSourceImpl::getStoredOpenedEmail():detailedEmailCache: ${detailedEmailCache.emailId} | emailContent: $emailContent'); + return detailedEmailCache.toDetailedEmailWithContent(emailContent); }).catchError(_exceptionThrower.throwException); } @override - Future getIncomingEmailedStored(Session session, AccountId accountId, EmailId emailId) { + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId) { return Future.sync(() async { - final detailedEmailHiveCache = await _detailedEmailCacheManager.getDetailEmailExistedInCache(accountId, session.username, emailId); + final listResult = await Future.wait([ + _newEmailCacheManager.getStoredNewEmail(accountId, session.username, emailId), + _fileUtils.getContentFromFile(nameFile: emailId.asString, folderPath: CachingConstants.newEmailsContentFolderName) + ], eagerError: true); - if (detailedEmailHiveCache == null) { - return null; - } - - log('EmailHiveCacheDataSourceImpl::getDetailedEmail():folderPath: ${detailedEmailHiveCache.emailContentPath}'); - - final emailContent = await _fileUtils.getContentFromFile( - nameFile: emailId.asString, - folderPath: CachingConstants.incomingEmailedContentFolderName - ); - - return detailedEmailHiveCache.toDetailedEmailWithContent(emailContent); + final detailedEmailCache = listResult[0] as DetailedEmailHiveCache; + final emailContent = listResult[1] as String; + log('EmailHiveCacheDataSourceImpl::getStoredNewEmail():detailedEmailCache: ${detailedEmailCache.emailId} | emailContent: $emailContent'); + return detailedEmailCache.toDetailedEmailWithContent(emailContent); }).catchError(_exceptionThrower.throwException); } diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index abe03ffe5..f6d576e9c 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -185,8 +185,8 @@ class EmailRepositoryImpl extends EmailRepository { } @override - Future storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) { - return emailDataSource[DataSourceType.hiveCache]!.storeDetailedEmail(session, accountId, detailedEmail); + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { + return emailDataSource[DataSourceType.hiveCache]!.storeDetailedNewEmail(session, accountId, detailedEmail); } @override @@ -195,7 +195,7 @@ class EmailRepositoryImpl extends EmailRepository { } @override - Future storeEmailToCache(Session session, AccountId accountId, Email email) { + Future storeEmail(Session session, AccountId accountId, Email email) { return emailDataSource[DataSourceType.hiveCache]!.storeEmail(session, accountId, email); } @@ -205,18 +205,17 @@ class EmailRepositoryImpl extends EmailRepository { } @override - Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId) async { - final getIncomingEmailedStored = await emailDataSource[DataSourceType.hiveCache]!.getIncomingEmailedStored(session, accountId, emailId); - final openedEmail = await emailDataSource[DataSourceType.hiveCache]!.getOpenedEmail(session, accountId, emailId); - if (getIncomingEmailedStored != null) { - return getIncomingEmailedStored; - } else { - return openedEmail; - } + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId) async { + return emailDataSource[DataSourceType.hiveCache]!.getStoredOpenedEmail(session, accountId, emailId); } @override Future getEmailStored(Session session, AccountId accountId, EmailId emailId) { return emailDataSource[DataSourceType.hiveCache]!.getEmailStored(session, accountId, emailId); } + + @override + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId) { + return emailDataSource[DataSourceType.hiveCache]!.getStoredNewEmail(session, accountId, emailId); + } } \ No newline at end of file diff --git a/lib/features/email/domain/exceptions/email_cache_exceptions.dart b/lib/features/email/domain/exceptions/email_cache_exceptions.dart new file mode 100644 index 000000000..c0d85bf17 --- /dev/null +++ b/lib/features/email/domain/exceptions/email_cache_exceptions.dart @@ -0,0 +1,4 @@ + +class NotFoundStoredOpenedEmailException implements Exception {} + +class NotFoundStoredNewEmailException implements Exception {} \ No newline at end of file diff --git a/lib/features/email/domain/exceptions/email_exceptions.dart b/lib/features/email/domain/exceptions/email_exceptions.dart index c37c9dc4a..054268e88 100644 --- a/lib/features/email/domain/exceptions/email_exceptions.dart +++ b/lib/features/email/domain/exceptions/email_exceptions.dart @@ -1,4 +1,6 @@ class CannotDeleteOldEmailException implements Exception {} -class NotFoundEmailException implements Exception {} \ No newline at end of file +class NotFoundEmailException implements Exception {} + +class NotFoundEmailContentException implements Exception {} \ No newline at end of file diff --git a/lib/features/email/domain/extensions/detailed_email_extension.dart b/lib/features/email/domain/extensions/detailed_email_extension.dart index 944cf8e7e..89a9def83 100644 --- a/lib/features/email/domain/extensions/detailed_email_extension.dart +++ b/lib/features/email/domain/extensions/detailed_email_extension.dart @@ -5,6 +5,7 @@ import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_ import 'package:tmail_ui_user/features/email/domain/extensions/list_email_header_extension.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; +import 'package:tmail_ui_user/features/thread/data/extensions/map_keywords_extension.dart'; extension DetailedEmailExtension on DetailedEmail { DetailedEmailHiveCache toHiveCache() { @@ -12,12 +13,13 @@ extension DetailedEmailExtension on DetailedEmail { emailId: emailId.asString, timeSaved: DateTime.now(), attachments: attachments?.toHiveCache(), - headers: headers?.toHiveCache(), + headers: headers?.toList().toHiveCache(), + keywords: keywords?.toMapString(), emailContentPath: emailContentPath ); } - String get newEmailFolderPath => CachingConstants.incomingEmailedContentFolderName; + String get newEmailFolderPath => CachingConstants.newEmailsContentFolderName; String get openedEmailFolderPath => CachingConstants.openedEmailContentFolderName; @@ -26,6 +28,7 @@ extension DetailedEmailExtension on DetailedEmail { emailId: emailId, attachments: attachments, headers: headers, + keywords: keywords, htmlEmailContent: htmlEmailContent, emailContentPath: path, ); diff --git a/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart b/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart index a391d7d5f..4234ec6cc 100644 --- a/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart +++ b/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart @@ -1,5 +1,6 @@ import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:tmail_ui_user/features/email/domain/extensions/list_acttachments_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/email/domain/extensions/list_email_header_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; @@ -10,7 +11,10 @@ extension DetailedEmailHiveCacheExtension on DetailedEmailHiveCache { return DetailedEmail( emailId: EmailId(Id(emailId)), attachments: attachments?.toAttachment(), - headers: headers?.toListEmailHeader(), + headers: headers?.toSetEmailHeader(), + keywords: keywords != null + ? Map.fromIterables(keywords!.keys.map((value) => KeyWordIdentifier(value)), keywords!.values) + : null, htmlEmailContent: emailContent, ); } diff --git a/lib/features/email/domain/extensions/email_extension.dart b/lib/features/email/domain/extensions/email_extension.dart index e0da85bee..a0f35f0f3 100644 --- a/lib/features/email/domain/extensions/email_extension.dart +++ b/lib/features/email/domain/extensions/email_extension.dart @@ -8,7 +8,8 @@ extension EmailExtension on Email { return DetailedEmail( emailId: id!, attachments: allAttachments, - headers: headers?.toList(), + headers: headers, + keywords: keywords, htmlEmailContent: htmlEmailContent ); } diff --git a/lib/features/email/domain/extensions/list_email_header_hive_cache_extension.dart b/lib/features/email/domain/extensions/list_email_header_hive_cache_extension.dart index 2e2794c4f..853d4d360 100644 --- a/lib/features/email/domain/extensions/list_email_header_hive_cache_extension.dart +++ b/lib/features/email/domain/extensions/list_email_header_hive_cache_extension.dart @@ -3,5 +3,5 @@ import 'package:tmail_ui_user/features/email/domain/extensions/email_header_hive import 'package:tmail_ui_user/features/offline_mode/model/email_header_hive_cache.dart'; extension ListEmailHeaderExtension on List { - List toListEmailHeader() => map((emailHeaderHiveCache) => emailHeaderHiveCache.toEmailHeader()).toList(); + Set toSetEmailHeader() => map((emailHeaderHiveCache) => emailHeaderHiveCache.toEmailHeader()).toSet(); } \ No newline at end of file diff --git a/lib/features/email/domain/model/detailed_email.dart b/lib/features/email/domain/model/detailed_email.dart index a9b822def..7b29504b0 100644 --- a/lib/features/email/domain/model/detailed_email.dart +++ b/lib/features/email/domain/model/detailed_email.dart @@ -1,12 +1,14 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_header.dart'; +import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:model/email/attachment.dart'; class DetailedEmail with EquatableMixin { final EmailId emailId; final List? attachments; - final List? headers; + final Set? headers; + final Map? keywords; final String? htmlEmailContent; final String? emailContentPath; @@ -14,6 +16,7 @@ class DetailedEmail with EquatableMixin { required this.emailId, this.attachments, this.headers, + this.keywords, this.htmlEmailContent, this.emailContentPath }); @@ -23,6 +26,7 @@ class DetailedEmail with EquatableMixin { emailId, attachments, headers, + keywords, htmlEmailContent, emailContentPath ]; diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index 940ef817b..1c74287a2 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -88,15 +88,17 @@ abstract class EmailRepository { Future getEmailState(Session session, AccountId accountId); - Future storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail); + Future storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); Future getDetailedEmailById(Session session, AccountId accountId, EmailId emailId); - Future storeEmailToCache(Session session, AccountId accountId, Email email); + Future storeEmail(Session session, AccountId accountId, Email email); Future getEmailStored(Session session, AccountId accountId, EmailId emailId); Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); - Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId); + Future getStoredOpenedEmail(Session session, AccountId accountId, EmailId emailId); + + Future getStoredNewEmail(Session session, AccountId accountId, EmailId emailId); } \ No newline at end of file diff --git a/lib/features/email/domain/state/get_email_content_state.dart b/lib/features/email/domain/state/get_email_content_state.dart index 0e19ba6bf..b9a55519b 100644 --- a/lib/features/email/domain/state/get_email_content_state.dart +++ b/lib/features/email/domain/state/get_email_content_state.dart @@ -1,6 +1,8 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; -import 'package:model/model.dart'; +import 'package:model/email/attachment.dart'; +import 'package:model/email/email_content.dart'; class GetEmailContentLoading extends LoadingState {} @@ -10,12 +12,12 @@ class GetEmailContentSuccess extends UIState { final List attachments; final Email? emailCurrent; - GetEmailContentSuccess( - this.emailContents, - this.emailContentsDisplayed, - this.attachments, - this.emailCurrent - ); + GetEmailContentSuccess({ + required this.emailContents, + required this.emailContentsDisplayed, + required this.attachments, + required this.emailCurrent + }); @override List get props => [ @@ -29,23 +31,25 @@ class GetEmailContentSuccess extends UIState { class GetEmailContentFromCacheSuccess extends UIState { final String emailContentString; final List attachments; + final Email? emailCurrent; - GetEmailContentFromCacheSuccess( - this.emailContentString, - this.attachments, - ); + GetEmailContentFromCacheSuccess({ + required this.emailContentString, + required this.attachments, + this.emailCurrent + }); @override List get props => [ emailContentString, attachments, + emailCurrent, ]; } class GetEmailContentFailure extends FeatureFailure { - final dynamic exception; - GetEmailContentFailure(this.exception); + GetEmailContentFailure(dynamic exception) : super(exception: exception); @override List get props => [exception]; diff --git a/lib/features/email/domain/state/store_detailed_email_to_cache_state.dart b/lib/features/email/domain/state/store_detailed_email_to_cache_state.dart deleted file mode 100644 index 008abb722..000000000 --- a/lib/features/email/domain/state/store_detailed_email_to_cache_state.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:core/core.dart'; - -class StoreDetailedEmailToCacheLoading extends UIState {} - -class StoreDetailedEmailToCacheSuccess extends UIState {} - -class StoreDetailedEmailToCacheFailure extends FeatureFailure { - - StoreDetailedEmailToCacheFailure(dynamic exception) : super(exception: exception); - - @override - List get props => [exception]; -} \ No newline at end of file diff --git a/lib/features/email/domain/state/store_new_email_state.dart b/lib/features/email/domain/state/store_new_email_state.dart new file mode 100644 index 000000000..d50df1b4a --- /dev/null +++ b/lib/features/email/domain/state/store_new_email_state.dart @@ -0,0 +1,13 @@ +import 'package:core/core.dart'; + +class StoreNewEmailLoading extends UIState {} + +class StoreNewEmailSuccess extends UIState {} + +class StoreNewEmailFailure extends FeatureFailure { + + StoreNewEmailFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/state/store_opened_email_to_cache_state.dart b/lib/features/email/domain/state/store_opened_email_state.dart similarity index 100% rename from lib/features/email/domain/state/store_opened_email_to_cache_state.dart rename to lib/features/email/domain/state/store_opened_email_state.dart diff --git a/lib/features/email/domain/usecases/get_email_content_interactor.dart b/lib/features/email/domain/usecases/get_email_content_interactor.dart index 9553eafdd..95c6747a8 100644 --- a/lib/features/email/domain/usecases/get_email_content_interactor.dart +++ b/lib/features/email/domain/usecases/get_email_content_interactor.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; @@ -31,13 +30,13 @@ class GetEmailContentInteractor { yield Right(GetEmailContentLoading()); if (PlatformInfo.isMobile) { - yield* _tryToGetOpenedEmailCache(session, accountId, emailId, baseDownloadUrl, composeEmail: composeEmail, draftsEmail: draftsEmail); + yield* _getStoredOpenedEmail(session, accountId, emailId, baseDownloadUrl, composeEmail: composeEmail, draftsEmail: draftsEmail); } else { yield* _getContentEmailFromServer(session, accountId, emailId, baseDownloadUrl, composeEmail: composeEmail, draftsEmail: draftsEmail); } } catch (e) { log('GetEmailContentInteractor::execute(): exception = $e'); - yield Left(GetEmailContentFailure(e)); + yield Left(GetEmailContentFailure(e)); } } @@ -51,63 +50,105 @@ class GetEmailContentInteractor { bool draftsEmail = false } ) async* { - final email = await emailRepository.getEmailContent(session, accountId, emailId); + try { + final email = await emailRepository.getEmailContent(session, accountId, emailId); - if (email.emailContentList.isNotEmpty) { - final newEmailContents = await emailRepository.transformEmailContent( - email.emailContentList, - email.allAttachments.listAttachmentsDisplayedInContent, - baseDownloadUrl, - accountId, - draftsEmail: draftsEmail - ); + if (email.emailContentList.isNotEmpty) { + final newEmailContents = await emailRepository.transformEmailContent( + email.emailContentList, + email.allAttachments.listAttachmentsDisplayedInContent, + baseDownloadUrl, + accountId, + draftsEmail: draftsEmail + ); - final newEmailContentsDisplayed = PlatformInfo.isWeb && !composeEmail - ? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents) - : newEmailContents; + final newEmailContentsDisplayed = PlatformInfo.isWeb && !composeEmail + ? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents) + : newEmailContents; - yield Right(GetEmailContentSuccess( - newEmailContents.asHtmlString, - newEmailContentsDisplayed, - email.allAttachments, - email - )); - } else if (email.allAttachments.isNotEmpty) { - yield Right(GetEmailContentSuccess("", [], email.allAttachments, email)); - } else if (email.headers?.isNotEmpty == true) { - yield Right(GetEmailContentSuccess("", [], [], email)); - } else { - yield Left(GetEmailContentFailure(null)); + yield Right(GetEmailContentSuccess( + emailContents: newEmailContents.asHtmlString, + emailContentsDisplayed: newEmailContentsDisplayed, + attachments: email.allAttachments, + emailCurrent: email + )); + } else { + yield Right(GetEmailContentSuccess( + emailContents: '', + emailContentsDisplayed: [], + attachments: email.allAttachments, + emailCurrent: email + )); + } + } catch (e) { + logError('GetEmailContentInteractor::_getContentEmailFromServer():EXCEPTION: $e'); + yield Left(GetEmailContentFailure(e)); } } - Stream> _tryToGetOpenedEmailCache( + Stream> _getStoredOpenedEmail( Session session, AccountId accountId, EmailId emailId, String? baseDownloadUrl, - { - bool composeEmail = false, - bool draftsEmail = false - } + { + bool composeEmail = false, + bool draftsEmail = false + } ) async* { try { - final detailedEmail = await emailRepository.getOpenedEmail(session, accountId, emailId); - if (detailedEmail != null) { - log('GetEmailContentInteractor::_tryToGetOpenedEmailCache(): $detailedEmail'); - yield Right(GetEmailContentFromCacheSuccess( - detailedEmail.htmlEmailContent ?? "", - detailedEmail.attachments ?? [], - )); - } else { - yield* _getContentEmailFromServer(session, accountId, emailId, baseDownloadUrl, composeEmail: composeEmail, draftsEmail: draftsEmail); - } + final detailedEmail = await emailRepository.getStoredOpenedEmail(session, accountId, emailId); + yield Right(GetEmailContentFromCacheSuccess( + emailContentString: detailedEmail.htmlEmailContent ?? "", + attachments: detailedEmail.attachments ?? [], + emailCurrent: Email( + id: emailId, + headers: detailedEmail.headers, + keywords: detailedEmail.keywords + ) + )); } catch (e) { - if (e is PathNotFoundException) { - yield* _getContentEmailFromServer(session, accountId, emailId, baseDownloadUrl, composeEmail: composeEmail, draftsEmail: draftsEmail); - } else { - yield Left(GetEmailContentFailure(e)); - } + logError('GetEmailContentInteractor::_getStoredOpenedEmail():EXCEPTION: $e'); + yield* _getStoredNewEmail( + session, + accountId, + emailId, + baseDownloadUrl, + composeEmail: composeEmail, + draftsEmail: draftsEmail); + } + } + + Stream> _getStoredNewEmail( + Session session, + AccountId accountId, + EmailId emailId, + String? baseDownloadUrl, + { + bool composeEmail = false, + bool draftsEmail = false + } + ) async* { + try { + final detailedEmail = await emailRepository.getStoredNewEmail(session, accountId, emailId); + yield Right(GetEmailContentFromCacheSuccess( + emailContentString: detailedEmail.htmlEmailContent ?? "", + attachments: detailedEmail.attachments ?? [], + emailCurrent: Email( + id: emailId, + headers: detailedEmail.headers, + keywords: detailedEmail.keywords + ) + )); + } catch (e) { + logError('GetEmailContentInteractor::_getStoredNewEmail():EXCEPTION: $e'); + yield* _getContentEmailFromServer( + session, + accountId, + emailId, + baseDownloadUrl, + composeEmail: composeEmail, + draftsEmail: draftsEmail); } } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart b/lib/features/email/domain/usecases/store_new_email_interator.dart similarity index 61% rename from lib/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart rename to lib/features/email/domain/usecases/store_new_email_interator.dart index 27bdd6e93..fe354fedf 100644 --- a/lib/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart +++ b/lib/features/email/domain/usecases/store_new_email_interator.dart @@ -6,12 +6,12 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; -import 'package:tmail_ui_user/features/email/domain/state/store_detailed_email_to_cache_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/store_new_email_state.dart'; -class StoreDetailedEmailToCacheInteractor { +class StoreNewEmailInteractor { final EmailRepository _emailRepository; - StoreDetailedEmailToCacheInteractor(this._emailRepository); + StoreNewEmailInteractor(this._emailRepository); Stream> execute( Session session, @@ -20,14 +20,14 @@ class StoreDetailedEmailToCacheInteractor { DetailedEmail detailedEmail ) async* { try { - yield Right(StoreDetailedEmailToCacheLoading()); + yield Right(StoreNewEmailLoading()); await Future.wait([ - _emailRepository.storeEmailToCache(session, accountId, email), - _emailRepository.storeDetailedEmailToCache(session, accountId, detailedEmail), + _emailRepository.storeEmail(session, accountId, email), + _emailRepository.storeDetailedNewEmail(session, accountId, detailedEmail), ]); - yield Right(StoreDetailedEmailToCacheSuccess()); + yield Right(StoreNewEmailSuccess()); } catch (e) { - yield Left(StoreDetailedEmailToCacheFailure(e)); + yield Left(StoreNewEmailFailure(e)); } } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart b/lib/features/email/domain/usecases/store_opened_email_interactor.dart similarity index 87% rename from lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart rename to lib/features/email/domain/usecases/store_opened_email_interactor.dart index 3a0b29e8a..9bd71da47 100644 --- a/lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart +++ b/lib/features/email/domain/usecases/store_opened_email_interactor.dart @@ -5,12 +5,12 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; -import 'package:tmail_ui_user/features/email/domain/state/store_opened_email_to_cache_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/store_opened_email_state.dart'; -class StoreOpenedEmailToCacheInteractor { +class StoreOpenedEmailInteractor { final EmailRepository _emailRepository; - StoreOpenedEmailToCacheInteractor(this._emailRepository); + StoreOpenedEmailInteractor(this._emailRepository); Stream> execute( Session session, diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index b2867104f..3c0c7abd1 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -27,7 +27,7 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; @@ -93,7 +93,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { final MarkAsStarEmailInteractor _markAsStarEmailInteractor; final DownloadAttachmentForWebInteractor _downloadAttachmentForWebInteractor; final GetAllIdentitiesInteractor _getAllIdentitiesInteractor; - final StoreOpenedEmailToCacheInteractor _storeOpenedEmailToCacheInteractor; + final StoreOpenedEmailInteractor _storeOpenedEmailInteractor; CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor; SendReceiptToSenderInteractor? _sendReceiptToSenderInteractor; @@ -128,7 +128,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { this._markAsStarEmailInteractor, this._downloadAttachmentForWebInteractor, this._getAllIdentitiesInteractor, - this._storeOpenedEmailToCacheInteractor + this._storeOpenedEmailInteractor ); @override @@ -348,11 +348,14 @@ class SingleEmailController extends BaseController with AppLoaderMixin { if (emailLoaded != null) { dispatchState(Right(GetEmailContentLoading())); await Future.delayed(const Duration(milliseconds: 300)); - consumeState(Stream.value(Right(GetEmailContentSuccess( - emailLoaded.emailContents, - emailLoaded.emailContentsDisplayed, - emailLoaded.attachments, - emailLoaded.emailCurrent)))); + consumeState(Stream.value(Right( + GetEmailContentSuccess( + emailContents: emailLoaded.emailContents, + emailContentsDisplayed: emailLoaded.emailContentsDisplayed, + attachments: emailLoaded.attachments, + emailCurrent: emailLoaded.emailCurrent + ) + ))); } else if (session != null && accountId != null && baseDownloadUrl != null) { consumeState(_getEmailContentInteractor.execute(session, accountId, emailId, baseDownloadUrl)); } @@ -386,11 +389,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin { final detailedEmail = DetailedEmail( emailId: currentEmail!.id!, attachments: attachments, - headers: currentEmail?.emailHeader, + headers: currentEmail?.emailHeader?.toSet(), + keywords: currentEmail?.keywords, htmlEmailContent: emailContents.value ); - _storeOpenedEmailToCache( + _storeOpenedEmailAction( mailboxDashBoardController.sessionCurrent, mailboxDashBoardController.accountId.value, detailedEmail @@ -1222,9 +1226,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin { return false; } - void _storeOpenedEmailToCache(Session? session, AccountId? accountId, DetailedEmail detailedEmail) async { + void _storeOpenedEmailAction(Session? session, AccountId? accountId, DetailedEmail detailedEmail) async { if (session != null && accountId != null) { - consumeState(_storeOpenedEmailToCacheInteractor.execute(session, accountId, detailedEmail)); + consumeState(_storeOpenedEmailInteractor.execute(session, accountId, detailedEmail)); } } } \ No newline at end of file diff --git a/lib/features/email/presentation/email_bindings.dart b/lib/features/email/presentation/email_bindings.dart index b07f86bcb..dd9486235 100644 --- a/lib/features/email/presentation/email_bindings.dart +++ b/lib/features/email/presentation/email_bindings.dart @@ -20,7 +20,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_st import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart'; import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart'; @@ -43,8 +43,8 @@ import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repositor import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -67,7 +67,7 @@ class EmailBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), - Get.find() + Get.find() )); } @@ -101,7 +101,7 @@ class EmailBindings extends BaseBindings { Get.find())); Get.lazyPut(() => StateDataSourceImpl(Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -140,7 +140,7 @@ class EmailBindings extends BaseBindings { Get.find(), Get.find())); Get.lazyPut(() => GetStoredEmailStateInteractor(Get.find())); - Get.lazyPut(() => StoreOpenedEmailToCacheInteractor(Get.find())); + Get.lazyPut(() => StoreOpenedEmailInteractor(Get.find())); IdentityInteractorsBindings().dependencies(); } 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 58dab8638..cedff2665 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -94,8 +94,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -248,7 +248,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), 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 700de6d2e..22cb54d38 100644 --- a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart +++ b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart @@ -24,8 +24,8 @@ import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -63,7 +63,7 @@ class SendEmailInteractorBindings extends InteractorsBindings { Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), diff --git a/lib/features/offline_mode/manager/detailed_email_cache_manager.dart b/lib/features/offline_mode/manager/new_email_cache_manager.dart similarity index 71% rename from lib/features/offline_mode/manager/detailed_email_cache_manager.dart rename to lib/features/offline_mode/manager/new_email_cache_manager.dart index 72affb2b5..5046bdf24 100644 --- a/lib/features/offline_mode/manager/detailed_email_cache_manager.dart +++ b/lib/features/offline_mode/manager/new_email_cache_manager.dart @@ -1,24 +1,24 @@ -import 'package:core/utils/app_logger.dart'; import 'package:core/utils/file_utils.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/model.dart'; -import 'package:tmail_ui_user/features/caching/clients/detailed_email_hive_cache_client.dart'; +import 'package:tmail_ui_user/features/caching/clients/new_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; +import 'package:tmail_ui_user/features/email/domain/exceptions/email_cache_exceptions.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; -class DetailedEmailCacheManager { +class NewEmailCacheManager { - final DetailedEmailHiveCacheClient _cacheClient; + final NewEmailHiveCacheClient _cacheClient; final FileUtils _fileUtils; - DetailedEmailCacheManager(this._cacheClient, this._fileUtils); + NewEmailCacheManager(this._cacheClient, this._fileUtils); - Future handleStoreDetailedEmail( + Future storeDetailedNewEmail( AccountId accountId, UserName userName, DetailedEmailHiveCache detailedEmailCache @@ -26,9 +26,10 @@ class DetailedEmailCacheManager { final listDetailedEmails = await getAllDetailedEmails(accountId, userName); if (listDetailedEmails.length >= CachingConstants.maxNumberNewEmailsForOffline) { - final lastElementsListEmail = listDetailedEmails.sublist(CachingConstants.maxNumberNewEmailsForOffline, listDetailedEmails.length); + final lastElementsListEmail = listDetailedEmails.sublist( + CachingConstants.maxNumberNewEmailsForOffline - 1, + listDetailedEmails.length); for (var email in lastElementsListEmail) { - log('DetailedEmailCacheManager::handleStoreDetailedEmail():latestEmail: $email'); if (email.emailContentPath != null) { await _deleteFileExisted(email.emailContentPath!); } @@ -46,7 +47,6 @@ class DetailedEmailCacheManager { DetailedEmailHiveCache detailedEmailCache ) { final keyCache = TupleKey(detailedEmailCache.emailId, accountId.asString, userName.value).encodeKey; - log('DetailedEmailCacheManager::insertDetailedEmail(): $keyCache'); return _cacheClient.insertItem(keyCache, detailedEmailCache); } @@ -56,14 +56,12 @@ class DetailedEmailCacheManager { String emailId ) { final keyCache = TupleKey(emailId, accountId.asString, userName.value).encodeKey; - log('DetailedEmailCacheManager::removeDetailedEmail(): $keyCache'); return _cacheClient.deleteItem(keyCache); } Future> getAllDetailedEmails(AccountId accountId, UserName userName) async { final detailedEmailCacheList = await _cacheClient.getListByTupleKey(accountId.asString, userName.value); detailedEmailCacheList.sortByLatestTime(); - log('DetailedEmailCacheManager::getAllDetailedEmails():SIZE: ${detailedEmailCacheList.length}'); return detailedEmailCacheList; } @@ -71,14 +69,17 @@ class DetailedEmailCacheManager { await _fileUtils.deleteFile(pathFile); } - Future getDetailEmailExistedInCache( + Future getStoredNewEmail( AccountId accountId, UserName userName, EmailId emailId ) async { final keyCache = TupleKey(emailId.asString, accountId.asString, userName.value).encodeKey; final detailedEmailCache = await _cacheClient.getItem(keyCache, needToReopen: true); - log('DetailedEmailCacheManager::getDetailEmailExistedInCache():Email: $detailedEmailCache'); - return detailedEmailCache; + if (detailedEmailCache != null) { + return detailedEmailCache; + } else { + throw NotFoundStoredNewEmailException(); + } } } \ No newline at end of file diff --git a/lib/features/offline_mode/manager/opened_email_cache_manager.dart b/lib/features/offline_mode/manager/opened_email_cache_manager.dart index 2170cf6a6..3b0cca63d 100644 --- a/lib/features/offline_mode/manager/opened_email_cache_manager.dart +++ b/lib/features/offline_mode/manager/opened_email_cache_manager.dart @@ -8,8 +8,7 @@ import 'package:model/extensions/email_id_extensions.dart'; import 'package:tmail_ui_user/features/caching/clients/opened_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; -import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_extension.dart'; -import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; +import 'package:tmail_ui_user/features/email/domain/exceptions/email_cache_exceptions.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; @@ -47,55 +46,58 @@ class OpenedEmailCacheManager { return detailedEmailCacheList; } - Future storeOpenedEmail( + Future storeOpenedEmail( AccountId accountId, UserName userName, - DetailedEmail detailedEmail + DetailedEmailHiveCache detailedEmailCache ) async { final listDetailedEmails = await getAllDetailedEmails(accountId, userName); if (listDetailedEmails.length >= CachingConstants.maxNumberOpenedEmailsForOffline) { - final lastElementsListEmail = listDetailedEmails.sublist(CachingConstants.maxNumberOpenedEmailsForOffline, listDetailedEmails.length); + final lastElementsListEmail = listDetailedEmails.sublist( + CachingConstants.maxNumberOpenedEmailsForOffline - 1, + listDetailedEmails.length); for (var email in lastElementsListEmail) { - log('OpenedEmailCacheManager::handleStoreDetailedEmail():latestEmail: $email'); if (email.emailContentPath != null) { await _deleteFileExisted(email.emailContentPath!); } await removeDetailedEmail(accountId, userName, email.emailId); } } - await insertDetailedEmail(accountId, userName, detailedEmail.toHiveCache()); + await insertDetailedEmail(accountId, userName, detailedEmailCache); + + return detailedEmailCache; } - Future isOpenedDetailEmailCached( + Future isOpenedEmailAlreadyStored( AccountId accountId, UserName userName, EmailId emailId ) async { - final emailContentPathExists = await _isFileExisted(emailId); - final detailedEmailCacheExists = await getOpenedEmailExistedInCache(accountId, userName, emailId); + final listResult = await Future.wait([ + getStoredOpenedEmail(accountId, userName, emailId), + _fileUtils.isFileExisted( + nameFile: emailId.asString, + folderPath: CachingConstants.openedEmailContentFolderName) + ], eagerError: true); - return emailContentPathExists == true && detailedEmailCacheExists != null; + final emailContentPathExists = listResult.last as bool; + + return emailContentPathExists; } - Future _isFileExisted(EmailId emailId) async { - final fileSaved = await _fileUtils.isFileExisted( - nameFile: emailId.asString, - folderPath: CachingConstants.openedEmailContentFolderName, - ); - log('OpenedEmailCacheManager::_getDetailedEmailCache():_getEmailContentPath: $fileSaved'); - return fileSaved; - } - - Future getOpenedEmailExistedInCache( + Future getStoredOpenedEmail( AccountId accountId, UserName userName, EmailId emailId ) async { final keyCache = TupleKey(emailId.asString, accountId.asString, userName.value).encodeKey; - final detailedEmailCache = await _cacheClient.getItem(keyCache,needToReopen: true); - log('OpenedEmailCacheManager::getOpenedEmailExistedInCache(): $detailedEmailCache'); - return detailedEmailCache; + final detailedEmailCache = await _cacheClient.getItem(keyCache, needToReopen: true); + if (detailedEmailCache != null) { + return detailedEmailCache; + } else { + throw NotFoundStoredOpenedEmailException(); + } } Future _deleteFileExisted(String pathFile) async { diff --git a/lib/features/offline_mode/model/detailed_email_hive_cache.dart b/lib/features/offline_mode/model/detailed_email_hive_cache.dart index 47aa405ac..19995a874 100644 --- a/lib/features/offline_mode/model/detailed_email_hive_cache.dart +++ b/lib/features/offline_mode/model/detailed_email_hive_cache.dart @@ -26,12 +26,16 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin { @HiveField(4) final List? headers; + @HiveField(5) + final Map? keywords; + DetailedEmailHiveCache({ required this.emailId, required this.timeSaved, this.attachments, this.emailContentPath, - this.headers + this.headers, + this.keywords, }); @override @@ -40,6 +44,7 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin { timeSaved, attachments, emailContentPath, - headers + headers, + keywords, ]; } \ No newline at end of file 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 a24f91d3c..59e11f4fb 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -14,7 +14,7 @@ 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_detailed_email_by_id_interator.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/store_new_email_interator.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart'; @@ -23,8 +23,8 @@ import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_dataso import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -104,7 +104,7 @@ class FcmInteractorBindings extends InteractorsBindings { Get.find(), Get.find())); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -137,7 +137,7 @@ class FcmInteractorBindings extends InteractorsBindings { Get.find(), Get.find())); Get.lazyPut(() => GetDetailedEmailByIdInteractor(Get.find())); - Get.lazyPut(() => StoreDetailedEmailToCacheInteractor(Get.find())); + Get.lazyPut(() => StoreNewEmailInteractor(Get.find())); } @override diff --git a/lib/features/push_notification/presentation/listener/email_change_listener.dart b/lib/features/push_notification/presentation/listener/email_change_listener.dart index c484bd777..ad468aede 100644 --- a/lib/features/push_notification/presentation/listener/email_change_listener.dart +++ b/lib/features/push_notification/presentation/listener/email_change_listener.dart @@ -24,7 +24,7 @@ import 'package:tmail_ui_user/features/email/domain/state/get_detailed_email_by_ import 'package:tmail_ui_user/features/email/domain/state/get_stored_state_email_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/get_detailed_email_by_id_interator.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/get_stored_email_state_interactor.dart'; -import 'package:tmail_ui_user/features/email/domain/usecases/store_detailed_email_to_cache_interator.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/store_new_email_interator.dart'; import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart'; @@ -62,7 +62,7 @@ class EmailChangeListener extends ChangeListener { GetNewReceiveEmailFromNotificationInteractor? _getNewReceiveEmailFromNotificationInteractor; GetDetailedEmailByIdInteractor? _getDetailedEmailByIdInteractor; DynamicUrlInterceptors? _dynamicUrlInterceptors; - StoreDetailedEmailToCacheInteractor? _storeDetailedEmailToCacheInteractor; + StoreNewEmailInteractor? _storeNewEmailInteractor; jmap.State? _newStateEmailDelivery; AccountId? _accountId; @@ -83,7 +83,7 @@ class EmailChangeListener extends ChangeListener { _getNewReceiveEmailFromNotificationInteractor = getBinding(); _getDetailedEmailByIdInteractor = getBinding(); _dynamicUrlInterceptors = getBinding(); - _storeDetailedEmailToCacheInteractor = getBinding(); + _storeNewEmailInteractor = getBinding(); } catch (e) { logError('EmailChangeListener::_internal(): IS NOT REGISTERED: ${e.toString()}'); } @@ -247,9 +247,9 @@ class EmailChangeListener extends ChangeListener { } else if (success is GetEmailChangesToRemoveNotificationSuccess) { _handleRemoveLocalNotification(success.emailIds); } else if (success is GetNewReceiveEmailFromNotificationSuccess) { - _handleGetNewReceiveEmailFromNotificationSuccess(success.session, success.accountId, success.emailIds); + _getListDetailedEmailByIdAction(success.session, success.accountId, success.emailIds); } else if (success is GetDetailedEmailByIdSuccess) { - _handleGetDetailedEmailByIdActionSuccess( + _storeNewEmailAction( success.session, success.accountId, success.email, @@ -320,8 +320,8 @@ class EmailChangeListener extends ChangeListener { } } - void _handleGetNewReceiveEmailFromNotificationSuccess(Session? session, AccountId accountId, Set emailIds) { - log('EmailChangeListener::_handleGetNewReceiveEmailFromNotificationSuccess():emailIds: $emailIds'); + void _getListDetailedEmailByIdAction(Session? session, AccountId accountId, Set emailIds) { + log('EmailChangeListener::_getListDetailedEmailByIdAction():emailIds: $emailIds'); for (var emailId in emailIds) { _getDetailedEmailByIdAction(session, accountId, emailId); } @@ -341,15 +341,15 @@ class EmailChangeListener extends ChangeListener { } } - void _handleGetDetailedEmailByIdActionSuccess( + void _storeNewEmailAction( Session session, AccountId accountId, Email email, DetailedEmail detailedEmail ) { log('EmailChangeListener::_handleGetDetailedEmailByIdActionSuccess():emailId: ${email.id}'); - if (_storeDetailedEmailToCacheInteractor != null) { - consumeState(_storeDetailedEmailToCacheInteractor!.execute( + if (_storeNewEmailInteractor != null) { + consumeState(_storeNewEmailInteractor!.execute( session, accountId, email, diff --git a/lib/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart b/lib/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart index 67df1e1c3..68cad9185 100644 --- a/lib/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart +++ b/lib/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart @@ -3,12 +3,12 @@ import 'package:core/utils/file_utils.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/sending_queue/data/repository/sending_queue_repository_impl.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; @@ -27,7 +27,7 @@ class SendingQueueInteractorBindings extends InteractorsBindings { @override void bindingsDataSourceImpl() { Get.lazyPut(() => EmailHiveCacheDataSourceImpl( - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), diff --git a/lib/main/bindings/local/local_bindings.dart b/lib/main/bindings/local/local_bindings.dart index 99f274001..722bcfc79 100644 --- a/lib/main/bindings/local/local_bindings.dart +++ b/lib/main/bindings/local/local_bindings.dart @@ -5,12 +5,12 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/caching/clients/account_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/authentication_info_cache_client.dart'; import 'package:tmail_ui_user/features/caching/caching_manager.dart'; -import 'package:tmail_ui_user/features/caching/clients/detailed_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/email_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/encryption_key_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/fcm_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/hive_cache_version_client.dart'; import 'package:tmail_ui_user/features/caching/clients/mailbox_cache_client.dart'; +import 'package:tmail_ui_user/features/caching/clients/new_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/opened_email_hive_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/recent_login_url_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/recent_login_username_cache_client.dart'; @@ -31,8 +31,8 @@ import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; -import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; @@ -75,8 +75,8 @@ class LocalBindings extends Bindings { Get.put(FcmCacheClient()); Get.put(FCMCacheManager(Get.find(),Get.find())); Get.put(HiveCacheVersionClient(Get.find(), Get.find())); - Get.put(DetailedEmailHiveCacheClient()); - Get.put(DetailedEmailCacheManager(Get.find(), Get.find())); + Get.put(NewEmailHiveCacheClient()); + Get.put(NewEmailCacheManager(Get.find(), Get.find())); Get.put(OpenedEmailHiveCacheClient()); Get.put(OpenedEmailCacheManager(Get.find(), Get.find())); Get.put(SendingEmailHiveCacheClient()); @@ -91,7 +91,7 @@ class LocalBindings extends Bindings { Get.find(), Get.find(), Get.find(), - Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(),