TF-3334 Remove Email/get of unsubscribe email action

This commit is contained in:
dab246
2024-12-19 01:08:19 +07:00
committed by Dat H. Pham
parent eb51e9b3b1
commit 6063f4b832
9 changed files with 27 additions and 30 deletions
@@ -143,7 +143,7 @@ abstract class EmailDataSource {
Future<SendingEmail> getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId); Future<SendingEmail> getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId);
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId); Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId);
Future<EmailRecoveryAction> restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest); Future<EmailRecoveryAction> restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest);
@@ -307,7 +307,7 @@ class EmailDataSourceImpl extends EmailDataSource {
} }
@override @override
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) {
return Future.sync(() async { return Future.sync(() async {
return await emailAPI.unsubscribeMail(session, accountId, emailId); return await emailAPI.unsubscribeMail(session, accountId, emailId);
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
@@ -339,7 +339,7 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource {
} }
@override @override
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) {
throw UnimplementedError(); throw UnimplementedError();
} }
+14 -13
View File
@@ -678,17 +678,13 @@ class EmailAPI with HandleSetErrorMixin {
} }
} }
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) async { Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) async {
final setEmailMethod = SetEmailMethod(accountId) final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(emailId.generateMapUpdateObjectUnsubscribeMail()); ..addUpdates(emailId.generateMapUpdateObjectUnsubscribeMail());
final getEmailMethod = GetEmailMethod(accountId)
..addIds({emailId.id})
..addProperties(ThreadConstants.propertiesDefault);
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation()); final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
requestBuilder.invocation(setEmailMethod); requestBuilder.invocation(setEmailMethod);
final getEmailInvocation = requestBuilder.invocation(getEmailMethod); final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities.toCapabilitiesSupportTeamMailboxes(session, accountId); final capabilities = setEmailMethod.requiredCapabilities.toCapabilitiesSupportTeamMailboxes(session, accountId);
@@ -697,14 +693,19 @@ class EmailAPI with HandleSetErrorMixin {
.build() .build()
.execute(); .execute();
final getEmailResponse = response.parse<GetEmailResponse>( final setEmailResponse = response.parse<SetEmailResponse>(
getEmailInvocation.methodCallId, setEmailInvocation.methodCallId,
GetEmailResponse.deserialize); SetEmailResponse.deserialize,
);
if (getEmailResponse?.list.isNotEmpty == true) { final emailIdUpdated = setEmailResponse?.updated
return getEmailResponse!.list.first; ?.keys
} else { .map((id) => EmailId(id))
throw NotFoundEmailException(); .toList() ?? [];
final mapErrors = handleSetResponse([setEmailResponse]);
if (emailIdUpdated.isEmpty) {
throw SetMethodException(mapErrors);
} }
} }
@@ -293,7 +293,7 @@ class EmailRepositoryImpl extends EmailRepository {
} }
@override @override
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId) {
return emailDataSource[DataSourceType.network]!.unsubscribeMail(session, accountId, emailId); return emailDataSource[DataSourceType.network]!.unsubscribeMail(session, accountId, emailId);
} }
@@ -144,7 +144,7 @@ abstract class EmailRepository {
TransformConfiguration configuration TransformConfiguration configuration
); );
Future<Email> unsubscribeMail(Session session, AccountId accountId, EmailId emailId); Future<void> unsubscribeMail(Session session, AccountId accountId, EmailId emailId);
Future<EmailRecoveryAction> restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest); Future<EmailRecoveryAction> restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest);
@@ -1,24 +1,17 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart'; import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
class UnsubscribeEmailLoading extends LoadingState {} class UnsubscribeEmailLoading extends LoadingState {}
class UnsubscribeEmailSuccess extends UIActionState { class UnsubscribeEmailSuccess extends UIActionState {
final Email newEmail;
UnsubscribeEmailSuccess( UnsubscribeEmailSuccess(
this.newEmail,
{ {
jmap.State? currentEmailState, jmap.State? currentEmailState,
jmap.State? currentMailboxState, jmap.State? currentMailboxState,
} }
) : super(currentEmailState, currentMailboxState); ) : super(currentEmailState, currentMailboxState);
@override
List<Object?> get props => [newEmail, ...super.props];
} }
class UnsubscribeEmailFailure extends FeatureFailure { class UnsubscribeEmailFailure extends FeatureFailure {
@@ -16,8 +16,8 @@ class UnsubscribeEmailInteractor {
try { try {
yield Right(UnsubscribeEmailLoading()); yield Right(UnsubscribeEmailLoading());
final currentEmailState = await emailRepository.getEmailState(session, accountId); final currentEmailState = await emailRepository.getEmailState(session, accountId);
final newEmail = await emailRepository.unsubscribeMail(session, accountId, emailId); await emailRepository.unsubscribeMail(session, accountId, emailId);
yield Right(UnsubscribeEmailSuccess(newEmail, currentEmailState: currentEmailState)); yield Right(UnsubscribeEmailSuccess(currentEmailState: currentEmailState));
} catch (e) { } catch (e) {
yield Left(UnsubscribeEmailFailure(exception: e)); yield Left(UnsubscribeEmailFailure(exception: e));
} }
@@ -401,7 +401,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
} else if (success is DeleteSendingEmailSuccess) { } else if (success is DeleteSendingEmailSuccess) {
getAllSendingEmails(); getAllSendingEmails();
} else if (success is UnsubscribeEmailSuccess) { } else if (success is UnsubscribeEmailSuccess) {
_handleUnsubscribeMailSuccess(success.newEmail); _handleUnsubscribeMailSuccess();
} else if (success is RestoreDeletedMessageSuccess) { } else if (success is RestoreDeletedMessageSuccess) {
dispatchMailboxUIAction(RefreshChangeMailboxAction(success.currentMailboxState)); dispatchMailboxUIAction(RefreshChangeMailboxAction(success.currentMailboxState));
_handleRestoreDeletedMessageSuccess(success.emailRecoveryAction.id!); _handleRestoreDeletedMessageSuccess(success.emailRecoveryAction.id!);
@@ -2599,13 +2599,16 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
} }
} }
void _handleUnsubscribeMailSuccess(Email email) { void _handleUnsubscribeMailSuccess() {
if (currentContext != null && currentOverlayContext != null) { if (currentContext != null && currentOverlayContext != null) {
appToast.showToastSuccessMessage( appToast.showToastSuccessMessage(
currentOverlayContext!, currentOverlayContext!,
AppLocalizations.of(currentContext!).unsubscribedFromThisMailingList); AppLocalizations.of(currentContext!).unsubscribedFromThisMailingList);
} }
setSelectedEmail(email.toPresentationEmail()); final newEmail = selectedEmail.value?.updateKeywords({
KeyWordIdentifierExtension.unsubscribeMail: true,
});
setSelectedEmail(newEmail);
} }
void _replaceBrowserHistory({Uri? uri}) { void _replaceBrowserHistory({Uri? uri}) {