TF-3189 new option to enable/disable subaddressing for a personal folder

This commit is contained in:
Florent Azavant
2024-10-21 16:29:26 +02:00
committed by Dat H. Pham
parent f8f248fc3c
commit 89d80fe142
36 changed files with 455 additions and 4 deletions
@@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_i
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subaddressing_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
@@ -57,6 +58,7 @@ class MailboxBindings extends BaseBindings {
Get.find<MoveMailboxInteractor>(),
Get.find<SubscribeMailboxInteractor>(),
Get.find<SubscribeMultipleMailboxInteractor>(),
Get.find<SubaddressingInteractor>(),
Get.find<CreateDefaultMailboxInteractor>(),
Get.find<TreeBuilder>(),
Get.find<VerifyNameInteractor>(),
@@ -107,6 +109,7 @@ class MailboxBindings extends BaseBindings {
Get.lazyPut(() => MoveMailboxInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => SubscribeMailboxInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => SubscribeMultipleMailboxInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => SubaddressingInteractor(Get.find<MailboxRepository>()));
Get.lazyPut(() => CreateDefaultMailboxInteractor(Get.find<MailboxRepository>()));
}
@@ -31,11 +31,14 @@ import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.d
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart';
import 'package:tmail_ui_user/features/mailbox/domain/exceptions/set_mailbox_name_exception.dart';
import 'package:tmail_ui_user/features/mailbox/domain/exceptions/null_session_or_accountid_exception.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subaddressing_action.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/rename_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_right_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_multiple_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/subscribe_request.dart';
@@ -47,6 +50,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.d
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_all_mailboxes_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/subaddressing_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_default_mailbox_interactor.dart';
@@ -56,6 +60,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_i
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subaddressing_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
@@ -101,6 +106,7 @@ class MailboxController extends BaseMailboxController
final MoveMailboxInteractor _moveMailboxInteractor;
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
final SubscribeMultipleMailboxInteractor _subscribeMultipleMailboxInteractor;
final SubaddressingInteractor _subaddressingInteractor;
final CreateDefaultMailboxInteractor _createDefaultMailboxInteractor;
IOSSharingManager? _iosSharingManager;
@@ -131,6 +137,7 @@ class MailboxController extends BaseMailboxController
this._moveMailboxInteractor,
this._subscribeMailboxInteractor,
this._subscribeMultipleMailboxInteractor,
this._subaddressingInteractor,
this._createDefaultMailboxInteractor,
TreeBuilder treeBuilder,
VerifyNameInteractor verifyNameInteractor,
@@ -190,6 +197,8 @@ class MailboxController extends BaseMailboxController
_handleUnsubscribeMultipleMailboxAllSuccess(success);
} else if (success is SubscribeMultipleMailboxHasSomeSuccess) {
_handleUnsubscribeMultipleMailboxHasSomeSuccess(success);
} else if (success is SubaddressingSuccess) {
_handleSubaddressingSuccess(success);
}
}
@@ -202,6 +211,8 @@ class MailboxController extends BaseMailboxController
_renameMailboxFailure(failure);
} else if (failure is DeleteMultipleMailboxFailure) {
_deleteMailboxFailure(failure);
} else if (failure is SubaddressingFailure) {
_handleSubaddressingFailure(failure);
}
}
@@ -1244,6 +1255,10 @@ class MailboxController extends BaseMailboxController
case MailboxActions.disableMailbox:
_unsubscribeMailboxAction(mailbox.id);
break;
case MailboxActions.allowSubaddressing:
case MailboxActions.disallowSubaddressing:
_handleSubaddressingAction(mailbox.id, mailbox.rights, actions);
break;
case MailboxActions.emptyTrash:
emptyTrashAction(context, mailbox, mailboxDashBoardController);
break;
@@ -1495,6 +1510,41 @@ class MailboxController extends BaseMailboxController
}
}
void _handleSubaddressingAction(MailboxId mailboxId, Map<String, List<String>?>? currentRights, MailboxActions subaddressingAction) {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (session != null && accountId != null) {
final allowSubaddressingRequest = MailboxRightRequest(
mailboxId,
currentRights,
subaddressingAction == MailboxActions.allowSubaddressing ? MailboxSubaddressingAction.allow : MailboxSubaddressingAction.disallow
);
consumeState(_subaddressingInteractor.execute(session, accountId, allowSubaddressingRequest));
} else {
_handleSubaddressingFailure(SubaddressingFailure.withException(NullSessionOrAccountIdException()));
}
popBack();
}
void _handleSubaddressingFailure(SubaddressingFailure failure) {
if (currentOverlayContext != null && currentContext != null) {
final messageError = AppLocalizations.of(currentContext!).toastMessageSubaddressingFailure;
appToast.showToastErrorMessage(currentOverlayContext!, messageError);
}
}
void _handleSubaddressingSuccess(SubaddressingSuccess success) {
appToast.showToastSuccessMessage(
currentOverlayContext!,
success.subaddressingAction == MailboxSubaddressingAction.allow
? AppLocalizations.of(currentContext!).toastMessageAllowSubaddressingSuccess
: AppLocalizations.of(currentContext!).toastMessageDisallowSubaddressingSuccess,
);
}
void _mailboxListScrollControllerListener() {
_handleScrollTop();
_handleScrollBottom();
@@ -62,6 +62,10 @@ mixin MailboxWidgetMixin {
MailboxActions.markAsRead,
MailboxActions.move,
MailboxActions.rename,
if (mailbox.isSubaddressingAllowed)
MailboxActions.disallowSubaddressing
else
MailboxActions.allowSubaddressing,
if (mailbox.isSubscribedMailbox)
MailboxActions.disableMailbox
else
@@ -24,7 +24,9 @@ enum MailboxActions {
emptySpam,
newSubfolder,
confirmMailSpam,
recoverDeletedMessages;
recoverDeletedMessages,
allowSubaddressing,
disallowSubaddressing;
}
extension MailboxActionsExtension on MailboxActions {
@@ -74,6 +76,10 @@ extension MailboxActionsExtension on MailboxActions {
return AppLocalizations.of(context).confirmAllEmailHereAreSpam;
case MailboxActions.recoverDeletedMessages:
return AppLocalizations.of(context).recoverDeletedMessages;
case MailboxActions.allowSubaddressing:
return AppLocalizations.of(context).allowSubaddressing;
case MailboxActions.disallowSubaddressing:
return AppLocalizations.of(context).disallowSubaddressing;
default:
return '';
}
@@ -109,6 +115,10 @@ extension MailboxActionsExtension on MailboxActions {
return imagePaths.icMarkAsRead;
case MailboxActions.recoverDeletedMessages:
return imagePaths.icRecoverDeletedMessages;
case MailboxActions.allowSubaddressing:
return imagePaths.icSubaddressingAllow;
case MailboxActions.disallowSubaddressing:
return imagePaths.icSubaddressingDisallow;
default:
return '';
}
@@ -183,6 +193,8 @@ extension MailboxActionsExtension on MailboxActions {
case MailboxActions.emptySpam:
case MailboxActions.confirmMailSpam:
case MailboxActions.recoverDeletedMessages:
case MailboxActions.allowSubaddressing:
case MailboxActions.disallowSubaddressing:
return ContextMenuItemState.activated;
case MailboxActions.markAsRead:
return mailbox.countUnReadEmailsAsString.isNotEmpty