This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 5a899ed533056c98c4179acdf6a211ab5f2dc8f9 Author: Benoit Tellier <[email protected]> AuthorDate: Wed Aug 26 14:05:11 2020 +0700 JAMES-3095 Avoid listing all subscriptions for each mailbox --- .../main/scala/org/apache/james/jmap/model/MailboxFactory.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/MailboxFactory.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/MailboxFactory.scala index 91e63b9..7b9f57f 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/MailboxFactory.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/model/MailboxFactory.scala @@ -67,6 +67,12 @@ case class MailboxValidation(mailboxName: MailboxName, totalEmails: TotalEmails, totalThreads: TotalThreads) +case class Subscriptions(subscribedNames: Set[String]) { + def isSubscribed(name: String): IsSubscribed = IsSubscribed(subscribedNames.contains(name)) + + def isSubscribed(metaData: MailboxMetaData): IsSubscribed = isSubscribed(metaData.getPath.getName) +} + class MailboxFactory @Inject() (subscriptionManager: SubscriptionManager, mailboxManager: MailboxManager) { private def getRole(mailboxPath: MailboxPath, mailboxSession: MailboxSession): Option[Role] = Role.from(mailboxPath.getName) @@ -117,6 +123,7 @@ class MailboxFactory @Inject() (subscriptionManager: SubscriptionManager, mailbo mailboxSession: MailboxSession, allMailboxesMetadata: Seq[MailboxMetaData], quotaLoader: QuotaLoader): SMono[Mailbox] = { + val subscriptions: Subscriptions = Subscriptions(subscriptionManager.subscriptions(mailboxSession).asScala.toSet) val sanitizedCounters: MailboxCounters = mailboxMetaData.getCounters.sanitize() MailboxValidation.validate(mailboxMetaData.getPath, mailboxSession.getPathDelimiter, sanitizedCounters.getUnseen, sanitizedCounters.getUnseen, sanitizedCounters.getCount, sanitizedCounters.getCount) match { @@ -134,7 +141,7 @@ class MailboxFactory @Inject() (subscriptionManager: SubscriptionManager, mailbo .map(_.getId) .headOption val myRights: MailboxRights = getMyRights(mailboxMetaData.getPath, mailboxMetaData.getResolvedAcls, mailboxSession) - val isSubscribed: IsSubscribed = retrieveIsSubscribed(mailboxMetaData.getPath, mailboxSession) + val isSubscribed: IsSubscribed = subscriptions.isSubscribed(mailboxMetaData) Mailbox( id = id, --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
