TF-1808: Create func store email when opening in data layer

(cherry picked from commit a24b4698eedd8c28461877a717ef305a6c47f185)
This commit is contained in:
HuyNguyen
2023-05-11 14:38:15 +07:00
committed by Dat Vu
parent a5dbcb1357
commit 28d75ce384
12 changed files with 110 additions and 3 deletions
@@ -1,19 +1,24 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/file_utils.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:model/extensions/email_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/email/domain/extensions/detailed_email_extension.dart';
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.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;
final FileUtils _fileUtils;
DetailedEmailCacheManager(this._cacheClient);
DetailedEmailCacheManager(this._cacheClient, this._fileUtils);
Future<DetailedEmailHiveCache> handleStoreDetailedEmail(
AccountId accountId,
@@ -58,4 +63,56 @@ class DetailedEmailCacheManager {
log('DetailedEmailCacheManager::getAllDetailedEmails():SIZE: ${detailedEmailCacheList.length}');
return detailedEmailCacheList;
}
Future<void> storeOpenedEmail(
AccountId accountId,
UserName userName,
DetailedEmail detailedEmail
) async {
final listDetailedEmails = await getAllDetailedEmails(accountId, userName);
final checkDuplicateDetailedEmail = await _handleDuplicateOpenedEmail(accountId, detailedEmail);
if (checkDuplicateDetailedEmail) {
return Future.value();
}
if (listDetailedEmails.length >= CachingConstants.maxNumberOpenedEmailsForOffline) {
final latestEmail = listDetailedEmails.last;
log('DetailedEmailCacheManager::handleStoreDetailedEmail():latestEmail: $latestEmail');
await removeDetailedEmail(accountId, userName, latestEmail.emailId);
}
await insertDetailedEmail(accountId, userName, detailedEmail.toHiveCache());
}
Future<bool> _handleDuplicateOpenedEmail(AccountId accountId, DetailedEmail detailedEmail) async {
final emailContentPath = await _getEmailContentPath(detailedEmail);
final detailedEmailCacheExists = await _getDetailedEmailCache(accountId);
if (emailContentPath != null && detailedEmailCacheExists) {
return true;
} else {
return false;
}
}
Future<String?> _getEmailContentPath(DetailedEmail detailedEmail) async {
final fileSaved = await _fileUtils.getFromFile(
nameFile: detailedEmail.emailId.asString,
folderPath: detailedEmail.folderPath,
extensionFile: ExtensionType.text.value
);
log('DetailedEmailCacheManager::_getDetailedEmailCache():_getEmailContentPath: $fileSaved');
return fileSaved;
}
Future<bool> _getDetailedEmailCache(AccountId accountId) async {
final detailedEmailCache = await _cacheClient.getItem(accountId.asString);
log('DetailedEmailCacheManager::_getDetailedEmailCache():_getDetailedEmailCache: $detailedEmailCache');
if (detailedEmailCache != null) {
return true;
} else {
return false;
}
}
}
@@ -0,0 +1,7 @@
import 'package:tmail_ui_user/features/offline_mode/worker/hive_worker_queue.dart';
class OpenedEmailCacheWorkerQueue extends WorkerQueue {
@override
String get workerName => 'OpenedEmailCache';
}