TF-2680 Integrate get always read receipt with send email interactor
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user