You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/23 07:53:13 UTC
[james-project] 02/18: JAMES-3177 group applicableflags with update
status
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 d06faa6746002d4249c09f5adf71c4bca4773c81
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Tue Jun 16 15:36:16 2020 +0200
JAMES-3177 group applicableflags with update status
This does not change how the class behaves but it will help
for testing as updateApplicableFlags will become a pure function
---
.../imap/processor/base/SelectedMailboxImpl.java | 59 ++++++++++++++++++----
1 file changed, 48 insertions(+), 11 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index 535e8a5..3f73abc 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -59,6 +59,39 @@ import reactor.core.scheduler.Schedulers;
* Default implementation of {@link SelectedMailbox}
*/
public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
+
+
+ private static class ApplicableFlags {
+ static ApplicableFlags from(Flags flags) {
+ boolean updated = false;
+ return new ApplicableFlags(flags, updated);
+ }
+
+ private final Flags flags;
+ private final boolean updated;
+
+ private ApplicableFlags(Flags flags, boolean updated) {
+ this.flags = flags;
+ this.updated = updated;
+ }
+
+ public ApplicableFlags ackUpdates() {
+ return new ApplicableFlags(flags, false);
+ }
+
+ public Flags flags() {
+ return new Flags(flags);
+ }
+
+ public boolean updated() {
+ return updated;
+ }
+
+ public ApplicableFlags update(boolean applicableFlagsChanged) {
+ return new ApplicableFlags(flags, true);
+ }
+ }
+
private final Registration registration;
private final MailboxManager mailboxManager;
private final MailboxId mailboxId;
@@ -75,8 +108,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
private boolean isDeletedByOtherSession = false;
private boolean sizeChanged = false;
private boolean silentFlagChanges = false;
- private final Flags applicableFlags;
- private boolean applicableFlagsChanged;
+ private ApplicableFlags applicableFlags;
public SelectedMailboxImpl(MailboxManager mailboxManager, EventBus eventBus, ImapSession session, MessageManager messageManager) throws MailboxException {
this.session = session;
@@ -96,7 +128,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
.subscribeOn(Schedulers.elastic())
.block();
- applicableFlags = messageManager.getApplicableFlags(mailboxSession);
+ applicableFlags = ApplicableFlags.from(messageManager.getApplicableFlags(mailboxSession));
try (Stream<MessageUid> stream = messageManager.search(SearchQuery.of(SearchQuery.all()), mailboxSession)) {
uidMsnConverter.addAll(stream.collect(Guavate.toImmutableList()));
}
@@ -185,7 +217,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
sizeChanged = false;
flagUpdateUids.clear();
isDeletedByOtherSession = false;
- applicableFlagsChanged = false;
+ applicableFlags = applicableFlags.ackUpdates();
}
@Override
@@ -290,19 +322,19 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
@Override
public synchronized Flags getApplicableFlags() {
- return new Flags(applicableFlags);
+ return applicableFlags.flags();
}
@Override
public synchronized boolean hasNewApplicableFlags() {
- return applicableFlagsChanged;
+ return applicableFlags.updated();
}
@Override
public synchronized void resetNewApplicableFlags() {
- applicableFlagsChanged = false;
+ applicableFlags = applicableFlags.ackUpdates();
}
@@ -381,22 +413,27 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
}
private void updateApplicableFlags(FlagsUpdated messageEvent) {
- int size = applicableFlags.getUserFlags().length;
+ Flags updatedFlags = applicableFlags.flags();
+ int size = updatedFlags.getUserFlags().length;
FlagsUpdated updatedF = messageEvent;
List<UpdatedFlags> flags = updatedF.getUpdatedFlags();
for (UpdatedFlags flag : flags) {
- applicableFlags.add(flag.getNewFlags());
+ updatedFlags.add(flag.getNewFlags());
}
// \RECENT is not a applicable flag in imap so remove it
// from the list
- applicableFlags.remove(Flag.RECENT);
+ updatedFlags.remove(Flag.RECENT);
- if (size < applicableFlags.getUserFlags().length) {
+ boolean applicableFlagsChanged;
+ if (size < updatedFlags.getUserFlags().length) {
applicableFlagsChanged = true;
+ } else {
+ applicableFlagsChanged = false;
}
+ applicableFlags = ApplicableFlags.from(updatedFlags).update(applicableFlagsChanged);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org