TF-1810 Add StoreDetailedEmailToCacheInteractor to store detailed email to cache
(cherry picked from commit 60a91537f7ea1225b5ca67f6dd9ef358b33939da)
This commit is contained in:
@@ -15,6 +15,7 @@ import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
|
||||
@@ -72,4 +73,6 @@ abstract class EmailDataSource {
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds);
|
||||
|
||||
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId);
|
||||
|
||||
Future<void> storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail);
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
@@ -148,4 +149,9 @@ class EmailDataSourceImpl extends EmailDataSource {
|
||||
return await emailAPI.deleteEmailPermanently(session, accountId, emailId);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:core/data/network/download/downloaded_response.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:dio/dio.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/mail/email/email.dart';
|
||||
import 'package:model/account/account_request.dart';
|
||||
import 'package:model/download/download_task_id.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:model/extensions/email_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.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/email/domain/model/move_to_mailbox_request.dart';
|
||||
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/worker/hive_task.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||
|
||||
class EmailHiveCacheDataSourceImpl extends EmailDataSource {
|
||||
|
||||
final DetailedEmailCacheManager _emailCacheManager;
|
||||
final DetailedEmailCacheWorkerQueue _cacheWorkerQueue;
|
||||
final FileUtils _fileUtils;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
|
||||
EmailHiveCacheDataSourceImpl(
|
||||
this._emailCacheManager,
|
||||
this._cacheWorkerQueue,
|
||||
this._fileUtils,
|
||||
this._exceptionThrower
|
||||
);
|
||||
|
||||
@override
|
||||
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List> downloadAttachmentForWeb(DownloadTaskId taskId, Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, StreamController<Either<Failure, Success>> onReceiveController) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<DownloadTaskId>> downloadAttachments(List<Attachment> attachments, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<DownloadedResponse> exportAttachment(Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest, CancelToken cancelToken) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Email> getEmailContent(Session session, AccountId accountId, EmailId emailId) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Email>> markAsRead(Session session, AccountId accountId, List<Email> emails, ReadActions readActions) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Email>> markAsStar(Session session, AccountId accountId, List<Email> emails, MarkStarAction markStarAction) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> sendEmail(Session session, AccountId accountId, EmailRequest emailRequest, {CreateNewMailboxRequest? mailboxRequest}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeDetailedEmailToCache(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::storeDetailedEmailToCache():fileSavedPath: ${fileSaved.path}');
|
||||
final detailedEmailSaved = detailedEmail.fromEmailContentPath(fileSaved.path);
|
||||
|
||||
final detailedEmailCache = await _emailCacheManager.handleStoreDetailedEmailToCache(
|
||||
accountId,
|
||||
session.username,
|
||||
detailedEmailSaved.toHiveCache());
|
||||
|
||||
return detailedEmailCache;
|
||||
});
|
||||
return await _cacheWorkerQueue.addTask(task);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
@@ -2,17 +2,26 @@
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/data/model/source_type/data_source_type.dart';
|
||||
import 'package:core/data/network/download/downloaded_response.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:dio/dio.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/state.dart' as jmap;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:model/account/account_request.dart';
|
||||
import 'package:model/download/download_task_id.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:model/email/email_content.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
|
||||
@@ -21,7 +30,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_r
|
||||
|
||||
class EmailRepositoryImpl extends EmailRepository {
|
||||
|
||||
final EmailDataSource emailDataSource;
|
||||
final Map<DataSourceType, EmailDataSource> emailDataSource;
|
||||
final HtmlDataSource _htmlDataSource;
|
||||
final StateDataSource _stateDataSource;
|
||||
|
||||
@@ -33,7 +42,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
|
||||
@override
|
||||
Future<Email> getEmailContent(Session session, AccountId accountId, EmailId emailId) {
|
||||
return emailDataSource.getEmailContent(session ,accountId, emailId);
|
||||
return emailDataSource[DataSourceType.network]!.getEmailContent(session ,accountId, emailId);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -43,7 +52,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
EmailRequest emailRequest,
|
||||
{CreateNewMailboxRequest? mailboxRequest}
|
||||
) {
|
||||
return emailDataSource.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
|
||||
return emailDataSource[DataSourceType.network]!.sendEmail(session, accountId, emailRequest, mailboxRequest: mailboxRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -53,7 +62,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
List<Email> emails,
|
||||
ReadActions readActions
|
||||
) {
|
||||
return emailDataSource.markAsRead(session, accountId, emails, readActions);
|
||||
return emailDataSource[DataSourceType.network]!.markAsRead(session, accountId, emails, readActions);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -63,7 +72,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
String baseDownloadUrl,
|
||||
AccountRequest accountRequest
|
||||
) {
|
||||
return emailDataSource.downloadAttachments(attachments, accountId, baseDownloadUrl, accountRequest);
|
||||
return emailDataSource[DataSourceType.network]!.downloadAttachments(attachments, accountId, baseDownloadUrl, accountRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -74,7 +83,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
AccountRequest accountRequest,
|
||||
CancelToken cancelToken
|
||||
) {
|
||||
return emailDataSource.exportAttachment(
|
||||
return emailDataSource[DataSourceType.network]!.exportAttachment(
|
||||
attachment,
|
||||
accountId,
|
||||
baseDownloadUrl,
|
||||
@@ -84,7 +93,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToMailbox(Session session, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
return emailDataSource.moveToMailbox(session, accountId, moveRequest);
|
||||
return emailDataSource[DataSourceType.network]!.moveToMailbox(session, accountId, moveRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -94,7 +103,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
List<Email> emails,
|
||||
MarkStarAction markStarAction
|
||||
) {
|
||||
return emailDataSource.markAsStar(session, accountId, emails, markStarAction);
|
||||
return emailDataSource[DataSourceType.network]!.markAsStar(session, accountId, emails, markStarAction);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -122,17 +131,17 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
|
||||
@override
|
||||
Future<Email> saveEmailAsDrafts(Session session, AccountId accountId, Email email) {
|
||||
return emailDataSource.saveEmailAsDrafts(session, accountId, email);
|
||||
return emailDataSource[DataSourceType.network]!.saveEmailAsDrafts(session, accountId, email);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> removeEmailDrafts(Session session, AccountId accountId, EmailId emailId) {
|
||||
return emailDataSource.removeEmailDrafts(session, accountId, emailId);
|
||||
return emailDataSource[DataSourceType.network]!.removeEmailDrafts(session, accountId, emailId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Email> updateEmailDrafts(Session session, AccountId accountId, Email newEmail) {
|
||||
return emailDataSource.updateEmailDrafts(session, accountId, newEmail);
|
||||
return emailDataSource[DataSourceType.network]!.updateEmailDrafts(session, accountId, newEmail);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -144,7 +153,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
AccountRequest accountRequest,
|
||||
StreamController<Either<Failure, Success>> onReceiveController
|
||||
) {
|
||||
return emailDataSource.downloadAttachmentForWeb(
|
||||
return emailDataSource[DataSourceType.network]!.downloadAttachmentForWeb(
|
||||
taskId,
|
||||
attachment,
|
||||
accountId,
|
||||
@@ -155,12 +164,12 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(Session session, AccountId accountId, List<EmailId> emailIds) {
|
||||
return emailDataSource.deleteMultipleEmailsPermanently(session, accountId, emailIds);
|
||||
return emailDataSource[DataSourceType.network]!.deleteMultipleEmailsPermanently(session, accountId, emailIds);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId) {
|
||||
return emailDataSource.deleteEmailPermanently(session, accountId, emailId);
|
||||
return emailDataSource[DataSourceType.network]!.deleteEmailPermanently(session, accountId, emailId);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -174,4 +183,9 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
Future<jmap.State?> getEmailState(Session session, AccountId accountId) {
|
||||
return _stateDataSource.getState(accountId, session.username, StateType.email);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) {
|
||||
return emailDataSource[DataSourceType.hiveCache]!.storeDetailedEmailToCache(session, accountId, detailedEmail);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/attachment_hive_cache.dart';
|
||||
|
||||
extension AttachmentExtension on Attachment {
|
||||
AttachmentHiveCache toHiveCache() {
|
||||
return AttachmentHiveCache(
|
||||
partId: partId?.value,
|
||||
blobId: blobId?.value,
|
||||
size: size?.value.toInt(),
|
||||
name: name,
|
||||
type: type?.mimeType,
|
||||
cid: cid,
|
||||
disposition: disposition?.name
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
import 'package:model/extensions/email_id_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/list_email_header_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
|
||||
|
||||
extension DetailedEmailExtension on DetailedEmail {
|
||||
DetailedEmailHiveCache toHiveCache() {
|
||||
return DetailedEmailHiveCache(
|
||||
emailId: emailId.asString,
|
||||
timeSaved: DateTime.now(),
|
||||
attachments: attachments?.toHiveCache(),
|
||||
headers: headers?.toHiveCache(),
|
||||
emailContentPath: emailContentPath
|
||||
);
|
||||
}
|
||||
|
||||
String get folderPath => '${CachingConstants.appFolderName}/${CachingConstants.emailContentFolderName}';
|
||||
|
||||
DetailedEmail fromEmailContentPath(String path) {
|
||||
return DetailedEmail(
|
||||
emailId: emailId,
|
||||
attachments: attachments,
|
||||
headers: headers,
|
||||
htmlEmailContent: htmlEmailContent,
|
||||
emailContentPath: path,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_header.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/email_header_hive_cache.dart';
|
||||
|
||||
extension EmailHeaderExtension on EmailHeader {
|
||||
EmailHeaderHiveCache toHiveCache() => EmailHeaderHiveCache(name: name, value: value);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
import 'package:model/email/attachment.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/attachment_hive_cache.dart';
|
||||
|
||||
extension ListAttachmentsExtension on List<Attachment> {
|
||||
List<AttachmentHiveCache> toHiveCache() => map((attachment) => attachment.toHiveCache()).toList();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_header.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/email_header_extension.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/email_header_hive_cache.dart';
|
||||
|
||||
extension ListEmailHeaderExtension on List<EmailHeader> {
|
||||
List<EmailHeaderHiveCache> toHiveCache() => map((emailHeader) => emailHeader.toHiveCache()).toList();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_header.dart';
|
||||
import 'package:model/email/attachment.dart';
|
||||
|
||||
class DetailedEmail with EquatableMixin {
|
||||
final EmailId emailId;
|
||||
final List<Attachment>? attachments;
|
||||
final List<EmailHeader>? headers;
|
||||
final String? htmlEmailContent;
|
||||
final String? emailContentPath;
|
||||
|
||||
DetailedEmail({
|
||||
required this.emailId,
|
||||
this.attachments,
|
||||
this.headers,
|
||||
this.htmlEmailContent,
|
||||
this.emailContentPath
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailId,
|
||||
attachments,
|
||||
headers,
|
||||
htmlEmailContent,
|
||||
emailContentPath
|
||||
];
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import 'package:model/email/email_content.dart';
|
||||
import 'package:model/email/mark_star_action.dart';
|
||||
import 'package:model/email/read_actions.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
|
||||
@@ -86,4 +87,6 @@ abstract class EmailRepository {
|
||||
Future<bool> deleteEmailPermanently(Session session, AccountId accountId, EmailId emailId);
|
||||
|
||||
Future<jmap.State?> getEmailState(Session session, AccountId accountId);
|
||||
|
||||
Future<void> storeDetailedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:core/core.dart';
|
||||
|
||||
class StoreDetailedEmailToCacheLoading extends UIState {}
|
||||
|
||||
class StoreDetailedEmailToCacheSuccess extends UIState {}
|
||||
|
||||
class StoreDetailedEmailToCacheFailure extends FeatureFailure {
|
||||
|
||||
StoreDetailedEmailToCacheFailure(dynamic exception) : super(exception: exception);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/store_detailed_email_to_cache_state.dart';
|
||||
|
||||
class StoreDetailedEmailToCacheInteractor {
|
||||
final EmailRepository _emailRepository;
|
||||
|
||||
StoreDetailedEmailToCacheInteractor(this._emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, DetailedEmail detailedEmail) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(StoreDetailedEmailToCacheLoading());
|
||||
await _emailRepository.storeDetailedEmailToCache(session, accountId, detailedEmail);
|
||||
yield Right<Failure, Success>(StoreDetailedEmailToCacheSuccess());
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(StoreDetailedEmailToCacheFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/utils/file_utils.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/caching/clients/state_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_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/email/data/datasource_impl/html_datasource_impl.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
@@ -40,6 +42,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/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/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/main/exceptions/cache_exception_thrower.dart';
|
||||
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||
|
||||
@@ -90,6 +94,11 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<DioClient>(),
|
||||
Get.find<RemoteExceptionThrower>()));
|
||||
Get.lazyPut(() => StateDataSourceImpl(Get.find<StateCacheClient>(), Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
|
||||
Get.find<DetailedEmailCacheManager>(),
|
||||
Get.find<DetailedEmailCacheWorkerQueue>(),
|
||||
Get.find<FileUtils>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -141,9 +150,12 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<StateDataSource>(),
|
||||
));
|
||||
Get.lazyPut(() => EmailRepositoryImpl(
|
||||
Get.find<EmailDataSource>(),
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>()
|
||||
{
|
||||
DataSourceType.network: Get.find<EmailDataSource>(),
|
||||
DataSourceType.hiveCache: Get.find<EmailHiveCacheDataSourceImpl>()
|
||||
},
|
||||
Get.find<HtmlDataSource>(),
|
||||
Get.find<StateDataSource>()
|
||||
));
|
||||
Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user