TF-1718 Implement unsubscribeMail on Jmap server

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 0f61a97aab513cda75c65e3c92ebcf8f6290b6ec)
This commit is contained in:
dab246
2023-11-16 12:48:38 +07:00
committed by Dat Vu
parent 4d8c7dc52e
commit a6ecaf321d
18 changed files with 169 additions and 36 deletions
@@ -49,11 +49,13 @@ import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_s
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/store_sending_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_emails_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/unsubscribe_email_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
@@ -174,6 +176,7 @@ class MailboxDashBoardController extends ReloadableController {
final SaveEmailAsDraftsInteractor _saveEmailAsDraftsInteractor;
final UpdateEmailDraftsInteractor _updateEmailDraftsInteractor;
final DeleteSendingEmailInteractor _deleteSendingEmailInteractor;
final UnsubscribeEmailInteractor _unsubscribeEmailInteractor;
GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
@@ -251,6 +254,7 @@ class MailboxDashBoardController extends ReloadableController {
this._saveEmailAsDraftsInteractor,
this._updateEmailDraftsInteractor,
this._deleteSendingEmailInteractor,
this._unsubscribeEmailInteractor,
);
@override
@@ -343,6 +347,8 @@ class MailboxDashBoardController extends ReloadableController {
_markAsReadEmailSuccess(success);
} else if (success is DeleteSendingEmailSuccess) {
getAllSendingEmails();
} else if (success is UnsubscribeEmailSuccess) {
_handleUnsubscribeMailSuccess(success.newEmail);
}
}
@@ -2123,14 +2129,14 @@ class MailboxDashBoardController extends ReloadableController {
void _handleSendEmailSuccess(SendEmailSuccess success) {
if (PlatformInfo.isIOS &&
success.storedSendingId != null &&
success.emailRequest.storedSendingId != null &&
accountId.value != null &&
sessionCurrent != null
) {
consumeState(_deleteSendingEmailInteractor.execute(
accountId.value!,
sessionCurrent!.username,
success.storedSendingId!
success.emailRequest.storedSendingId!
));
}
if (currentOverlayContext != null && currentContext != null) {
@@ -2140,6 +2146,11 @@ class MailboxDashBoardController extends ReloadableController {
leadingSVGIcon: imagePaths.icSendSuccessToast
);
}
if (success.emailRequest.emailActionType == EmailActionType.composeFromUnsubscribeMailtoLink &&
success.emailRequest.previousEmailId != null) {
unsubscribeMail(success.emailRequest.previousEmailId!);
}
}
void _updateSendingStateWhenSendEmailFailureOnIOS(SendEmailFailure failure) {
@@ -2192,6 +2203,27 @@ class MailboxDashBoardController extends ReloadableController {
dispatchAction(SearchEmailByFromFieldsAction(emailAddress));
}
void unsubscribeMail(EmailId emailId) {
if (accountId.value != null && sessionCurrent != null) {
consumeState(
_unsubscribeEmailInteractor.execute(
sessionCurrent!,
accountId.value!,
emailId
)
);
}
}
void _handleUnsubscribeMailSuccess(Email email) {
if (currentContext != null && currentOverlayContext != null) {
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).unsubscribedFromThisMailingList);
}
setSelectedEmail(email.toPresentationEmail());
}
@override
void onClose() {
_emailReceiveManager.closeEmailReceiveManagerStream();