TF-153 Combine moveToMailbox and moveToTrash to moveToMailbox using EmailActionType object
This commit is contained in:
@@ -3,8 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
|
||||
abstract class EmailDataSource {
|
||||
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
|
||||
@@ -35,9 +34,7 @@ abstract class EmailDataSource {
|
||||
AccountRequest accountRequest,
|
||||
);
|
||||
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
|
||||
|
||||
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest);
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest);
|
||||
|
||||
Future<List<Email>> markAsStar(
|
||||
AccountId accountId,
|
||||
|
||||
@@ -5,8 +5,7 @@ import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
|
||||
class EmailDataSourceImpl extends EmailDataSource {
|
||||
|
||||
@@ -71,7 +70,7 @@ class EmailDataSourceImpl extends EmailDataSource {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
return Future.sync(() async {
|
||||
return await emailAPI.moveToMailbox(accountId, moveRequest);
|
||||
}).catchError((error) {
|
||||
@@ -124,15 +123,6 @@ class EmailDataSourceImpl extends EmailDataSource {
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
|
||||
return Future.sync(() async {
|
||||
return await emailAPI.moveToTrash(accountId, moveRequest);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
|
||||
return Future.sync(() async {
|
||||
|
||||
@@ -26,8 +26,7 @@ import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submis
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
|
||||
class EmailAPI {
|
||||
|
||||
@@ -216,7 +215,7 @@ class EmailAPI {
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) async {
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) async {
|
||||
final setEmailMethod = SetEmailMethod(accountId)
|
||||
..addUpdates(moveRequest.emailIds
|
||||
.generateMapUpdateObjectMoveToMailbox(moveRequest.currentMailboxId, moveRequest.destinationMailboxId));
|
||||
@@ -354,34 +353,6 @@ class EmailAPI {
|
||||
});
|
||||
}
|
||||
|
||||
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) async {
|
||||
final setEmailMethod = SetEmailMethod(accountId)
|
||||
..addUpdates(moveRequest.emailIds
|
||||
.generateMapUpdateObjectMoveToMailbox(moveRequest.currentMailboxId, moveRequest.trashMailboxId));
|
||||
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
|
||||
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
|
||||
|
||||
final response = await (requestBuilder
|
||||
..usings(setEmailMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final setEmailResponse = response.parse<SetEmailResponse>(
|
||||
setEmailInvocation.methodCallId,
|
||||
SetEmailResponse.deserialize);
|
||||
|
||||
return Future.sync(() async {
|
||||
final mapUpdated = setEmailResponse!.updated!;
|
||||
return moveRequest.emailIds
|
||||
.where((emailId) => mapUpdated.containsKey(emailId.id))
|
||||
.toList();
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) async {
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
|
||||
final setEmailMethod = SetEmailMethod(accountId)
|
||||
|
||||
@@ -6,8 +6,7 @@ import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
|
||||
class EmailRepositoryImpl extends EmailRepository {
|
||||
@@ -59,7 +58,7 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
return emailDataSource.moveToMailbox(accountId, moveRequest);
|
||||
}
|
||||
|
||||
@@ -110,11 +109,6 @@ class EmailRepositoryImpl extends EmailRepository {
|
||||
return emailDataSource.downloadAttachmentForWeb(attachment, accountId, baseDownloadUrl, accountRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
|
||||
return emailDataSource.moveToTrash(accountId, moveRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
|
||||
return emailDataSource.deleteMultipleEmailsPermanently(accountId, emailIds);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
enum MoveAction {
|
||||
moving,
|
||||
undo
|
||||
}
|
||||
+7
-5
@@ -3,23 +3,24 @@ import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
|
||||
class MoveRequest with EquatableMixin {
|
||||
class MoveToMailboxRequest with EquatableMixin {
|
||||
|
||||
final List<EmailId> emailIds;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
final String? destinationPath;
|
||||
|
||||
MoveRequest(
|
||||
MoveToMailboxRequest(
|
||||
this.emailIds,
|
||||
this.currentMailboxId,
|
||||
this.destinationMailboxId,
|
||||
this.moveAction,
|
||||
{
|
||||
this.destinationPath,
|
||||
}
|
||||
this.emailActionType,
|
||||
{this.destinationPath}
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -28,6 +29,7 @@ class MoveRequest with EquatableMixin {
|
||||
currentMailboxId,
|
||||
destinationMailboxId,
|
||||
moveAction,
|
||||
emailActionType,
|
||||
destinationPath,
|
||||
];
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
class MoveToTrashRequest with EquatableMixin {
|
||||
|
||||
final List<EmailId> emailIds;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId trashMailboxId;
|
||||
final MoveAction moveAction;
|
||||
|
||||
MoveToTrashRequest(
|
||||
this.emailIds,
|
||||
this.currentMailboxId,
|
||||
this.trashMailboxId,
|
||||
this.moveAction,
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailIds,
|
||||
currentMailboxId,
|
||||
trashMailboxId,
|
||||
moveAction,
|
||||
];
|
||||
}
|
||||
@@ -3,8 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
|
||||
abstract class EmailRepository {
|
||||
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
|
||||
@@ -35,9 +34,7 @@ abstract class EmailRepository {
|
||||
AccountRequest accountRequest,
|
||||
);
|
||||
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
|
||||
|
||||
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest);
|
||||
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest);
|
||||
|
||||
Future<List<Email>> markAsStar(
|
||||
AccountId accountId,
|
||||
|
||||
@@ -2,12 +2,14 @@ import 'package:core/core.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
|
||||
class MoveToMailboxSuccess extends UIState {
|
||||
final EmailId emailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId destinationMailboxId;
|
||||
final MoveAction moveAction;
|
||||
final EmailActionType emailActionType;
|
||||
final String? destinationPath;
|
||||
|
||||
MoveToMailboxSuccess(
|
||||
@@ -15,7 +17,9 @@ class MoveToMailboxSuccess extends UIState {
|
||||
this.currentMailboxId,
|
||||
this.destinationMailboxId,
|
||||
this.moveAction,
|
||||
this.destinationPath);
|
||||
this.emailActionType,
|
||||
{this.destinationPath}
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
@@ -23,14 +27,17 @@ class MoveToMailboxSuccess extends UIState {
|
||||
currentMailboxId,
|
||||
destinationMailboxId,
|
||||
moveAction,
|
||||
destinationPath];
|
||||
emailActionType,
|
||||
destinationPath
|
||||
];
|
||||
}
|
||||
|
||||
class MoveToMailboxFailure extends FeatureFailure {
|
||||
final EmailActionType emailActionType;
|
||||
final exception;
|
||||
|
||||
MoveToMailboxFailure(this.exception);
|
||||
MoveToMailboxFailure(this.emailActionType, this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
List<Object> get props => [emailActionType, exception];
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
class MoveToTrashSuccess extends UIState {
|
||||
final EmailId emailId;
|
||||
final MailboxId currentMailboxId;
|
||||
final MailboxId trashMailboxId;
|
||||
final MoveAction moveAction;
|
||||
|
||||
MoveToTrashSuccess(
|
||||
this.emailId,
|
||||
this.currentMailboxId,
|
||||
this.trashMailboxId,
|
||||
this.moveAction
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
emailId,
|
||||
currentMailboxId,
|
||||
trashMailboxId,
|
||||
moveAction
|
||||
];
|
||||
}
|
||||
|
||||
class MoveToTrashFailure extends FeatureFailure {
|
||||
final exception;
|
||||
|
||||
MoveToTrashFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||
|
||||
@@ -10,7 +10,7 @@ class MoveToMailboxInteractor {
|
||||
|
||||
MoveToMailboxInteractor(this.emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveRequest moveRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveToMailboxRequest moveRequest) async* {
|
||||
try {
|
||||
final result = await emailRepository.moveToMailbox(accountId, moveRequest);
|
||||
if (result.isNotEmpty) {
|
||||
@@ -19,12 +19,13 @@ class MoveToMailboxInteractor {
|
||||
moveRequest.currentMailboxId,
|
||||
moveRequest.destinationMailboxId,
|
||||
moveRequest.moveAction,
|
||||
moveRequest.destinationPath));
|
||||
moveRequest.emailActionType,
|
||||
destinationPath: moveRequest.destinationPath));
|
||||
} else {
|
||||
yield Left(MoveToMailboxFailure(null));
|
||||
yield Left(MoveToMailboxFailure(moveRequest.emailActionType, null));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(MoveToMailboxFailure(e));
|
||||
yield Left(MoveToMailboxFailure(moveRequest.emailActionType, e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_trash_state.dart';
|
||||
|
||||
class MoveToTrashInteractor {
|
||||
final EmailRepository emailRepository;
|
||||
|
||||
MoveToTrashInteractor(this.emailRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, MoveToTrashRequest moveRequest) async* {
|
||||
try {
|
||||
final result = await emailRepository.moveToTrash(accountId, moveRequest);
|
||||
if (result.isNotEmpty) {
|
||||
yield Right(MoveToTrashSuccess(
|
||||
result.first,
|
||||
moveRequest.currentMailboxId,
|
||||
moveRequest.trashMailboxId,
|
||||
moveRequest.moveAction));
|
||||
} else {
|
||||
yield Left(MoveToTrashFailure(null));
|
||||
}
|
||||
} catch (e) {
|
||||
yield Left(MoveToTrashFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_i
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_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/mark_as_star_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_trash_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/email_controller.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
||||
@@ -76,7 +75,6 @@ class EmailBindings extends BaseBindings {
|
||||
Get.find<EmailRepository>(),
|
||||
Get.find<CredentialRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => MoveToTrashInteractor(Get.find<EmailRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -15,8 +15,8 @@ import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/download_attachments_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/export_attachment_state.dart';
|
||||
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -91,7 +92,7 @@ class EmailController extends BaseController {
|
||||
_resetToOriginalValue();
|
||||
if (presentationEmail != null) {
|
||||
_getEmailContentAction(presentationEmail.id);
|
||||
if (presentationEmail.isUnReadEmail()) {
|
||||
if (!presentationEmail.hasRead) {
|
||||
markAsEmailRead(presentationEmail, ReadActions.markAsRead);
|
||||
}
|
||||
}
|
||||
@@ -331,7 +332,7 @@ class EmailController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
void moveToMailboxAction(BuildContext context, PresentationEmail email) async {
|
||||
void moveToMailbox(BuildContext context, PresentationEmail email) async {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
|
||||
@@ -343,75 +344,73 @@ class EmailController extends BaseController {
|
||||
|
||||
if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {
|
||||
if (destinationMailbox.role == PresentationMailbox.roleTrash) {
|
||||
_moveToTrash(context, accountId, MoveToTrashRequest(
|
||||
_moveToTrashAction(context, accountId, MoveToMailboxRequest(
|
||||
[email.id],
|
||||
currentMailbox.id,
|
||||
destinationMailbox.id,
|
||||
MoveAction.moveToTrash));
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash));
|
||||
} else {
|
||||
_moveToMailbox(accountId, MoveRequest(
|
||||
_moveToMailbox(accountId, MoveToMailboxRequest(
|
||||
[email.id],
|
||||
currentMailbox.id,
|
||||
destinationMailbox.id,
|
||||
MoveAction.moveTo,
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToMailbox,
|
||||
destinationPath: destinationMailbox.mailboxPath));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
|
||||
void _moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
consumeState(_moveToMailboxInteractor.execute(accountId, moveRequest));
|
||||
}
|
||||
|
||||
void _moveToMailboxSuccess(Success success) {
|
||||
void _moveToMailboxSuccess(MoveToMailboxSuccess success) {
|
||||
mailboxDashBoardController.dispatchState(Right(success));
|
||||
|
||||
if (success is MoveToMailboxSuccess
|
||||
&& success.moveAction == MoveAction.moveTo
|
||||
&& currentContext != null && currentOverlayContext != null) {
|
||||
if (success.moveAction == MoveAction.moving && currentContext != null && currentOverlayContext != null) {
|
||||
_appToast.showToastWithAction(
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).moved_to_mailbox(success.destinationPath ?? ''),
|
||||
AppLocalizations.of(currentContext!).undo_action,
|
||||
() {
|
||||
final newMoveRequest = MoveRequest(
|
||||
[success.emailId],
|
||||
success.destinationMailboxId,
|
||||
success.currentMailboxId,
|
||||
MoveAction.undo);
|
||||
_undoMoveToMailbox(newMoveRequest);
|
||||
success.emailActionType.getToastMessageMoveToMailboxSuccess(currentContext!, destinationPath: success.destinationPath),
|
||||
AppLocalizations.of(currentContext!).undo_action, () {
|
||||
_undoMoveToMailbox(MoveToMailboxRequest(
|
||||
[success.emailId],
|
||||
success.destinationMailboxId,
|
||||
success.currentMailboxId,
|
||||
MoveAction.undo,
|
||||
success.emailActionType));
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _undoMoveToMailbox(MoveRequest newMoveRequest) {
|
||||
void _undoMoveToMailbox(MoveToMailboxRequest newMoveRequest) {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
|
||||
if (accountId != null) {
|
||||
_moveToMailbox(accountId, newMoveRequest);
|
||||
}
|
||||
}
|
||||
|
||||
void moveToTrashAction(BuildContext context, PresentationEmail email) async {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
void moveToTrash(BuildContext context, PresentationEmail email) async {
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final trashMailboxId = mailboxDashBoardController.mapDefaultMailboxId[PresentationMailbox.roleTrash];
|
||||
final trashMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleTrash);
|
||||
|
||||
if (currentMailbox != null && accountId != null && trashMailboxId != null) {
|
||||
_moveToTrash(context, accountId, MoveToTrashRequest(
|
||||
if (accountId != null && currentMailbox != null && trashMailboxId != null) {
|
||||
_moveToTrashAction(context, accountId, MoveToMailboxRequest(
|
||||
[email.id],
|
||||
currentMailbox.id,
|
||||
currentMailbox!.id,
|
||||
trashMailboxId,
|
||||
MoveAction.moveToTrash)
|
||||
MoveAction.moving,
|
||||
EmailActionType.moveToTrash)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _moveToTrash(BuildContext context, AccountId accountId, MoveToTrashRequest moveRequest) {
|
||||
void _moveToTrashAction(BuildContext context, AccountId accountId, MoveToMailboxRequest moveRequest) {
|
||||
backToThreadView(context);
|
||||
mailboxDashBoardController.moveToTrash(accountId, moveRequest);
|
||||
mailboxDashBoardController.moveToMailbox(accountId, moveRequest);
|
||||
}
|
||||
|
||||
void markAsStarEmail(PresentationEmail presentationEmail, MarkStarAction markStarAction) async {
|
||||
@@ -435,17 +434,17 @@ class EmailController extends BaseController {
|
||||
popBack();
|
||||
markAsEmailRead(presentationEmail, ReadActions.markAsUnread);
|
||||
break;
|
||||
case EmailActionType.markAsStar:
|
||||
case EmailActionType.markAsStarred:
|
||||
markAsStarEmail(presentationEmail, MarkStarAction.markStar);
|
||||
break;
|
||||
case EmailActionType.markAsUnStar:
|
||||
case EmailActionType.unMarkAsStarred:
|
||||
markAsStarEmail(presentationEmail, MarkStarAction.unMarkStar);
|
||||
break;
|
||||
case EmailActionType.move:
|
||||
moveToMailboxAction(context, presentationEmail);
|
||||
case EmailActionType.moveToMailbox:
|
||||
moveToMailbox(context, presentationEmail);
|
||||
break;
|
||||
case EmailActionType.moveToTrash:
|
||||
moveToTrashAction(context, presentationEmail);
|
||||
moveToTrash(context, presentationEmail);
|
||||
break;
|
||||
case EmailActionType.deletePermanently:
|
||||
deleteEmailPermanently(context, presentationEmail);
|
||||
|
||||
@@ -122,23 +122,12 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
|
||||
Widget _buildAppBar(BuildContext context) {
|
||||
return Obx(() => Padding(
|
||||
padding: EdgeInsets.only(top: 6),
|
||||
child: (AppBarMailWidgetBuilder(
|
||||
context,
|
||||
imagePaths,
|
||||
responsiveUtils,
|
||||
emailController.currentEmail,
|
||||
emailController.currentMailbox)
|
||||
child: (AppBarMailWidgetBuilder(context, imagePaths, responsiveUtils, emailController.currentEmail, emailController.currentMailbox)
|
||||
..onBackActionClick(() => emailController.backToThreadView(context))
|
||||
..addOnEmailActionClick((email, action) => emailController.handleEmailAction(context, email, action))
|
||||
..addOnMoreActionClick((email, position) => responsiveUtils.isMobileDevice(context)
|
||||
? emailController.openMoreMenuEmailAction(
|
||||
context,
|
||||
_emailActionMoreActionTile(context, email),
|
||||
cancelButton: _buildCancelButton(context))
|
||||
: emailController.openMoreMenuEmailActionForTablet(
|
||||
context,
|
||||
position,
|
||||
_popupMenuEmailActionTile(context, email))))
|
||||
..addOnMoreActionClick((email, position) => responsiveUtils.isMobile(context)
|
||||
? emailController.openMoreMenuEmailAction(context, _emailActionMoreActionTile(context, email), cancelButton: _buildCancelButton(context))
|
||||
: emailController.openMoreMenuEmailActionForTablet(context, position, _popupMenuEmailActionTile(context, email))))
|
||||
.build()));
|
||||
}
|
||||
|
||||
@@ -554,7 +543,7 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
|
||||
|
||||
List<Widget> _emailActionMoreActionTile(BuildContext context, PresentationEmail email) {
|
||||
return <Widget>[
|
||||
_unreadEmailAction(context, email),
|
||||
_markAsEmailUnreadAction(context, email),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -567,9 +556,9 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
|
||||
);
|
||||
}
|
||||
|
||||
Widget _unreadEmailAction(BuildContext context, PresentationEmail email) {
|
||||
Widget _markAsEmailUnreadAction(BuildContext context, PresentationEmail email) {
|
||||
return (EmailActionCupertinoActionSheetActionBuilder(
|
||||
Key('email_action_unread_action'),
|
||||
Key('mark_as_unread_action'),
|
||||
SvgPicture.asset(imagePaths.icUnreadEmail, width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton),
|
||||
AppLocalizations.of(context).mark_as_unread,
|
||||
email,
|
||||
@@ -585,7 +574,7 @@ class EmailView extends GetView with UserSettingPopupMenuMixin, NetworkConnectio
|
||||
|
||||
List<PopupMenuEntry> _popupMenuEmailActionTile(BuildContext context, PresentationEmail email) {
|
||||
return [
|
||||
PopupMenuItem(padding: EdgeInsets.symmetric(horizontal: 8), child: _unreadEmailAction(context, email)),
|
||||
PopupMenuItem(padding: EdgeInsets.symmetric(horizontal: 8), child: _markAsEmailUnreadAction(context, email)),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -53,10 +53,8 @@ class AppBarMailWidgetBuilder {
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
if (_conditionShow(_context))
|
||||
_buildBackButton(),
|
||||
if (_conditionShow(_context))
|
||||
Expanded(child: _buildMailboxName()),
|
||||
if (_conditionShow(_context)) _buildBackButton(),
|
||||
if (_conditionShow(_context)) Expanded(child: _buildMailboxName()),
|
||||
if (_presentationEmail != null) _buildListOptionButton(),
|
||||
]
|
||||
)
|
||||
@@ -98,21 +96,12 @@ class AppBarMailWidgetBuilder {
|
||||
buildIconWeb(
|
||||
icon: SvgPicture.asset(_imagePaths.icMoveEmail, fit: BoxFit.fill),
|
||||
tooltip: AppLocalizations.of(_context).move_message,
|
||||
onTap: () {
|
||||
if (_presentationEmail != null) {
|
||||
_onEmailActionClick?.call(_presentationEmail!, EmailActionType.move);
|
||||
}
|
||||
}),
|
||||
onTap: () => _onEmailActionClick?.call(_presentationEmail!, EmailActionType.moveToMailbox)),
|
||||
buildIconWeb(
|
||||
icon: SvgPicture.asset((_presentationEmail != null && _presentationEmail!.isFlaggedEmail()) ? _imagePaths.icStar : _imagePaths.icUnStar, fit: BoxFit.fill),
|
||||
tooltip: (_presentationEmail != null && _presentationEmail!.isFlaggedEmail())
|
||||
? AppLocalizations.of(_context).mark_as_unstar
|
||||
: AppLocalizations.of(_context).mark_as_star,
|
||||
onTap: () {
|
||||
if (_presentationEmail != null) {
|
||||
_onEmailActionClick?.call(_presentationEmail!, _presentationEmail!.isFlaggedEmail() ? EmailActionType.markAsUnStar : EmailActionType.markAsStar);
|
||||
}
|
||||
}),
|
||||
icon: SvgPicture.asset(_presentationEmail!.hasStarred ? _imagePaths.icStar : _imagePaths.icUnStar, fit: BoxFit.fill),
|
||||
tooltip: _presentationEmail!.hasStarred ? AppLocalizations.of(_context).not_starred : AppLocalizations.of(_context).mark_as_starred,
|
||||
onTap: () => _onEmailActionClick?.call(_presentationEmail!,
|
||||
_presentationEmail!.hasStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred)),
|
||||
buildIconWeb(
|
||||
icon: SvgPicture.asset(_imagePaths.icDeleteEmail, fit: BoxFit.fill),
|
||||
tooltip: _currentMailbox?.role != PresentationMailbox.roleTrash
|
||||
|
||||
Reference in New Issue
Block a user