TF-1897 Implement resend sending email when failed
(cherry picked from commit f508b65688503e9ae8ece5a1924e84481b98a39e)
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import 'package:tmail_ui_user/features/offline_mode/model/sending_email_hive_cache.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
|
||||
extension ListSendingEmailExtension on List<SendingEmail> {
|
||||
List<SendingEmailHiveCache> toHiveCache() => map((sendingEmail) => sendingEmail.toHiveCache()).toList();
|
||||
|
||||
List<String> get sendingIds => map((sendingEmail) => sendingEmail.sendingId).toSet().toList();
|
||||
}
|
||||
@@ -101,6 +101,10 @@ class SendingEmail with EquatableMixin {
|
||||
|
||||
bool get isWaiting => sendingState == SendingState.waiting;
|
||||
|
||||
bool get isError => sendingState == SendingState.error;
|
||||
|
||||
bool get isSuccess => sendingState == SendingState.success;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
sendingId,
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
|
||||
class UpdateMultipleSendingEmailLoading extends UIState {}
|
||||
|
||||
class UpdateMultipleSendingEmailAllSuccess extends UIState {
|
||||
final List<SendingEmail> newSendingEmails;
|
||||
|
||||
UpdateMultipleSendingEmailAllSuccess(this.newSendingEmails);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [newSendingEmails];
|
||||
}
|
||||
|
||||
class UpdateMultipleSendingEmailHasSomeSuccess extends UIState {
|
||||
final List<SendingEmail> newSendingEmails;
|
||||
|
||||
UpdateMultipleSendingEmailHasSomeSuccess(this.newSendingEmails);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [newSendingEmails];
|
||||
}
|
||||
|
||||
class UpdateMultipleSendingEmailAllFailure extends FeatureFailure {
|
||||
|
||||
UpdateMultipleSendingEmailAllFailure(dynamic exception) : super(exception: exception);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [exception];
|
||||
}
|
||||
|
||||
class UpdateMultipleSendingEmailFailure extends FeatureFailure {
|
||||
|
||||
UpdateMultipleSendingEmailFailure(dynamic exception) : super(exception: exception);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [exception];
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
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/user_name.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/data/exceptions/sending_queue_exceptions.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/state/update_multiple_sending_email_state.dart';
|
||||
|
||||
class UpdateMultipleSendingEmailInteractor {
|
||||
final SendingQueueRepository _sendingQueueRepository;
|
||||
|
||||
UpdateMultipleSendingEmailInteractor(this._sendingQueueRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
List<SendingEmail> newSendingEmails
|
||||
) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(UpdateMultipleSendingEmailLoading());
|
||||
final storedSendingEmails = await _sendingQueueRepository.updateMultipleSendingEmail(
|
||||
accountId,
|
||||
userName,
|
||||
newSendingEmails);
|
||||
if (storedSendingEmails.length == newSendingEmails.length) {
|
||||
yield Right<Failure, Success>(UpdateMultipleSendingEmailAllSuccess(storedSendingEmails));
|
||||
} else if (storedSendingEmails.isEmpty) {
|
||||
yield Left<Failure, Success>(UpdateMultipleSendingEmailAllFailure(NotFoundSendingEmailHiveObject()));
|
||||
} else {
|
||||
yield Right<Failure, Success>(UpdateMultipleSendingEmailHasSomeSuccess(storedSendingEmails));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(UpdateMultipleSendingEmailFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,12 +15,11 @@ class UpdateSendingEmailInteractor {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
UserName userName,
|
||||
SendingEmail newSendingEmail,
|
||||
{bool needToReopen = false}
|
||||
SendingEmail newSendingEmail
|
||||
) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(UpdateSendingEmailLoading());
|
||||
final storedSendingEmail = await _sendingQueueRepository.updateSendingEmail(accountId, userName, newSendingEmail, needToReopen: needToReopen);
|
||||
final storedSendingEmail = await _sendingQueueRepository.updateSendingEmail(accountId, userName, newSendingEmail);
|
||||
yield Right<Failure, Success>(UpdateSendingEmailSuccess(storedSendingEmail));
|
||||
} catch (e) {
|
||||
yield Left<Failure, Success>(UpdateSendingEmailFailure(e));
|
||||
|
||||
Reference in New Issue
Block a user