TF-2667 Move the creation of mailbox request id to the data layer

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2024-03-05 18:47:31 +07:00
committed by Dat H. Pham
parent 61687b60e0
commit 016b75aa51
13 changed files with 14 additions and 50 deletions
@@ -24,7 +24,6 @@ extension EmailRequestExtension on EmailRequest {
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId, identityId: identityId,
mailboxNameRequest: mailboxRequest?.newName, mailboxNameRequest: mailboxRequest?.newName,
creationIdRequest: mailboxRequest?.creationId,
sendingState: newState, sendingState: newState,
previousEmailId: previousEmailId previousEmailId: previousEmailId
); );
@@ -7,7 +7,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.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/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -387,7 +386,6 @@ class DestinationPickerController extends BaseMailboxController {
final nameMailbox = newNameMailbox.value; final nameMailbox = newNameMailbox.value;
if (nameMailbox != null && nameMailbox.isNotEmpty) { if (nameMailbox != null && nameMailbox.isNotEmpty) {
final generateCreateId = Id(uuid.v1());
final parentId = mailboxDestination.value == PresentationMailbox.unifiedMailbox final parentId = mailboxDestination.value == PresentationMailbox.unifiedMailbox
? null ? null
: mailboxDestination.value?.id; : mailboxDestination.value?.id;
@@ -396,7 +394,6 @@ class DestinationPickerController extends BaseMailboxController {
_session!, _session!,
accountId!, accountId!,
CreateNewMailboxRequest( CreateNewMailboxRequest(
generateCreateId,
MailboxName(nameMailbox), MailboxName(nameMailbox),
parentId: parentId)); parentId: parentId));
} }
@@ -113,7 +113,7 @@ class EmailAPI with HandleSetErrorMixin {
} }
} }
Future<bool> sendEmail( Future<void> sendEmail(
Session session, Session session,
AccountId accountId, AccountId accountId,
EmailRequest emailRequest, EmailRequest emailRequest,
@@ -125,9 +125,10 @@ class EmailAPI with HandleSetErrorMixin {
MailboxId? outboxMailboxId; MailboxId? outboxMailboxId;
if (mailboxRequest != null) { if (mailboxRequest != null) {
final generateCreateId = Id(_uuid.v1());
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addCreate( ..addCreate(
mailboxRequest.creationId, generateCreateId,
Mailbox( Mailbox(
name: mailboxRequest.newName, name: mailboxRequest.newName,
parentId: mailboxRequest.parentId, parentId: mailboxRequest.parentId,
@@ -139,7 +140,7 @@ class EmailAPI with HandleSetErrorMixin {
outboxMailboxId = MailboxId(ReferenceId( outboxMailboxId = MailboxId(ReferenceId(
ReferencePrefix.defaultPrefix, ReferencePrefix.defaultPrefix,
mailboxRequest.creationId)); generateCreateId));
emailNeedsToBeCreated = emailRequest.email.updatedEmail(newMailboxIds: {outboxMailboxId: true}); emailNeedsToBeCreated = emailRequest.email.updatedEmail(newMailboxIds: {outboxMailboxId: true});
} else { } else {
outboxMailboxId = emailRequest.email.mailboxIds?.keys.first; outboxMailboxId = emailRequest.email.mailboxIds?.keys.first;
@@ -222,9 +223,7 @@ class EmailAPI with HandleSetErrorMixin {
markAsAnsweredOrForwardedSetResponse markAsAnsweredOrForwardedSetResponse
]); ]);
if (emailCreated != null && mapErrors.isEmpty) { if (emailCreated == null || mapErrors.isNotEmpty) {
return true;
} else {
throw SetMethodException(mapErrors); throw SetMethodException(mapErrors);
} }
} }
@@ -148,9 +148,11 @@ class MailboxAPI with HandleSetErrorMixin {
} }
Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest request) async { Future<Mailbox?> createNewMailbox(Session session, AccountId accountId, CreateNewMailboxRequest request) async {
final generateCreateId = Id(_uuid.v1());
final setMailboxMethod = SetMailboxMethod(accountId) final setMailboxMethod = SetMailboxMethod(accountId)
..addCreate( ..addCreate(
request.creationId, generateCreateId,
Mailbox( Mailbox(
name: request.newName, name: request.newName,
isSubscribed: IsSubscribed(request.isSubscribed), isSubscribed: IsSubscribed(request.isSubscribed),
@@ -176,14 +178,14 @@ class MailboxAPI with HandleSetErrorMixin {
final mapMailboxCreated = setMailboxResponse?.created; final mapMailboxCreated = setMailboxResponse?.created;
if (mapMailboxCreated != null && if (mapMailboxCreated != null &&
mapMailboxCreated.containsKey(request.creationId)) { mapMailboxCreated.containsKey(generateCreateId)) {
final mailboxCreated = mapMailboxCreated[request.creationId]!; final mailboxCreated = mapMailboxCreated[generateCreateId]!;
final newMailboxCreated = mailboxCreated.toMailbox( final newMailboxCreated = mailboxCreated.toMailbox(
request.newName, request.newName,
parentId: request.parentId); parentId: request.parentId);
return newMailboxCreated; return newMailboxCreated;
} else { } else {
throw _parseErrorForSetMailboxResponse(setMailboxResponse, request.creationId); throw _parseErrorForSetMailboxResponse(setMailboxResponse, generateCreateId);
} }
} }
@@ -1,17 +1,14 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
class CreateNewMailboxRequest with EquatableMixin { class CreateNewMailboxRequest with EquatableMixin {
final MailboxName newName; final MailboxName newName;
final Id creationId;
final MailboxId? parentId; final MailboxId? parentId;
final bool isSubscribed; final bool isSubscribed;
CreateNewMailboxRequest( CreateNewMailboxRequest(
this.creationId,
this.newName, this.newName,
{ {
this.parentId, this.parentId,
@@ -21,7 +18,6 @@ class CreateNewMailboxRequest with EquatableMixin {
@override @override
List<Object?> get props => [ List<Object?> get props => [
creationId,
newName, newName,
parentId, parentId,
isSubscribed isSubscribed
@@ -8,7 +8,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
@@ -591,9 +590,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
: await push(AppRoutes.mailboxCreator, arguments: arguments); : await push(AppRoutes.mailboxCreator, arguments: arguments);
if (result != null && result is NewMailboxArguments) { if (result != null && result is NewMailboxArguments) {
final generateCreateId = Id(uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest( _createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
result.newName, result.newName,
parentId: result.mailboxLocation?.id)); parentId: result.mailboxLocation?.id));
} }
@@ -2,7 +2,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart'; import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
@@ -25,7 +24,6 @@ extension SendingEmailHiveCacheExtension on SendingEmailHiveCache {
emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(emailIdAnsweredOrForwarded), emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(emailIdAnsweredOrForwarded),
identityId: const IdentityIdNullableConverter().fromJson(identityId), identityId: const IdentityIdNullableConverter().fromJson(identityId),
mailboxNameRequest: const MailboxNameConverter().fromJson(mailboxNameRequest), mailboxNameRequest: const MailboxNameConverter().fromJson(mailboxNameRequest),
creationIdRequest: const IdNullableConverter().fromJson(creationIdRequest),
sendingState: SendingState.values.firstWhere((value) => value.name == sendingState), sendingState: SendingState.values.firstWhere((value) => value.name == sendingState),
previousEmailId: const EmailIdNullableConverter().fromJson(previousEmailId), previousEmailId: const EmailIdNullableConverter().fromJson(previousEmailId),
); );
@@ -36,12 +36,9 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
final String? mailboxNameRequest; final String? mailboxNameRequest;
@HiveField(9) @HiveField(9)
final String? creationIdRequest;
@HiveField(10)
final String sendingState; final String sendingState;
@HiveField(11) @HiveField(10)
final String? previousEmailId; final String? previousEmailId;
SendingEmailHiveCache( SendingEmailHiveCache(
@@ -54,7 +51,6 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
this.emailIdAnsweredOrForwarded, this.emailIdAnsweredOrForwarded,
this.identityId, this.identityId,
this.mailboxNameRequest, this.mailboxNameRequest,
this.creationIdRequest,
this.sendingState, this.sendingState,
this.previousEmailId, this.previousEmailId,
); );
@@ -70,7 +66,6 @@ class SendingEmailHiveCache extends HiveObject with EquatableMixin {
emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded,
identityId, identityId,
mailboxNameRequest, mailboxNameRequest,
creationIdRequest,
sendingState, sendingState,
previousEmailId, previousEmailId,
]; ];
@@ -193,10 +193,8 @@ class SendingEmailWorker extends Worker {
} }
CreateNewMailboxRequest? _getMailboxRequest() { CreateNewMailboxRequest? _getMailboxRequest() {
if (_sendingEmail.mailboxNameRequest != null && if (_sendingEmail.mailboxNameRequest != null) {
_sendingEmail.creationIdRequest != null) {
return CreateNewMailboxRequest( return CreateNewMailboxRequest(
_sendingEmail.creationIdRequest!,
_sendingEmail.mailboxNameRequest!); _sendingEmail.mailboxNameRequest!);
} else { } else {
return null; return null;
@@ -11,7 +11,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart'; import 'package:jmap_dart_client/jmap/core/error/method/error_method_response.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap; import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
@@ -676,9 +675,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
: await push(AppRoutes.mailboxCreator, arguments: arguments); : await push(AppRoutes.mailboxCreator, arguments: arguments);
if (result != null && result is NewMailboxArguments) { if (result != null && result is NewMailboxArguments) {
final generateCreateId = Id(uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest( _createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
result.newName, result.newName,
parentId: result.mailboxLocation?.id)); parentId: result.mailboxLocation?.id));
} }
@@ -21,7 +21,6 @@ extension SendingEmailExtension on SendingEmail {
emailIdAnsweredOrForwarded?.asString, emailIdAnsweredOrForwarded?.asString,
identityId?.asString, identityId?.asString,
mailboxNameRequest?.name, mailboxNameRequest?.name,
creationIdRequest?.value,
sendingState.name, sendingState.name,
previousEmailId?.asString, previousEmailId?.asString,
); );
@@ -51,7 +50,6 @@ extension SendingEmailExtension on SendingEmail {
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId, identityId: identityId,
mailboxNameRequest: mailboxNameRequest, mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: sendingState, sendingState: sendingState,
selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE, selectMode: selectMode == SelectMode.INACTIVE ? SelectMode.ACTIVE : SelectMode.INACTIVE,
previousEmailId: previousEmailId, previousEmailId: previousEmailId,
@@ -69,7 +67,6 @@ extension SendingEmailExtension on SendingEmail {
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId, identityId: identityId,
mailboxNameRequest: mailboxNameRequest, mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: sendingState, sendingState: sendingState,
selectMode: SelectMode.INACTIVE, selectMode: SelectMode.INACTIVE,
previousEmailId: previousEmailId, previousEmailId: previousEmailId,
@@ -87,7 +84,6 @@ extension SendingEmailExtension on SendingEmail {
emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded,
identityId: identityId, identityId: identityId,
mailboxNameRequest: mailboxNameRequest, mailboxNameRequest: mailboxNameRequest,
creationIdRequest: creationIdRequest,
sendingState: newState, sendingState: newState,
selectMode: selectMode, selectMode: selectMode,
previousEmailId: previousEmailId, previousEmailId: previousEmailId,
@@ -5,11 +5,9 @@ import 'package:core/utils/platform_info.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter_date_range_picker/flutter_date_range_picker.dart'; import 'package:flutter_date_range_picker/flutter_date_range_picker.dart';
import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/email_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/identities/identity_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart'; import 'package:jmap_dart_client/http/converter/mailbox_id_nullable_converter.dart';
import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart'; import 'package:jmap_dart_client/http/converter/mailbox_name_converter.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -28,7 +26,6 @@ class SendingEmail with EquatableMixin {
final IdentityId? identityId; final IdentityId? identityId;
final EmailActionType emailActionType; final EmailActionType emailActionType;
final MailboxName? mailboxNameRequest; final MailboxName? mailboxNameRequest;
final Id? creationIdRequest;
final DateTime createTime; final DateTime createTime;
final SelectMode selectMode; final SelectMode selectMode;
final SendingState sendingState; final SendingState sendingState;
@@ -44,7 +41,6 @@ class SendingEmail with EquatableMixin {
this.emailIdAnsweredOrForwarded, this.emailIdAnsweredOrForwarded,
this.identityId, this.identityId,
this.mailboxNameRequest, this.mailboxNameRequest,
this.creationIdRequest,
this.selectMode = SelectMode.INACTIVE, this.selectMode = SelectMode.INACTIVE,
this.sendingState = SendingState.waiting, this.sendingState = SendingState.waiting,
this.previousEmailId, this.previousEmailId,
@@ -68,7 +64,6 @@ class SendingEmail with EquatableMixin {
writeNotNull('emailIdAnsweredOrForwarded', const EmailIdNullableConverter().toJson(emailIdAnsweredOrForwarded)); writeNotNull('emailIdAnsweredOrForwarded', const EmailIdNullableConverter().toJson(emailIdAnsweredOrForwarded));
writeNotNull('identityId', const IdentityIdNullableConverter().toJson(identityId)); writeNotNull('identityId', const IdentityIdNullableConverter().toJson(identityId));
writeNotNull('mailboxNameRequest', mailboxNameRequest?.name); writeNotNull('mailboxNameRequest', mailboxNameRequest?.name);
writeNotNull('creationIdRequest', const IdNullableConverter().toJson(creationIdRequest));
writeNotNull('previousEmailId', const EmailIdNullableConverter().toJson(previousEmailId)); writeNotNull('previousEmailId', const EmailIdNullableConverter().toJson(previousEmailId));
return val; return val;
@@ -91,7 +86,6 @@ class SendingEmail with EquatableMixin {
emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(json['emailIdAnsweredOrForwarded'] as String?), emailIdAnsweredOrForwarded: const EmailIdNullableConverter().fromJson(json['emailIdAnsweredOrForwarded'] as String?),
identityId: const IdentityIdNullableConverter().fromJson(json['identityId'] as String?), identityId: const IdentityIdNullableConverter().fromJson(json['identityId'] as String?),
mailboxNameRequest: const MailboxNameConverter().fromJson(json['mailboxNameRequest'] as String?), mailboxNameRequest: const MailboxNameConverter().fromJson(json['mailboxNameRequest'] as String?),
creationIdRequest: const IdNullableConverter().fromJson(json['creationIdRequest'] as String?),
previousEmailId: const EmailIdNullableConverter().fromJson(json['previousEmailId'] as String?), previousEmailId: const EmailIdNullableConverter().fromJson(json['previousEmailId'] as String?),
); );
} }
@@ -134,7 +128,6 @@ class SendingEmail with EquatableMixin {
emailIdAnsweredOrForwarded, emailIdAnsweredOrForwarded,
identityId, identityId,
mailboxNameRequest, mailboxNameRequest,
creationIdRequest,
selectMode, selectMode,
sendingState, sendingState,
previousEmailId, previousEmailId,
@@ -283,11 +283,8 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
} }
CreateNewMailboxRequest? _getMailboxRequest(SendingEmail sendingEmail) { CreateNewMailboxRequest? _getMailboxRequest(SendingEmail sendingEmail) {
if (sendingEmail.mailboxNameRequest != null && if (sendingEmail.mailboxNameRequest != null) {
sendingEmail.creationIdRequest != null
) {
return CreateNewMailboxRequest( return CreateNewMailboxRequest(
sendingEmail.creationIdRequest!,
sendingEmail.mailboxNameRequest! sendingEmail.mailboxNameRequest!
); );
} else { } else {