From 82956378e5b4f13a753543446b7c6026f9af955b Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 19 Feb 2024 16:31:47 +0700 Subject: [PATCH] TF-2611 Get for maximum 5 latest email in `Email/changes` on FCM Signed-off-by: dab246 clea# Please enter the commit message for your changes. Lines starting --- .../data/repository/fcm_repository_impl.dart | 45 ++++++++++--------- .../domain/utils/fcm_constants.dart | 2 + 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/lib/features/push_notification/data/repository/fcm_repository_impl.dart b/lib/features/push_notification/data/repository/fcm_repository_impl.dart index 366749dfd..40dad6414 100644 --- a/lib/features/push_notification/data/repository/fcm_repository_impl.dart +++ b/lib/features/push_notification/data/repository/fcm_repository_impl.dart @@ -10,6 +10,8 @@ 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/user_name.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:model/email/email_property.dart'; import 'package:model/extensions/list_email_extension.dart'; @@ -189,34 +191,33 @@ class FCMRepositoryImpl extends FCMRepository { @override Future> getNewReceiveEmailFromNotification(Session session, AccountId accountId, jmap.State currentState) async { - EmailChangeResponse? emailChangeResponse; - bool hasMoreChanges = true; - jmap.State? sinceState = currentState; + final changesResponse = await _threadDataSource.getChanges( + session, + accountId, + currentState, + propertiesCreated: Properties({ + EmailProperty.id, + EmailProperty.receivedAt + }) + ); - while (hasMoreChanges && sinceState != null) { - final changesResponse = await _threadDataSource.getChanges( - session, - accountId, - sinceState, - propertiesCreated: Properties({EmailProperty.id})); - - hasMoreChanges = changesResponse.hasMoreChanges; - sinceState = changesResponse.newStateChanges; - - if (emailChangeResponse != null) { - emailChangeResponse.union(changesResponse); - } else { - emailChangeResponse = changesResponse; - } - } - - if (emailChangeResponse?.created?.isNotEmpty == true) { - return emailChangeResponse!.created!.listEmailIds; + if (changesResponse.created?.isNotEmpty == true) { + return _validateMaximumNewEmailsRetrieved(changesResponse.created!); } else { throw NotFoundNewReceiveEmailException(); } } + List _validateMaximumNewEmailsRetrieved(List listEmails) { + listEmails.sortBy(EmailComparator(EmailComparatorProperty.receivedAt)); + if (listEmails.length > FcmConstants.MAX_NUMBER_NEW_EMAILS_RETRIEVED) { + final newListEmails = listEmails.sublist(0, FcmConstants.MAX_NUMBER_NEW_EMAILS_RETRIEVED); + return newListEmails.listEmailIds; + } else { + return listEmails.listEmailIds; + } + } + @override Future updateFirebaseRegistrationToken(UpdateTokenExpiredTimeRequest expiredTimeRequest) { return _fcmDatasource[DataSourceType.network]!.updateFirebaseRegistrationToken(expiredTimeRequest); diff --git a/lib/features/push_notification/domain/utils/fcm_constants.dart b/lib/features/push_notification/domain/utils/fcm_constants.dart index a83396db6..d9260b899 100644 --- a/lib/features/push_notification/domain/utils/fcm_constants.dart +++ b/lib/features/push_notification/domain/utils/fcm_constants.dart @@ -12,4 +12,6 @@ class FcmConstants { ]; static const String firebaseRegistrationExpiredTimeProperty = 'expires'; + + static const int MAX_NUMBER_NEW_EMAILS_RETRIEVED = 5; } \ No newline at end of file