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]

Reply via email to