diff --git a/lib/features/caching/caching_manager.dart b/lib/features/caching/caching_manager.dart index d7b0859b3..2704cfb57 100644 --- a/lib/features/caching/caching_manager.dart +++ b/lib/features/caching/caching_manager.dart @@ -14,6 +14,8 @@ import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart'; import 'package:tmail_ui_user/features/caching/clients/subscription_cache_client.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart'; +import 'package:tmail_ui_user/features/offline_mode/controller/work_scheduler_controller.dart'; +import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; class CachingManager { final MailboxCacheClient _mailboxCacheClient; @@ -27,6 +29,7 @@ class CachingManager { final DetailedEmailHiveCacheClient _detailedEmailHiveCacheClient; final OpenedEmailHiveCacheClient _openedEmailHiveCacheClient; final FileUtils _fileUtils; + final SendingEmailCacheManager _sendingEmailCacheManager; CachingManager( this._mailboxCacheClient, @@ -40,6 +43,7 @@ class CachingManager { this._detailedEmailHiveCacheClient, this._openedEmailHiveCacheClient, this._fileUtils, + this._sendingEmailCacheManager, ); Future clearAll() async { @@ -51,8 +55,12 @@ class CachingManager { _fcmSubscriptionCacheClient.clearAllData(), _recentSearchCacheClient.clearAllData(), _accountCacheClient.clearAllData(), - _detailedEmailHiveCacheClient.clearAllData(), - _openedEmailHiveCacheClient.clearAllData(), + if (PlatformInfo.isMobile) + ...[ + _detailedEmailHiveCacheClient.clearAllData(), + _openedEmailHiveCacheClient.clearAllData(), + _clearSendingEmailCache(), + ] ], eagerError: true); } @@ -64,8 +72,12 @@ class CachingManager { _fcmCacheClient.clearAllData(), _fcmSubscriptionCacheClient.clearAllData(), _recentSearchCacheClient.clearAllData(), - _detailedEmailHiveCacheClient.clearAllData(), - _openedEmailHiveCacheClient.clearAllData(), + if (PlatformInfo.isMobile) + ...[ + _detailedEmailHiveCacheClient.clearAllData(), + _openedEmailHiveCacheClient.clearAllData(), + _clearSendingEmailCache(), + ] ], eagerError: true); } @@ -103,4 +115,16 @@ class CachingManager { _fileUtils.removeFolder(CachingConstants.openedEmailContentFolderName); } } + + Future _clearSendingEmailCache() async { + final listSendingEmails = await _sendingEmailCacheManager.getAllSendingEmails(); + final sendingIds = listSendingEmails.map((sendingEmail) => sendingEmail.sendingId).toSet().toList(); + if (sendingIds.isNotEmpty) { + await Future.wait( + sendingIds.map((sendingId) => WorkSchedulerController().cancelByUniqueId(sendingId)), + eagerError: true + ); + await _sendingEmailCacheManager.clearAllSendingEmails(); + } + } } 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 76fd69258..bac89761f 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 @@ -256,7 +256,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { @override Future> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) { return Future.sync(() async { - final sendingEmailsCache = await _sendingEmailCacheManager.getAllSendingEmails(accountId, userName, needToReopen: needToReopen); + final sendingEmailsCache = await _sendingEmailCacheManager.getAllSendingEmailsByTupleKey(accountId, userName, needToReopen: needToReopen); return sendingEmailsCache.toSendingEmails(); }).catchError(_exceptionThrower.throwException); } diff --git a/lib/features/offline_mode/manager/sending_email_cache_manager.dart b/lib/features/offline_mode/manager/sending_email_cache_manager.dart index 5e488b035..1951df44b 100644 --- a/lib/features/offline_mode/manager/sending_email_cache_manager.dart +++ b/lib/features/offline_mode/manager/sending_email_cache_manager.dart @@ -24,7 +24,7 @@ class SendingEmailCacheManager { return _hiveCacheClient.insertItem(keyCache, sendingEmailHiveCache); } - Future> getAllSendingEmails( + Future> getAllSendingEmailsByTupleKey( AccountId accountId, UserName userName, {bool needToReopen = false} @@ -33,7 +33,7 @@ class SendingEmailCacheManager { accountId.asString, userName.value, needToReopen: needToReopen); - log('SendingEmailCacheManager::getAllSendingEmails():COUNT: ${sendingEmailsCache.length}'); + log('SendingEmailCacheManager::getAllSendingEmailsByTupleKey():COUNT: ${sendingEmailsCache.length}'); sendingEmailsCache.sortByLatestTime(); return sendingEmailsCache; } @@ -47,4 +47,13 @@ class SendingEmailCacheManager { log('SendingEmailCacheManager::deleteSendingEmail():keyCache: $keyCache'); return _hiveCacheClient.deleteItem(keyCache); } + + Future> getAllSendingEmails() async { + final sendingEmailsCache = await _hiveCacheClient.getAll(needToReopen: true); + log('SendingEmailCacheManager::getAllSendingEmails():COUNT: ${sendingEmailsCache.length}'); + sendingEmailsCache.sortByLatestTime(); + return sendingEmailsCache; + } + + Future clearAllSendingEmails() => _hiveCacheClient.clearAllData(); } \ No newline at end of file diff --git a/lib/main/bindings/local/local_bindings.dart b/lib/main/bindings/local/local_bindings.dart index b36fdd129..7592a76cd 100644 --- a/lib/main/bindings/local/local_bindings.dart +++ b/lib/main/bindings/local/local_bindings.dart @@ -92,6 +92,7 @@ class LocalBindings extends Bindings { Get.find(), Get.find(), Get.find(), + Get.find(), )); Get.put(SharePreferenceSpamReportDataSource(Get.find())); }