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
@@ -166,4 +166,9 @@ class EmailDataSourceImpl extends EmailDataSource {
Future<void> storeEmail(Session session, AccountId accountId, Email email) {
throw UnimplementedError();
}
@override
Future<void> storeOpenedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) {
throw UnimplementedError();
}
}
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_reques
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/detailed_email_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/opened_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart';
@@ -36,6 +37,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
final DetailedEmailCacheManager _detailedEmailCacheManager;
final DetailedEmailCacheWorkerQueue _cacheWorkerQueue;
final OpenedEmailCacheWorkerQueue _openedEmailCacheWorkerQueue;
final EmailCacheManager _emailCacheManager;
final FileUtils _fileUtils;
final ExceptionThrower _exceptionThrower;
@@ -43,6 +45,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
EmailHiveCacheDataSourceImpl(
this._detailedEmailCacheManager,
this._cacheWorkerQueue,
this._openedEmailCacheWorkerQueue,
this._emailCacheManager,
this._fileUtils,
this._exceptionThrower
@@ -149,4 +152,27 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
return await _emailCacheManager.storeEmail(accountId, session.username, email.toEmailCache());
}).catchError(_exceptionThrower.throwException);
}
@override
Future<void> storeOpenedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) {
return Future.sync(() async {
final task = HiveTask(
runnable: () async {
final fileSaved = await _fileUtils.saveToFile(
nameFile: detailedEmail.emailId.asString,
content: detailedEmail.htmlEmailContent ?? '',
folderPath: detailedEmail.folderPath,
extensionFile: ExtensionType.text.value
);
log('EmailHiveCacheDataSourceImpl::storeOpenedEmailToCache():fileSavedPath: ${fileSaved.path}');
final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path);
await _detailedEmailCacheManager.storeOpenedEmail(
accountId,
session.username,
detailedEmailSaved);
});
return await _openedEmailCacheWorkerQueue.addTask(task);
}).catchError(_exceptionThrower.throwException);
}
}