TF-3719 Fix error Too many items in an email read at level FULL in Email/get
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -43,7 +43,6 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_e
|
|||||||
import 'package:tmail_ui_user/features/push_notification/presentation/action/push_notification_state_change_action.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/action/push_notification_state_change_action.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/listener/change_listener.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/listener/change_listener.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class EmailChangeListener extends ChangeListener {
|
class EmailChangeListener extends ChangeListener {
|
||||||
@@ -162,8 +161,10 @@ class EmailChangeListener extends ChangeListener {
|
|||||||
_accountId!,
|
_accountId!,
|
||||||
_userName!,
|
_userName!,
|
||||||
state,
|
state,
|
||||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
_session!,
|
||||||
|
_accountId!,
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -304,7 +305,6 @@ class EmailChangeListener extends ChangeListener {
|
|||||||
session,
|
session,
|
||||||
accountId,
|
accountId,
|
||||||
newState,
|
newState,
|
||||||
propertiesCreated: Properties({EmailProperty.id, EmailProperty.keywords}),
|
|
||||||
propertiesUpdated: Properties({EmailProperty.keywords}),
|
propertiesUpdated: Properties({EmailProperty.keywords}),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:jmap_dart_client/jmap/mail/email/get/get_email_method.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_response.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/get/get_email_response.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_method.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_method.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_response.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/query/query_email_response.dart';
|
||||||
|
import 'package:model/extensions/list_id_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/extensions/list_email_extension.dart';
|
import 'package:tmail_ui_user/features/thread/data/extensions/list_email_extension.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet_get_method.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/search_snippet/search_snippet_get_method.dart';
|
||||||
@@ -226,32 +227,46 @@ class ThreadAPI {
|
|||||||
|
|
||||||
final changesEmailInvocation = jmapRequestBuilder.invocation(changesEmailMethod);
|
final changesEmailInvocation = jmapRequestBuilder.invocation(changesEmailMethod);
|
||||||
|
|
||||||
final getMailboxUpdated = GetEmailMethod(accountId)
|
GetEmailMethod? getEmailUpdated;
|
||||||
..addReferenceIds(processingInvocation.createResultReference(
|
GetEmailMethod? getEmailCreated;
|
||||||
changesEmailInvocation.methodCallId,
|
RequestInvocation? getEmailUpdatedInvocation;
|
||||||
ReferencePath.updatedPath));
|
RequestInvocation? getEmailCreatedInvocation;
|
||||||
|
|
||||||
if (propertiesUpdated != null) {
|
if (propertiesUpdated != null) {
|
||||||
getMailboxUpdated.addProperties(propertiesUpdated);
|
getEmailUpdated = GetEmailMethod(accountId)
|
||||||
}
|
..addReferenceIds(
|
||||||
|
processingInvocation.createResultReference(
|
||||||
|
changesEmailInvocation.methodCallId,
|
||||||
|
ReferencePath.updatedPath,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
..addProperties(propertiesUpdated);
|
||||||
|
|
||||||
final getEmailCreated = GetEmailMethod(accountId)
|
getEmailUpdatedInvocation = jmapRequestBuilder.invocation(getEmailUpdated);
|
||||||
..addReferenceIds(processingInvocation.createResultReference(
|
}
|
||||||
changesEmailInvocation.methodCallId,
|
|
||||||
ReferencePath.createdPath));
|
|
||||||
|
|
||||||
if (propertiesCreated != null) {
|
if (propertiesCreated != null) {
|
||||||
getEmailCreated.addProperties(propertiesCreated);
|
getEmailCreated = GetEmailMethod(accountId)
|
||||||
|
..addReferenceIds(
|
||||||
|
processingInvocation.createResultReference(
|
||||||
|
changesEmailInvocation.methodCallId,
|
||||||
|
ReferencePath.createdPath,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
..addProperties(propertiesCreated);
|
||||||
|
|
||||||
|
getEmailCreatedInvocation = jmapRequestBuilder.invocation(getEmailCreated);
|
||||||
}
|
}
|
||||||
|
|
||||||
final getEmailUpdatedInvocation = jmapRequestBuilder.invocation(getMailboxUpdated);
|
final requiredCapabilitiesMethod = getEmailCreated?.requiredCapabilities
|
||||||
final getEmailCreatedInvocation = jmapRequestBuilder.invocation(getEmailCreated);
|
?? getEmailUpdated?.requiredCapabilities
|
||||||
|
?? changesEmailMethod.requiredCapabilities;
|
||||||
|
|
||||||
final capabilities = getEmailCreated.requiredCapabilities
|
final usedCapabilities = requiredCapabilitiesMethod
|
||||||
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
.toCapabilitiesSupportTeamMailboxes(session, accountId);
|
||||||
|
|
||||||
final result = await (jmapRequestBuilder
|
final result = await (jmapRequestBuilder
|
||||||
..usings(capabilities))
|
..usings(usedCapabilities))
|
||||||
.build()
|
.build()
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
@@ -259,24 +274,43 @@ class ThreadAPI {
|
|||||||
changesEmailInvocation.methodCallId,
|
changesEmailInvocation.methodCallId,
|
||||||
ChangesEmailResponse.deserialize);
|
ChangesEmailResponse.deserialize);
|
||||||
|
|
||||||
final resultUpdated = result.parse<GetEmailResponse>(
|
List<EmailId>? destroyedEmailIds = resultChanges
|
||||||
getEmailUpdatedInvocation.methodCallId,
|
?.destroyed
|
||||||
GetEmailResponse.deserialize);
|
.toEmailIds()
|
||||||
|
.toList();
|
||||||
|
State? newStateChanges = resultChanges?.newState;
|
||||||
|
bool hasMoreChanges = resultChanges?.hasMoreChanges ?? false;
|
||||||
|
List<Email>? updatedEmail;
|
||||||
|
List<Email>? createdEmail;
|
||||||
|
State? newStateEmail;
|
||||||
|
|
||||||
final resultCreated = result.parse<GetEmailResponse>(
|
if (getEmailUpdatedInvocation != null) {
|
||||||
getEmailCreatedInvocation.methodCallId,
|
final emailResponseUpdated = result.parse<GetEmailResponse>(
|
||||||
GetEmailResponse.deserialize);
|
getEmailUpdatedInvocation.methodCallId,
|
||||||
|
GetEmailResponse.deserialize,
|
||||||
|
);
|
||||||
|
updatedEmail = emailResponseUpdated?.list;
|
||||||
|
newStateEmail = emailResponseUpdated?.state;
|
||||||
|
}
|
||||||
|
|
||||||
final listMailboxIdDestroyed = resultChanges?.destroyed.map((id) => EmailId(id)).toList() ?? <EmailId>[];
|
if (getEmailCreatedInvocation != null) {
|
||||||
|
final emailResponseCreated = result.parse<GetEmailResponse>(
|
||||||
|
getEmailCreatedInvocation.methodCallId,
|
||||||
|
GetEmailResponse.deserialize,
|
||||||
|
);
|
||||||
|
createdEmail = emailResponseCreated?.list;
|
||||||
|
newStateEmail = emailResponseCreated?.state;
|
||||||
|
}
|
||||||
|
|
||||||
return EmailChangeResponse(
|
return EmailChangeResponse(
|
||||||
updated: resultUpdated?.list,
|
updated: updatedEmail,
|
||||||
created: resultCreated?.list,
|
created: createdEmail,
|
||||||
destroyed: listMailboxIdDestroyed,
|
destroyed: destroyedEmailIds,
|
||||||
newStateEmail: resultUpdated?.state,
|
newStateEmail: newStateEmail,
|
||||||
newStateChanges: resultChanges?.newState,
|
newStateChanges: newStateChanges,
|
||||||
hasMoreChanges: resultChanges?.hasMoreChanges ?? false,
|
hasMoreChanges: hasMoreChanges,
|
||||||
updatedProperties: propertiesUpdated);
|
updatedProperties: propertiesUpdated,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Email> getEmailById(Session session, AccountId accountId, EmailId emailId, {Properties? properties}) async {
|
Future<Email> getEmailById(Session session, AccountId accountId, EmailId emailId, {Properties? properties}) async {
|
||||||
|
|||||||
Reference in New Issue
Block a user