TF-3767 Clean up recent searches whenever re-login and exceeds limit

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-06-11 12:59:13 +07:00
committed by Dat H. Pham
parent a02435c9f5
commit 6fef6190e0
13 changed files with 136 additions and 61 deletions
@@ -1,4 +1,5 @@
import 'package:core/utils/app_logger.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';
@@ -18,16 +19,27 @@ class RecentSearchCacheManager {
RecentSearchCacheManager(this._recentSearchCacheClient);
Future<void> clean(RecentSearchCleanupRule cleanupRule) async {
final listRecentSearchCache = await _recentSearchCacheClient.getAll();
listRecentSearchCache.sortByCreationDate();
final nestedKey = TupleKey(
cleanupRule.accountId.asString,
cleanupRule.userName.value,
).encodeKey;
if (listRecentSearchCache.length > cleanupRule.storageLimit) {
final newListKeyRecent = listRecentSearchCache
.sublist(cleanupRule.storageLimit)
.map((recent) => recent.value)
.toList();
await _recentSearchCacheClient.deleteMultipleItem(newListKeyRecent);
}
final listRecentSearchCache = await _recentSearchCacheClient
.getListByNestedKey(nestedKey);
listRecentSearchCache.sortByCreationDate();
if (listRecentSearchCache.length > cleanupRule.storageLimit) {
final newListKeyRecent = listRecentSearchCache
.sublist(cleanupRule.storageLimit)
.map((recent) => recent.toRecentSearch().generateTupleKey(
cleanupRule.accountId,
cleanupRule.userName,
))
.toList();
log('RecentSearchCacheManager::clean: list recent to delete $newListKeyRecent');
await _recentSearchCacheClient.deleteMultipleItem(newListKeyRecent);
}
}
Future<void> saveRecentSearch(
@@ -76,6 +88,10 @@ class RecentSearchCacheManager {
? listRecentSearch.sublist(0, newLimit)
: listRecentSearch;
for (var recentSearch in newListRecentSearch) {
log('RecentSearchCacheManager::getAllLatest: Recent search: ${recentSearch.toString()}');
}
return newListRecentSearch;
}