From 04575e084bd2cfaf648ae920a22ad2e1ef827770 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 17 Feb 2023 14:20:26 +0700 Subject: [PATCH] Trigger `OnUpgradeDatabase` when upgrade version --- lib/features/caching/caching_manager.dart | 23 +++++++++++++++---- .../caching/config/hive_cache_config.dart | 12 ++++++++++ .../home/presentation/home_controller.dart | 18 ++------------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/lib/features/caching/caching_manager.dart b/lib/features/caching/caching_manager.dart index 3cae1d02e..a5c8c8d0d 100644 --- a/lib/features/caching/caching_manager.dart +++ b/lib/features/caching/caching_manager.dart @@ -1,5 +1,5 @@ +import 'package:core/utils/app_logger.dart'; import 'package:tmail_ui_user/features/caching/account_cache_client.dart'; -import 'package:tmail_ui_user/features/caching/config/cache_version.dart'; import 'package:tmail_ui_user/features/caching/email_cache_client.dart'; import 'package:tmail_ui_user/features/caching/hive_cache_version_client.dart'; import 'package:tmail_ui_user/features/caching/mailbox_cache_client.dart'; @@ -49,6 +49,7 @@ class CachingManager { _stateCacheClient.deleteItem(StateType.email.value), _emailCacheClient.clearAllData(), ]); + log('CachingManager::clearEmailCache(): success'); } Future clearMailboxCache() async { @@ -56,13 +57,27 @@ class CachingManager { _stateCacheClient.deleteItem(StateType.mailbox.value), _mailboxCacheClient.clearAllData(), ]); + log('CachingManager::clearMailboxCache(): success'); } - Future storeCacheVersion() async { - return _hiveCacheVersionClient.storeVersion(CacheVersion.hiveDBVersion); + Future onUpgradeCache(int oldVersion, int newVersion) async { + log('CachingManager::onUpgradeCache():oldVersion $oldVersion | newVersion: $newVersion'); + if (oldVersion == 0 && newVersion >= 1) { + await Future.wait([ + clearMailboxCache(), + clearEmailCache() + ]); + } + storeCacheVersion(newVersion); + return Future.value(); } - Future getLatestHiveCacheVersion() { + Future storeCacheVersion(int newVersion) async { + log('CachingManager::storeCacheVersion()'); + return _hiveCacheVersionClient.storeVersion(newVersion); + } + + Future getLatestVersion() { return _hiveCacheVersionClient.getLatestVersion(); } diff --git a/lib/features/caching/config/hive_cache_config.dart b/lib/features/caching/config/hive_cache_config.dart index fdcd51123..e9e2e9670 100644 --- a/lib/features/caching/config/hive_cache_config.dart +++ b/lib/features/caching/config/hive_cache_config.dart @@ -6,6 +6,8 @@ import 'package:core/utils/app_logger.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:path_provider/path_provider.dart' as path_provider; +import 'package:tmail_ui_user/features/caching/caching_manager.dart'; +import 'package:tmail_ui_user/features/caching/config/cache_version.dart'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; import 'package:tmail_ui_user/features/login/data/local/encryption_key_cache_manager.dart'; import 'package:tmail_ui_user/features/login/data/model/account_cache.dart'; @@ -41,6 +43,16 @@ class HiveCacheConfig { } } + Future onUpgradeDatabase(CachingManager cachingManager) async { + final oldVersion = await cachingManager.getLatestVersion() ?? 0; + const newVersion = CacheVersion.hiveDBVersion; + log('HiveCacheConfig::onUpgradeDatabase():oldVersion: $oldVersion | newVersion: $newVersion'); + if (oldVersion != newVersion) { + await cachingManager.onUpgradeCache(oldVersion, newVersion); + } + return Future.value(); + } + static Future initializeEncryptionKey() async { final encryptionKeyCacheManager = Get.find(); final encryptionKeyCache = await encryptionKeyCacheManager.getEncryptionKeyStored(); diff --git a/lib/features/home/presentation/home_controller.dart b/lib/features/home/presentation/home_controller.dart index 44204dc1b..131d2b49b 100644 --- a/lib/features/home/presentation/home_controller.dart +++ b/lib/features/home/presentation/home_controller.dart @@ -8,7 +8,7 @@ import 'package:model/model.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/caching/caching_manager.dart'; -import 'package:tmail_ui_user/features/caching/config/cache_version.dart'; +import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart'; import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/model/recent_login_url_cleanup_rule.dart'; @@ -78,7 +78,6 @@ class HomeController extends BaseController { @override void onReady() { - log('HomeController::onReady()'); _cleanupCache(); super.onReady(); } @@ -92,7 +91,7 @@ class HomeController extends BaseController { static void downloadCallback(String id, DownloadTaskStatus status, int progress) {} void _cleanupCache() async { - await _checkCacheVersion(); + await HiveCacheConfig().onUpgradeDatabase(_cachingManager); await Future.wait([ _cleanupEmailCacheInteractor.execute(EmailCleanupRule(Duration.defaultCacheInternal)), @@ -102,19 +101,6 @@ class HomeController extends BaseController { ]).then((value) => _getAuthenticatedAccount()); } - Future _checkCacheVersion() async { - final latestHiveCacheVersion = await _cachingManager.getLatestHiveCacheVersion(); - log('HomeController::_checkCacheVersion():latestHiveCacheVersion: $latestHiveCacheVersion'); - if (latestHiveCacheVersion == null || latestHiveCacheVersion < CacheVersion.hiveDBVersion) { - await Future.wait([ - _cachingManager.clearMailboxCache(), - _cachingManager.clearEmailCache() - ]); - await _cachingManager.storeCacheVersion(); - } - return Future.value(null); - } - void _getAuthenticatedAccount() async { log('HomeController::_getAuthenticatedAccount()'); consumeState(_getAuthenticatedAccountInteractor.execute());