TF-1074 Handle go to path /session

This commit is contained in:
dab246
2022-10-25 15:11:51 +07:00
committed by Dat H. Pham
parent 0ee990262f
commit 079bd404c2
12 changed files with 313 additions and 346 deletions
@@ -1,5 +1,4 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
@@ -10,6 +9,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/mark_star_action.dart';
import 'package:model/email/presentation_email.dart';
@@ -37,9 +37,9 @@ mixin EmailActionController on ViewAsDialogActionMixin {
void editEmail(PresentationEmail presentationEmail) {
final arguments = ComposerArguments(
emailActionType: EmailActionType.edit,
presentationEmail: presentationEmail,
mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role);
emailActionType: EmailActionType.edit,
presentationEmail: presentationEmail,
mailboxRole: mailboxDashBoardController.selectedMailbox.value?.role);
mailboxDashBoardController.goToComposer(arguments);
}
@@ -56,11 +56,11 @@ mixin EmailActionController on ViewAsDialogActionMixin {
if (currentMailbox != null && accountId != null && trashMailboxId != null) {
_moveToTrashAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
trashMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash)
{currentMailbox.id: [email.id]},
trashMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash)
);
}
}
@@ -76,11 +76,11 @@ mixin EmailActionController on ViewAsDialogActionMixin {
if (currentMailbox != null && accountId != null && spamMailboxId != null) {
moveToSpamAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
spamMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam)
{currentMailbox.id: [email.id]},
spamMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam)
);
}
}
@@ -92,11 +92,11 @@ mixin EmailActionController on ViewAsDialogActionMixin {
if (inboxMailboxId != null && accountId != null && spamMailboxId != null) {
moveToSpamAction(accountId, MoveToMailboxRequest(
{spamMailboxId: [email.id]},
inboxMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.unSpam)
{spamMailboxId: [email.id]},
inboxMailboxId,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.unSpam)
);
}
}
@@ -114,85 +114,69 @@ mixin EmailActionController on ViewAsDialogActionMixin {
if (BuildUtils.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
if (mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
email,
currentMailbox,
destinationMailbox);
});
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
AppRoutes.destinationPicker,
arguments: arguments);
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox.isTrash) {
moveToSpamAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
moveToSpamAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam));
} else {
_moveToMailboxAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}
}
_dispatchMoveToAction(
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
}
}
}
void _dispatchMoveToAction(
BuildContext context,
AccountId accountId,
PresentationEmail emailSelected,
PresentationMailbox currentMailbox,
PresentationMailbox destinationMailbox
BuildContext context,
AccountId accountId,
Session session,
PresentationEmail emailSelected,
PresentationMailbox currentMailbox,
PresentationMailbox destinationMailbox
) {
if (destinationMailbox.isTrash) {
moveToSpamAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
destinationMailbox.id,
MoveAction.moving,
EmailActionType.moveToTrash));
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
moveToSpamAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
destinationMailbox.id,
MoveAction.moving,
EmailActionType.moveToSpam));
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToSpam));
} else {
_moveToMailboxAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
destinationMailbox.id,
MoveAction.moving,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}
}
@@ -207,31 +191,31 @@ mixin EmailActionController on ViewAsDialogActionMixin {
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
..onConfirmAction(
DeleteActionType.single.getConfirmActionName(context),
() => _deleteEmailPermanentlyAction(context, email)))
() => _deleteEmailPermanentlyAction(context, email)))
.show();
} else {
showDialog(
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_delete_email_permanently'))
..title(DeleteActionType.single.getTitleDialog(context))
..content(DeleteActionType.single.getContentDialog(context))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(
const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(
DeleteActionType.single.getConfirmActionName(context),
() => _deleteEmailPermanentlyAction(context, email))
..onCancelButtonAction(
AppLocalizations.of(context).cancel,
() => popBack()))
.build()));
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_delete_email_permanently'))
..title(DeleteActionType.single.getTitleDialog(context))
..content(DeleteActionType.single.getContentDialog(context))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(
const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(
DeleteActionType.single.getConfirmActionName(context),
() => _deleteEmailPermanentlyAction(context, email))
..onCancelButtonAction(
AppLocalizations.of(context).cancel,
() => popBack()))
.build()));
}
}
@@ -257,14 +241,14 @@ mixin EmailActionController on ViewAsDialogActionMixin {
}
void moveSelectedMultipleEmailToMailbox(
BuildContext context,
List<PresentationEmail> listEmails,
PresentationMailbox mailboxCurrent
BuildContext context,
List<PresentationEmail> listEmails,
PresentationMailbox mailboxCurrent
) {
mailboxDashBoardController.moveSelectedMultipleEmailToMailbox(
context,
listEmails,
mailboxCurrent);
context,
listEmails,
mailboxCurrent);
}
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmails, PresentationMailbox mailboxCurrent) {
@@ -280,19 +264,19 @@ mixin EmailActionController on ViewAsDialogActionMixin {
}
void deleteSelectionEmailsPermanently(
BuildContext context,
DeleteActionType actionType,
{
List<PresentationEmail>? listEmails,
PresentationMailbox? mailboxCurrent,
Function? onCancelSelectionEmail,
}
BuildContext context,
DeleteActionType actionType,
{
List<PresentationEmail>? listEmails,
PresentationMailbox? mailboxCurrent,
Function? onCancelSelectionEmail,
}
) {
mailboxDashBoardController.deleteSelectionEmailsPermanently(
context,
actionType,
listEmails: listEmails,
mailboxCurrent: mailboxCurrent,
onCancelSelectionEmail: onCancelSelectionEmail);
context,
actionType,
listEmails: listEmails,
mailboxCurrent: mailboxCurrent,
onCancelSelectionEmail: onCancelSelectionEmail);
}
}
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.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/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
@@ -647,45 +648,26 @@ class ThreadController extends BaseController {
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
_dispatchMoveToMultipleAction(
_accountId!,
listEmail.listEmailIds,
currentMailbox,
destinationMailbox);
if (mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToMultipleAction(
_accountId!,
mailboxDashBoardController.sessionCurrent!,
listEmail.listEmailIds,
currentMailbox,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox.isTrash) {
_moveSelectedEmailMultipleToTrashAction(_accountId!, MoveToMailboxRequest(
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
_moveSelectedEmailMultipleToSpamAction(_accountId!, MoveToMailboxRequest(
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam));
} else {
_moveSelectedEmailMultipleToMailboxAction(_accountId!, MoveToMailboxRequest(
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}
}
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToMultipleAction(
_accountId!,
mailboxDashBoardController.sessionCurrent!,
listEmail.listEmailIds,
currentMailbox,
destinationMailbox);
@@ -696,30 +678,31 @@ class ThreadController extends BaseController {
void _dispatchMoveToMultipleAction(
AccountId accountId,
Session session,
List<EmailId> listEmailIds,
PresentationMailbox currentMailbox,
PresentationMailbox destinationMailbox
) {
if (destinationMailbox.isTrash) {
_moveSelectedEmailMultipleToTrashAction(accountId, MoveToMailboxRequest(
listEmailIds,
currentMailbox.id,
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
_moveSelectedEmailMultipleToSpamAction(accountId, MoveToMailboxRequest(
listEmailIds,
currentMailbox.id,
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToSpam));
} else {
_moveSelectedEmailMultipleToMailboxAction(accountId, MoveToMailboxRequest(
listEmailIds,
currentMailbox.id,
{currentMailbox.id: listEmailIds},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}
@@ -1138,47 +1121,28 @@ class ThreadController extends BaseController {
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
_dispatchMoveToAction(
context,
accountId,
email,
currentMailbox,
destinationMailbox);
if (mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox.isTrash) {
_moveToTrashAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
_moveToSpamAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToSpam));
} else {
_moveToMailboxAction(accountId, MoveToMailboxRequest(
{currentMailbox.id: [email.id]},
destinationMailbox.id,
MoveAction.moving,
mailboxDashBoardController.sessionCurrent!,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}
}
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
@@ -1190,30 +1154,31 @@ class ThreadController extends BaseController {
void _dispatchMoveToAction(
BuildContext context,
AccountId accountId,
Session session,
PresentationEmail emailSelected,
PresentationMailbox currentMailbox,
PresentationMailbox destinationMailbox
) {
if (destinationMailbox.isTrash) {
_moveToTrashAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToTrash));
} else if (destinationMailbox.isSpam) {
_moveToSpamAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToSpam));
} else {
_moveToMailboxAction(accountId, MoveToMailboxRequest(
[emailSelected.id],
currentMailbox.id,
{currentMailbox.id: [emailSelected.id]},
destinationMailbox.id,
MoveAction.moving,
session,
EmailActionType.moveToMailbox,
destinationPath: destinationMailbox.mailboxPath));
}