From 64ad8ea0496a3590f7de38fe6a3bc330bdf82f42 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 19 Jun 2023 12:07:33 +0700 Subject: [PATCH] TF-1913 Fix thread view keeps reloading (cherry picked from commit fc7ecd17f685b82bac98d808af450000e0f02c47) --- lib/features/caching/caching_manager.dart | 13 +++++++++++-- .../datasource_impl/state_datasource_impl.dart | 4 ++-- lib/features/mailbox/data/model/state_type.dart | 17 +++++++---------- .../thread/presentation/thread_controller.dart | 6 +++++- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/features/caching/caching_manager.dart b/lib/features/caching/caching_manager.dart index 64dbc9f77..045a3f3ed 100644 --- a/lib/features/caching/caching_manager.dart +++ b/lib/features/caching/caching_manager.dart @@ -1,6 +1,8 @@ import 'package:core/utils/app_logger.dart'; import 'package:core/utils/file_utils.dart'; 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/opened_email_hive_cache_client.dart'; @@ -85,9 +87,16 @@ class CachingManager { ], eagerError: true); } - Future clearEmailCache() { + Future clearEmailCacheAndStateCacheByTupleKey(AccountId accountId, Session session) { return Future.wait([ - _stateCacheClient.deleteItem(StateType.email.value), + _stateCacheClient.deleteItem(StateType.email.getTupleKeyStored(accountId, session.username)), + _emailCacheClient.clearAllData(), + ], eagerError: true); + } + + Future clearEmailCacheAndAllStateCache() { + return Future.wait([ + _stateCacheClient.clearAllData(), _emailCacheClient.clearAllData(), ], eagerError: true); } diff --git a/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart index f5fa549bf..abc7dc2a9 100644 --- a/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart @@ -21,7 +21,7 @@ class StateDataSourceImpl extends StateDataSource { @override Future getState(AccountId accountId, UserName userName, StateType stateType) { return Future.sync(() async { - final stateKey = TupleKey(stateType.value, accountId.asString, userName.value).encodeKey; + final stateKey = TupleKey(stateType.name, accountId.asString, userName.value).encodeKey; final stateCache = await _stateCacheClient.getItem(stateKey); return stateCache?.toState(); }).catchError(_exceptionThrower.throwException); @@ -31,7 +31,7 @@ class StateDataSourceImpl extends StateDataSource { Future saveState(AccountId accountId, UserName userName, StateCache stateCache) { return Future.sync(() async { final stateCacheExist = await _stateCacheClient.isExistTable(); - final stateKey = TupleKey(stateCache.type.value, accountId.asString, userName.value).encodeKey; + final stateKey = TupleKey(stateCache.type.name, accountId.asString, userName.value).encodeKey; if (stateCacheExist) { return await _stateCacheClient.updateItem(stateKey, stateCache); } else { diff --git a/lib/features/mailbox/data/model/state_type.dart b/lib/features/mailbox/data/model/state_type.dart index 852a2a9e9..b7786c0d2 100644 --- a/lib/features/mailbox/data/model/state_type.dart +++ b/lib/features/mailbox/data/model/state_type.dart @@ -1,5 +1,9 @@ import 'package:hive/hive.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'; import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart'; part 'state_type.g.dart'; @@ -11,16 +15,9 @@ enum StateType { mailbox, @HiveField(1) - email -} + email; -extension StateTypeExtension on StateType { - String get value { - switch(this) { - case StateType.mailbox: - return 'mailbox'; - case StateType.email: - return 'email'; - } + String getTupleKeyStored(AccountId accountId, UserName userName) { + return TupleKey(name, accountId.asString, userName.value).encodeKey; } } \ No newline at end of file diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index b3e4b71ac..750615309 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -343,7 +343,11 @@ class ThreadController extends BaseController with EmailActionController { void _handleErrorGetAllOrRefreshChangesEmail(Object error, StackTrace stackTrace) async { logError('ThreadController::_handleErrorGetAllOrRefreshChangesEmail():Error: $error'); if (error is CannotCalculateChangesMethodResponseException) { - await cachingManager.clearEmailCache(); + if (_accountId != null && _session != null) { + await cachingManager.clearEmailCacheAndStateCacheByTupleKey(_accountId!, _session!); + } else { + await cachingManager.clearEmailCacheAndAllStateCache(); + } _getAllEmailAction(); } }