TF-1923 Add createdTime for DetailedEmail

(cherry picked from commit 817c35849338c483feaa2a68586b162a8a67b9a2)
This commit is contained in:
dab246
2023-06-21 01:38:19 +07:00
committed by Dat H. Pham
parent 4ea620cc2b
commit 5faab2c306
21 changed files with 57 additions and 39 deletions
@@ -44,8 +44,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -100,7 +100,7 @@ class ComposerBindings extends BaseBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
@@ -31,8 +31,8 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r
import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart'; import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_task.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
@@ -49,7 +49,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
final NewEmailCacheManager _newEmailCacheManager; final NewEmailCacheManager _newEmailCacheManager;
final OpenedEmailCacheManager _openedEmailCacheManager; final OpenedEmailCacheManager _openedEmailCacheManager;
final DetailedEmailCacheWorkerQueue _cacheWorkerQueue; final NewEmailCacheWorkerQueue _newEmailCacheWorkerQueue;
final OpenedEmailCacheWorkerQueue _openedEmailCacheWorkerQueue; final OpenedEmailCacheWorkerQueue _openedEmailCacheWorkerQueue;
final EmailCacheManager _emailCacheManager; final EmailCacheManager _emailCacheManager;
final SendingEmailCacheManager _sendingEmailCacheManager; final SendingEmailCacheManager _sendingEmailCacheManager;
@@ -59,7 +59,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
EmailHiveCacheDataSourceImpl( EmailHiveCacheDataSourceImpl(
this._newEmailCacheManager, this._newEmailCacheManager,
this._openedEmailCacheManager, this._openedEmailCacheManager,
this._cacheWorkerQueue, this._newEmailCacheWorkerQueue,
this._openedEmailCacheWorkerQueue, this._openedEmailCacheWorkerQueue,
this._emailCacheManager, this._emailCacheManager,
this._sendingEmailCacheManager, this._sendingEmailCacheManager,
@@ -131,6 +131,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
Future<void> storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { Future<void> storeDetailedNewEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) {
return Future.sync(() async { return Future.sync(() async {
final task = HiveTask( final task = HiveTask(
id: detailedEmail.emailId.asString,
runnable: () async { runnable: () async {
final fileSaved = await _fileUtils.saveToFile( final fileSaved = await _fileUtils.saveToFile(
nameFile: detailedEmail.emailId.asString, nameFile: detailedEmail.emailId.asString,
@@ -139,15 +140,16 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
); );
final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path); final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path);
final detailedEmailCacheSaved = detailedEmailSaved.toHiveCache();
final detailedEmailCache = await _newEmailCacheManager.storeDetailedNewEmail( final detailedEmailCache = await _newEmailCacheManager.storeDetailedNewEmail(
accountId, accountId,
session.username, session.username,
detailedEmailSaved.toHiveCache()); detailedEmailCacheSaved);
return detailedEmailCache; return detailedEmailCache;
}); });
return _cacheWorkerQueue.addTask(task); return _newEmailCacheWorkerQueue.addTask(task);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
@@ -172,6 +174,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
Future<void> storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { Future<void> storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) {
return Future.sync(() async { return Future.sync(() async {
final task = HiveTask( final task = HiveTask(
id: detailedEmail.emailId.asString,
runnable: () async { runnable: () async {
final fileSaved = await _fileUtils.saveToFile( final fileSaved = await _fileUtils.saveToFile(
nameFile: detailedEmail.emailId.asString, nameFile: detailedEmail.emailId.asString,
@@ -11,7 +11,7 @@ extension DetailedEmailExtension on DetailedEmail {
DetailedEmailHiveCache toHiveCache() { DetailedEmailHiveCache toHiveCache() {
return DetailedEmailHiveCache( return DetailedEmailHiveCache(
emailId: emailId.asString, emailId: emailId.asString,
timeSaved: DateTime.now(), timeSaved: createdTime,
attachments: attachments?.toHiveCache(), attachments: attachments?.toHiveCache(),
headers: headers?.toList().toHiveCache(), headers: headers?.toList().toHiveCache(),
keywords: keywords?.toMapString(), keywords: keywords?.toMapString(),
@@ -26,6 +26,7 @@ extension DetailedEmailExtension on DetailedEmail {
DetailedEmail fromEmailContentPath(String path) { DetailedEmail fromEmailContentPath(String path) {
return DetailedEmail( return DetailedEmail(
emailId: emailId, emailId: emailId,
createdTime: createdTime,
attachments: attachments, attachments: attachments,
headers: headers, headers: headers,
keywords: keywords, keywords: keywords,
@@ -10,6 +10,7 @@ extension DetailedEmailHiveCacheExtension on DetailedEmailHiveCache {
DetailedEmail toDetailedEmailWithContent(String emailContent) { DetailedEmail toDetailedEmailWithContent(String emailContent) {
return DetailedEmail( return DetailedEmail(
emailId: EmailId(Id(emailId)), emailId: EmailId(Id(emailId)),
createdTime: timeSaved,
attachments: attachments?.toAttachment(), attachments: attachments?.toAttachment(),
headers: headers?.toSetEmailHeader(), headers: headers?.toSetEmailHeader(),
keywords: keywords != null keywords: keywords != null
@@ -7,6 +7,7 @@ extension EmailExtension on Email {
DetailedEmail toDetailedEmail({String? htmlEmailContent}) { DetailedEmail toDetailedEmail({String? htmlEmailContent}) {
return DetailedEmail( return DetailedEmail(
emailId: id!, emailId: id!,
createdTime: DateTime.now(),
attachments: allAttachments, attachments: allAttachments,
headers: headers, headers: headers,
keywords: keywords, keywords: keywords,
@@ -11,9 +11,11 @@ class DetailedEmail with EquatableMixin {
final Map<KeyWordIdentifier, bool>? keywords; final Map<KeyWordIdentifier, bool>? keywords;
final String? htmlEmailContent; final String? htmlEmailContent;
final String? emailContentPath; final String? emailContentPath;
final DateTime createdTime;
DetailedEmail({ DetailedEmail({
required this.emailId, required this.emailId,
required this.createdTime,
this.attachments, this.attachments,
this.headers, this.headers,
this.keywords, this.keywords,
@@ -24,6 +26,7 @@ class DetailedEmail with EquatableMixin {
@override @override
List<Object?> get props => [ List<Object?> get props => [
emailId, emailId,
createdTime,
attachments, attachments,
headers, headers,
keywords, keywords,
@@ -97,6 +97,7 @@ class GetEmailContentInteractor {
} }
) async* { ) async* {
try { try {
log('GetEmailContentInteractor::_getStoredOpenedEmail(): CALLED');
final detailedEmail = await emailRepository.getStoredOpenedEmail(session, accountId, emailId); final detailedEmail = await emailRepository.getStoredOpenedEmail(session, accountId, emailId);
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess( yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
emailContent: detailedEmail.htmlEmailContent ?? "", emailContent: detailedEmail.htmlEmailContent ?? "",
@@ -130,6 +131,7 @@ class GetEmailContentInteractor {
} }
) async* { ) async* {
try { try {
log('GetEmailContentInteractor::_getStoredNewEmail():CALLED');
final detailedEmail = await emailRepository.getStoredNewEmail(session, accountId, emailId); final detailedEmail = await emailRepository.getStoredNewEmail(session, accountId, emailId);
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess( yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
emailContent: detailedEmail.htmlEmailContent ?? "", emailContent: detailedEmail.htmlEmailContent ?? "",
@@ -1,5 +1,6 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.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/session/session.dart';
@@ -25,6 +26,7 @@ class StoreNewEmailInteractor {
_emailRepository.storeEmail(session, accountId, email), _emailRepository.storeEmail(session, accountId, email),
_emailRepository.storeDetailedNewEmail(session, accountId, detailedEmail), _emailRepository.storeDetailedNewEmail(session, accountId, detailedEmail),
]); ]);
log('StoreNewEmailInteractor::execute():Store Success | EMAIL: ${detailedEmail.htmlEmailContent} | TIME: ${detailedEmail.createdTime}');
yield Right<Failure, Success>(StoreNewEmailSuccess()); yield Right<Failure, Success>(StoreNewEmailSuccess());
} catch (e) { } catch (e) {
yield Left<Failure, Success>(StoreNewEmailFailure(e)); yield Left<Failure, Success>(StoreNewEmailFailure(e));
@@ -347,7 +347,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
if (emailLoaded != null) { if (emailLoaded != null) {
dispatchState(Right<Failure, Success>(GetEmailContentLoading())); dispatchState(Right<Failure, Success>(GetEmailContentLoading()));
await Future.delayed(const Duration(milliseconds: 300));
consumeState(Stream.value(Right<Failure, Success>( consumeState(Stream.value(Right<Failure, Success>(
GetEmailContentSuccess( GetEmailContentSuccess(
emailContent: emailLoaded.emailContent, emailContent: emailLoaded.emailContent,
@@ -407,6 +406,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
if (PlatformInfo.isMobile) { if (PlatformInfo.isMobile) {
final detailedEmail = DetailedEmail( final detailedEmail = DetailedEmail(
emailId: currentEmail!.id!, emailId: currentEmail!.id!,
createdTime: DateTime.now(),
attachments: attachments, attachments: attachments,
headers: currentEmail?.emailHeader?.toSet(), headers: currentEmail?.emailHeader?.toSet(),
keywords: currentEmail?.keywords, keywords: currentEmail?.keywords,
@@ -43,8 +43,8 @@ import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repositor
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -103,7 +103,7 @@ class EmailBindings extends BaseBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
@@ -94,8 +94,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -250,7 +250,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
@@ -24,8 +24,8 @@ import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart';
import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart'; import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -65,7 +65,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
@@ -1,8 +0,0 @@
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queue.dart';
class DetailedEmailCacheWorkerQueue extends WorkerQueue {
@override
String get workerName => 'DetailedEmailCache';
}
@@ -1,4 +1,5 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/file_utils.dart'; import 'package:core/utils/file_utils.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart';
@@ -24,20 +25,19 @@ class NewEmailCacheManager {
DetailedEmailHiveCache detailedEmailCache DetailedEmailHiveCache detailedEmailCache
) async { ) async {
final listDetailedEmails = await getAllDetailedEmails(accountId, userName); final listDetailedEmails = await getAllDetailedEmails(accountId, userName);
log('NewEmailCacheManager::storeDetailedNewEmail():listDetailedEmails: $listDetailedEmails');
if (listDetailedEmails.length >= CachingConstants.maxNumberNewEmailsForOffline) { if (listDetailedEmails.length >= CachingConstants.maxNumberNewEmailsForOffline) {
final lastElementsListEmail = listDetailedEmails.sublist( final lastElementsListEmail = listDetailedEmails.sublist(CachingConstants.maxNumberNewEmailsForOffline - 1);
CachingConstants.maxNumberNewEmailsForOffline - 1,
listDetailedEmails.length);
for (var email in lastElementsListEmail) { for (var email in lastElementsListEmail) {
if (email.emailContentPath != null) { if (email.emailContentPath != null) {
await _deleteFileExisted(email.emailContentPath!); await _deleteFileExisted(email.emailContentPath!);
} }
await removeDetailedEmail(accountId, userName, email.emailId); await removeDetailedEmail(accountId, userName, email.emailId);
} }
log('NewEmailCacheManager::storeDetailedNewEmail(): DELETE COMPLETED');
} }
await insertDetailedEmail(accountId, userName, detailedEmailCache); await insertDetailedEmail(accountId, userName, detailedEmailCache);
log('NewEmailCacheManager::storeDetailedNewEmail(): INSERT COMPLETED');
return detailedEmailCache; return detailedEmailCache;
} }
@@ -82,4 +82,6 @@ class NewEmailCacheManager {
throw NotFoundStoredNewEmailException(); throw NotFoundStoredNewEmailException();
} }
} }
Future<void> closeNewEmailHiveCacheBox() => _cacheClient.closeBox();
} }
@@ -0,0 +1,8 @@
import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queue.dart';
class NewEmailCacheWorkerQueue extends WorkerQueue {
@override
String get workerName => 'NewEmailCache';
}
@@ -54,9 +54,7 @@ class OpenedEmailCacheManager {
final listDetailedEmails = await getAllDetailedEmails(accountId, userName); final listDetailedEmails = await getAllDetailedEmails(accountId, userName);
if (listDetailedEmails.length >= CachingConstants.maxNumberOpenedEmailsForOffline) { if (listDetailedEmails.length >= CachingConstants.maxNumberOpenedEmailsForOffline) {
final lastElementsListEmail = listDetailedEmails.sublist( final lastElementsListEmail = listDetailedEmails.sublist(CachingConstants.maxNumberOpenedEmailsForOffline - 1);
CachingConstants.maxNumberOpenedEmailsForOffline - 1,
listDetailedEmails.length);
for (var email in lastElementsListEmail) { for (var email in lastElementsListEmail) {
if (email.emailContentPath != null) { if (email.emailContentPath != null) {
await _deleteFileExisted(email.emailContentPath!); await _deleteFileExisted(email.emailContentPath!);
@@ -3,5 +3,5 @@ import 'package:tmail_ui_user/features/offline_mode/hive_worker/hive_worker_queu
class OpenedEmailCacheWorkerQueue extends WorkerQueue { class OpenedEmailCacheWorkerQueue extends WorkerQueue {
@override @override
String get workerName => 'OpenedEmailCacheQueue'; String get workerName => 'OpenedEmailCache';
} }
@@ -23,8 +23,8 @@ import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_dataso
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -106,7 +106,7 @@ class FcmInteractorBindings extends InteractorsBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
@@ -24,6 +24,7 @@ import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.d
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/push_notification/presentation/action/fcm_action.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/action/fcm_action.dart';
import 'package:tmail_ui_user/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart';
import 'package:tmail_ui_user/features/push_notification/presentation/controller/fcm_base_controller.dart'; import 'package:tmail_ui_user/features/push_notification/presentation/controller/fcm_base_controller.dart';
@@ -50,6 +51,7 @@ class FcmMessageController extends FcmBaseController {
DynamicUrlInterceptors? _dynamicUrlInterceptors; DynamicUrlInterceptors? _dynamicUrlInterceptors;
AuthorizationInterceptors? _authorizationInterceptors; AuthorizationInterceptors? _authorizationInterceptors;
GetSessionInteractor? _getSessionInteractor; GetSessionInteractor? _getSessionInteractor;
NewEmailCacheManager? _newEmailCacheManager;
FcmMessageController._internal() { FcmMessageController._internal() {
_listenFcmStream(); _listenFcmStream();
@@ -197,7 +199,9 @@ class FcmMessageController extends FcmBaseController {
FcmInteractorBindings().dependencies(); FcmInteractorBindings().dependencies();
}); });
return await _getInteractorBindings(); await _getInteractorBindings();
await _newEmailCacheManager?.closeNewEmailHiveCacheBox();
} }
Future<void> _getInteractorBindings() { Future<void> _getInteractorBindings() {
@@ -206,6 +210,7 @@ class FcmMessageController extends FcmBaseController {
_dynamicUrlInterceptors = getBinding<DynamicUrlInterceptors>(); _dynamicUrlInterceptors = getBinding<DynamicUrlInterceptors>();
_authorizationInterceptors = getBinding<AuthorizationInterceptors>(); _authorizationInterceptors = getBinding<AuthorizationInterceptors>();
_getSessionInteractor = getBinding<GetSessionInteractor>(); _getSessionInteractor = getBinding<GetSessionInteractor>();
_newEmailCacheManager = getBinding<NewEmailCacheManager>();
FcmTokenController.instance.initialize(); FcmTokenController.instance.initialize();
} catch (e) { } catch (e) {
logError('FcmMessageController::_getBindings(): ${e.toString()}'); logError('FcmMessageController::_getBindings(): ${e.toString()}');
@@ -4,12 +4,12 @@ import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/interactors_bindings.dart'; import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart'; import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/sending_queue/data/repository/sending_queue_repository_impl.dart'; import 'package:tmail_ui_user/features/sending_queue/data/repository/sending_queue_repository_impl.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_multiple_sending_email_interactor.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_sending_email_interactor.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sending_email_interactor.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -29,7 +29,7 @@ class SendingQueueInteractorBindings extends InteractorsBindings {
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
Get.find<NewEmailCacheManager>(), Get.find<NewEmailCacheManager>(),
Get.find<OpenedEmailCacheManager>(), Get.find<OpenedEmailCacheManager>(),
Get.find<DetailedEmailCacheWorkerQueue>(), Get.find<NewEmailCacheWorkerQueue>(),
Get.find<OpenedEmailCacheWorkerQueue>(), Get.find<OpenedEmailCacheWorkerQueue>(),
Get.find<EmailCacheManager>(), Get.find<EmailCacheManager>(),
Get.find<SendingEmailCacheManager>(), Get.find<SendingEmailCacheManager>(),
+2 -2
View File
@@ -31,8 +31,8 @@ import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart'; import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/share_preference_spam_report_data_source.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart'; import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
@@ -105,7 +105,7 @@ class LocalBindings extends Bindings {
} }
void _bindingWorkerQueue() { void _bindingWorkerQueue() {
Get.put(DetailedEmailCacheWorkerQueue()); Get.put(NewEmailCacheWorkerQueue());
Get.put(OpenedEmailCacheWorkerQueue()); Get.put(OpenedEmailCacheWorkerQueue());
} }
} }