TF-2680 Integrate get always read receipt with send email interactor

This commit is contained in:
DatDang
2024-03-07 08:53:21 +07:00
committed by Dat H. Pham
parent d33003bc64
commit 6f9e20188f
@@ -3,18 +3,24 @@ import 'package:core/presentation/state/success.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';
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart'; import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.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/sending_queue/presentation/model/sending_email_action_type.dart'; import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart';
class SendEmailInteractor { class SendEmailInteractor {
final EmailRepository _emailRepository; final EmailRepository _emailRepository;
final MailboxRepository _mailboxRepository; final MailboxRepository _mailboxRepository;
final ServerSettingsRepository _serverSettingsRepository;
SendEmailInteractor(this._emailRepository, this._mailboxRepository); SendEmailInteractor(
this._emailRepository,
this._mailboxRepository,
this._serverSettingsRepository);
Stream<Either<Failure, Success>> execute( Stream<Either<Failure, Success>> execute(
Session session, Session session,
@@ -36,10 +42,14 @@ class SendEmailInteractor {
final currentMailboxState = listState.first; final currentMailboxState = listState.first;
final currentEmailState = listState.last; final currentEmailState = listState.last;
EmailRequest? updatedEmailRequest = await _getUpdatedEmailRequestIfAvailable(
accountId,
emailRequest);
final result = await _emailRepository.sendEmail( final result = await _emailRepository.sendEmail(
session, session,
accountId, accountId,
emailRequest, updatedEmailRequest ?? emailRequest,
mailboxRequest: mailboxRequest mailboxRequest: mailboxRequest
); );
@@ -75,4 +85,22 @@ class SendEmailInteractor {
)); ));
} }
} }
Future<EmailRequest?> _getUpdatedEmailRequestIfAvailable(
AccountId accountId,
EmailRequest emailRequest
) async {
bool alwaysReadReceipt = true;
EmailRequest? updatedEmailRequest;
try {
final serverSettings = await _serverSettingsRepository.getServerSettings(accountId);
alwaysReadReceipt = serverSettings.settings?.alwaysReadReceipts ?? true;
} catch (_) {
alwaysReadReceipt = true;
}
if (!alwaysReadReceipt) {
updatedEmailRequest = emailRequest.withUpdatedEmailHeaderMdn({});
}
return updatedEmailRequest;
}
} }