diff --git a/model/lib/email/presentation_email.dart b/model/lib/email/presentation_email.dart index 6b2f0b67c..a455b6d6d 100644 --- a/model/lib/email/presentation_email.dart +++ b/model/lib/email/presentation_email.dart @@ -90,6 +90,8 @@ class PresentationEmail with EquatableMixin { String get routeWebAsString => routeWeb.toString(); + bool get pushNotificationActivated => !isDraft && !hasRead; + @override List get props => [ id, diff --git a/model/lib/extensions/list_presentation_email_extension.dart b/model/lib/extensions/list_presentation_email_extension.dart index 7ea74e274..b5351c7c7 100644 --- a/model/lib/extensions/list_presentation_email_extension.dart +++ b/model/lib/extensions/list_presentation_email_extension.dart @@ -1,5 +1,6 @@ import 'package:collection/collection.dart'; +import 'package:core/utils/app_logger.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'; @@ -103,4 +104,13 @@ extension ListPresentationEmailExtension on List { } int matchedIndex(EmailId emailId) => indexWhere((email) => email.id == emailId); + + List toEmailsAvailablePushNotification({List? mailboxIdsNotPutNotifications}) { + log('ListPresentationEmailExtension::toEmailsAvailablePushNotification():mailboxIdsNotPutNotifications: $mailboxIdsNotPutNotifications'); + if (mailboxIdsNotPutNotifications?.isNotEmpty == true) { + return where((email) => !email.isBelongToOneOfTheMailboxes(mailboxIdsNotPutNotifications!) && email.pushNotificationActivated).toList(); + } else { + return where((email) => email.pushNotificationActivated).toList(); + } + } } \ No newline at end of file diff --git a/model/lib/extensions/list_presentation_mailbox_extension.dart b/model/lib/extensions/list_presentation_mailbox_extension.dart index 812a7da5b..973fb511c 100644 --- a/model/lib/extensions/list_presentation_mailbox_extension.dart +++ b/model/lib/extensions/list_presentation_mailbox_extension.dart @@ -1,4 +1,5 @@ +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; extension ListPresentationMailboxExtension on List { @@ -14,4 +15,6 @@ extension ListPresentationMailboxExtension on List { bool get isAllDefaultMailboxes => every((mailbox) => mailbox.isDefault); bool get isAllUnreadMailboxes => every((mailbox) => mailbox.getCountUnReadEmails().isNotEmpty); + + List get mailboxIds => map((mailbox) => mailbox.id).toList(); } \ No newline at end of file diff --git a/model/lib/extensions/presentation_email_extension.dart b/model/lib/extensions/presentation_email_extension.dart index 80750d7c7..39c075e38 100644 --- a/model/lib/extensions/presentation_email_extension.dart +++ b/model/lib/extensions/presentation_email_extension.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:core/domain/extensions/datetime_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; @@ -243,4 +244,19 @@ extension PresentationEmailExtension on PresentationEmail { mailboxContain: mailboxContain ); } + + bool isBelongToOneOfTheMailboxes(List mailboxIdsSource) { + final mapMailboxIds = mailboxIds; + mapMailboxIds?.removeWhere((key, value) => !value); + + if (mapMailboxIds?.isNotEmpty == true) { + final listMailboxId = mapMailboxIds!.keys.toList(); + log('PresentationEmailExtension::isBelongToOneOfTheMailboxes():listMailboxId: $listMailboxId'); + final listMailboxIdValid = listMailboxId.where((mailboxId) => mailboxIdsSource.contains(mailboxId)); + log('PresentationEmailExtension::isBelongToOneOfTheMailboxes():listMailboxIdValid: $listMailboxIdValid'); + return listMailboxIdValid.isNotEmpty; + } + + return false; + } } \ No newline at end of file diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 8f7fc3ff6..35a223f1f 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -115,6 +115,8 @@ class PresentationMailbox with EquatableMixin { } } + bool get pushNotificationDeactivated => isOutbox || isSent || isDrafts || isTrash || isSpam; + @override List get props => [ id,