TF-1810 Create DetailedEmailCacheManager to manage store/get/delete cache
(cherry picked from commit b2678ba89f5f2842726464f475343b279db4251f)
This commit is contained in:
@@ -1,20 +1,10 @@
|
|||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:core/utils/app_logger.dart';
|
|
||||||
|
|
||||||
class CacheUtils {
|
class CacheUtils {
|
||||||
static String encodeKey(String key) {
|
static String encodeKey(String key) => base64.encode(utf8.encode(key));
|
||||||
final keyEncoded = base64.encode(utf8.encode(key));
|
|
||||||
log('CacheUtils::encodeKey():keyHashed: $keyEncoded');
|
|
||||||
return keyEncoded;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String decodeKey(String keyEncoded) {
|
static String decodeKey(String keyEncoded) => utf8.decode(base64.decode(keyEncoded));
|
||||||
final keyDecoded = utf8.decode(base64.decode(keyEncoded));
|
|
||||||
log('CacheUtils::decodeKey():keyDecoded: $keyDecoded');
|
|
||||||
return keyDecoded;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class TupleKey {
|
class TupleKey {
|
||||||
|
|||||||
@@ -20,4 +20,6 @@ class CachingConstants {
|
|||||||
|
|
||||||
static const String fcmCacheBoxName = 'fcm_cache_box';
|
static const String fcmCacheBoxName = 'fcm_cache_box';
|
||||||
static const String detailedEmailCacheBoxName = 'detailed_email_cache_box';
|
static const String detailedEmailCacheBoxName = 'detailed_email_cache_box';
|
||||||
|
|
||||||
|
static const int maxNumberRecentEmails = 10;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
import 'package:jmap_dart_client/jmap/core/extensions/date_time_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
|
||||||
|
|
||||||
|
extension ListDetailedEmailHiveCacheExtension on List<DetailedEmailHiveCache> {
|
||||||
|
|
||||||
|
void sortByLatestTime() {
|
||||||
|
sort((detailedEmail1, detailedEmail2) {
|
||||||
|
return detailedEmail1.timeSaved.compareToSort(detailedEmail2.timeSaved, false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
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';
|
||||||
|
import 'package:tmail_ui_user/features/caching/clients/detailed_email_hive_cache_client.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/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
|
||||||
|
|
||||||
|
class DetailedEmailCacheManager {
|
||||||
|
|
||||||
|
final DetailedEmailHiveCacheClient _cacheClient;
|
||||||
|
|
||||||
|
DetailedEmailCacheManager(this._cacheClient);
|
||||||
|
|
||||||
|
Future<void> handleStoreDetailedEmailToCache(
|
||||||
|
AccountId accountId,
|
||||||
|
UserName userName,
|
||||||
|
DetailedEmailHiveCache detailedEmailCache
|
||||||
|
) async {
|
||||||
|
final listDetailedEmails = await getAllDetailedEmails(accountId, userName);
|
||||||
|
|
||||||
|
if (listDetailedEmails.length >= CachingConstants.maxNumberRecentEmails) {
|
||||||
|
final latestEmail = listDetailedEmails.last;
|
||||||
|
log('DetailedEmailCacheManager::handleStoreDetailedEmailToCache():latestEmail: $latestEmail');
|
||||||
|
await removeDetailedEmail(accountId, userName, latestEmail.emailId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return insertDetailedEmail(accountId, userName, detailedEmailCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> insertDetailedEmail(
|
||||||
|
AccountId accountId,
|
||||||
|
UserName userName,
|
||||||
|
DetailedEmailHiveCache detailedEmailCache
|
||||||
|
) {
|
||||||
|
final keyCache = TupleKey(detailedEmailCache.emailId, accountId.asString, userName.value).encodeKey;
|
||||||
|
log('DetailedEmailCacheManager::storeDetailedEmail(): $keyCache');
|
||||||
|
return _cacheClient.insertItem(keyCache, detailedEmailCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> removeDetailedEmail(
|
||||||
|
AccountId accountId,
|
||||||
|
UserName userName,
|
||||||
|
String emailId
|
||||||
|
) {
|
||||||
|
final keyCache = TupleKey(emailId, accountId.asString, userName.value).encodeKey;
|
||||||
|
log('DetailedEmailCacheManager::removeDetailedEmail(): $keyCache');
|
||||||
|
return _cacheClient.deleteItem(keyCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<DetailedEmailHiveCache>> getAllDetailedEmails(AccountId accountId, UserName userName) async {
|
||||||
|
final detailedEmailCacheList = await _cacheClient.getListByTupleKey(accountId.asString, userName.value);
|
||||||
|
detailedEmailCacheList.sortByLatestTime();
|
||||||
|
log('DetailedEmailCacheManager::getAllDetailedEmails():SIZE: ${detailedEmailCacheList.length}');
|
||||||
|
return detailedEmailCacheList;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user