Upgrade hive database version to 14
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -11,7 +11,7 @@ class UpgradeHiveDatabaseStepsV11 extends UpgradeDatabaseSteps {
|
||||
@override
|
||||
Future<void> onUpgrade(int oldVersion, int newVersion) async {
|
||||
if (oldVersion > 0 && oldVersion < newVersion && newVersion == 11) {
|
||||
await _cachingManager.clearEmailCacheAndAllStateCache();
|
||||
await _cachingManager.clearAllEmailAndStateCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ class UpgradeHiveDatabaseStepsV12 extends UpgradeDatabaseSteps {
|
||||
@override
|
||||
Future<void> onUpgrade(int oldVersion, int newVersion) async {
|
||||
if (oldVersion > 0 && oldVersion < newVersion && newVersion == 12) {
|
||||
await _cachingManager.clearEmailCacheAndAllStateCache();
|
||||
await _cachingManager.clearAllEmailAndStateCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_database_steps.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
|
||||
class UpgradeHiveDatabaseStepsV14 extends UpgradeDatabaseSteps {
|
||||
|
||||
final CachingManager _cachingManager;
|
||||
|
||||
UpgradeHiveDatabaseStepsV14(this._cachingManager);
|
||||
|
||||
@override
|
||||
Future<void> onUpgrade(int oldVersion, int newVersion) async {
|
||||
if (oldVersion > 0 && oldVersion < newVersion && newVersion == 14) {
|
||||
await _cachingManager.clearAllEmailAndStateCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:fcm/model/type_name.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:model/extensions/account_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/account_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/email_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/fcm_cache_client.dart';
|
||||
@@ -17,11 +19,13 @@ import 'package:tmail_ui_user/features/caching/clients/recent_search_cache_clien
|
||||
import 'package:tmail_ui_user/features/caching/clients/session_hive_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.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/mailbox/data/model/state_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/data/keychain/keychain_sharing_manager.dart';
|
||||
import 'package:tmail_ui_user/features/push_notification/presentation/extensions/type_name_extension.dart';
|
||||
|
||||
class CachingManager {
|
||||
final MailboxCacheClient _mailboxCacheClient;
|
||||
@@ -102,24 +106,58 @@ class CachingManager {
|
||||
], eagerError: true);
|
||||
}
|
||||
|
||||
Future<void> clearEmailCacheAndStateCacheByTupleKey(AccountId accountId, Session session) {
|
||||
return Future.wait([
|
||||
_stateCacheClient.deleteItem(StateType.email.getTupleKeyStored(accountId, session.username)),
|
||||
_emailCacheClient.clearAllData(),
|
||||
if (PlatformInfo.isMobile) clearAllFileInStorage(),
|
||||
], eagerError: true);
|
||||
Future<void> clearEmailAndStateCache({AccountId? accountId, UserName? userName}) {
|
||||
log('CachingManager::clearEmailAndStateCache:userName = $userName');
|
||||
if (accountId != null && userName != null) {
|
||||
final emailKey = TupleKey(accountId.asString, userName.value).encodeKey;
|
||||
final stateKey = StateType.email.getTupleKeyStored(accountId, userName);
|
||||
|
||||
return Future.wait([
|
||||
_emailCacheClient.clearAllDataContainKey(emailKey),
|
||||
_stateCacheClient.deleteItem(stateKey),
|
||||
if (PlatformInfo.isMobile)
|
||||
clearFCMEmailStateCache(accountId: accountId, userName: userName),
|
||||
]);
|
||||
} else {
|
||||
final stateKey = StateType.email.getTupleKeyStoredWithoutAccount();
|
||||
return Future.wait([
|
||||
_emailCacheClient.clearAllData(),
|
||||
_stateCacheClient.deleteItem(stateKey),
|
||||
if (PlatformInfo.isMobile) clearFCMEmailStateCache(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> clearEmailCacheAndAllStateCache() {
|
||||
Future<void> clearDetailedEmailCache({AccountId? accountId, UserName? userName}) {
|
||||
log('CachingManager::clearDetailedEmailCache:userName = $userName');
|
||||
if (accountId != null && userName != null) {
|
||||
final emailKey = TupleKey(accountId.asString, userName.value).encodeKey;
|
||||
return Future.wait([
|
||||
_newEmailHiveCacheClient.clearAllDataContainKey(emailKey),
|
||||
_openedEmailHiveCacheClient.clearAllDataContainKey(emailKey),
|
||||
clearAllFileInStorage(),
|
||||
]);
|
||||
} else {
|
||||
return Future.wait([
|
||||
_newEmailHiveCacheClient.clearAllData(),
|
||||
_openedEmailHiveCacheClient.clearAllData(),
|
||||
clearAllFileInStorage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> clearAllEmailAndStateCache({AccountId? accountId, UserName? userName}) {
|
||||
log('CachingManager::clearAllEmailAndStateCache:userName = $userName');
|
||||
return Future.wait([
|
||||
_stateCacheClient.clearAllData(),
|
||||
_emailCacheClient.clearAllData(),
|
||||
if (PlatformInfo.isMobile) clearAllFileInStorage(),
|
||||
], eagerError: true);
|
||||
clearEmailAndStateCache(accountId: accountId, userName: userName),
|
||||
if (PlatformInfo.isMobile)
|
||||
clearDetailedEmailCache(accountId: accountId, userName: userName),
|
||||
]);
|
||||
}
|
||||
|
||||
Future<void> clearMailboxCache() {
|
||||
return Future.wait([
|
||||
_stateCacheClient.deleteItem(StateType.mailbox.getTupleKeyStoredWithoutAccount()),
|
||||
_mailboxCacheClient.clearAllData(),
|
||||
], eagerError: true);
|
||||
}
|
||||
@@ -138,10 +176,22 @@ class CachingManager {
|
||||
}
|
||||
|
||||
Future<void> clearAllFileInStorage() async {
|
||||
await Future.wait([
|
||||
_fileUtils.removeFolder(CachingConstants.newEmailsContentFolderName),
|
||||
_fileUtils.removeFolder(CachingConstants.openedEmailContentFolderName),
|
||||
]);
|
||||
await _fileUtils.removeFolder(CachingConstants.openedEmailContentFolderName);
|
||||
await _fileUtils.removeFolder(CachingConstants.newEmailsContentFolderName);
|
||||
}
|
||||
|
||||
Future<void> clearFCMEmailStateCache({AccountId? accountId, UserName? userName}) async {
|
||||
if (accountId != null && userName != null) {
|
||||
await _fcmCacheClient.deleteItem(
|
||||
TypeName.emailDelivery.getTupleKeyStored(accountId, userName));
|
||||
await _fcmCacheClient.deleteItem(
|
||||
TypeName.emailType.getTupleKeyStored(accountId, userName));
|
||||
} else {
|
||||
await _fcmCacheClient.deleteItem(
|
||||
TypeName.emailDelivery.getTupleKeyStoredWithoutAccount());
|
||||
await _fcmCacheClient.deleteItem(
|
||||
TypeName.emailType.getTupleKeyStoredWithoutAccount());
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> clearLoginRecentData() async {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
class CacheVersion {
|
||||
static const int hiveDBVersion = 12;
|
||||
static const int hiveDBVersion = 14;
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_st
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_steps_v11.dart';
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_steps_v12.dart';
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_steps_v13.dart';
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_steps_v14.dart';
|
||||
import 'package:tmail_ui_user/features/base/upgradeable/upgrade_hive_database_steps_v7.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/caching/config/cache_version.dart';
|
||||
@@ -72,6 +73,7 @@ class HiveCacheConfig {
|
||||
await UpgradeHiveDatabaseStepsV11(cachingManager).onUpgrade(oldVersion, newVersion);
|
||||
await UpgradeHiveDatabaseStepsV12(cachingManager).onUpgrade(oldVersion, newVersion);
|
||||
await UpgradeHiveDatabaseStepsV13(cachingManager).onUpgrade(oldVersion, newVersion);
|
||||
await UpgradeHiveDatabaseStepsV14(cachingManager).onUpgrade(oldVersion, newVersion);
|
||||
|
||||
if (oldVersion != newVersion) {
|
||||
await cachingManager.storeCacheVersion(newVersion);
|
||||
|
||||
@@ -20,4 +20,8 @@ enum StateType {
|
||||
String getTupleKeyStored(AccountId accountId, UserName userName) {
|
||||
return TupleKey(name, accountId.asString, userName.value).encodeKey;
|
||||
}
|
||||
|
||||
String getTupleKeyStoredWithoutAccount() {
|
||||
return TupleKey(name).encodeKey;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
import 'package:fcm/model/type_name.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||
import 'package:model/extensions/account_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
|
||||
|
||||
extension TypeNameExtension on TypeName {
|
||||
String getTupleKeyStored(AccountId accountId, UserName userName) {
|
||||
return TupleKey(value, accountId.asString, userName.value).encodeKey;
|
||||
}
|
||||
|
||||
String getTupleKeyStoredWithoutAccount() {
|
||||
return TupleKey(value).encodeKey;
|
||||
}
|
||||
}
|
||||
@@ -457,11 +457,10 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
void _handleErrorGetAllOrRefreshChangesEmail(Object error, StackTrace stackTrace) async {
|
||||
logError('ThreadController::_handleErrorGetAllOrRefreshChangesEmail():Error: $error');
|
||||
if (error is CannotCalculateChangesMethodResponseException) {
|
||||
if (_accountId != null && _session != null) {
|
||||
await cachingManager.clearEmailCacheAndStateCacheByTupleKey(_accountId!, _session!);
|
||||
} else {
|
||||
await cachingManager.clearEmailCacheAndAllStateCache();
|
||||
}
|
||||
await cachingManager.clearAllEmailAndStateCache(
|
||||
accountId: _accountId,
|
||||
userName: _session?.username,
|
||||
);
|
||||
_getAllEmailAction();
|
||||
} else if (error is MethodLevelErrors) {
|
||||
if (currentOverlayContext != null && error.message != null) {
|
||||
|
||||
Reference in New Issue
Block a user