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 no...@apache.org on 2011/10/07 22:17:02 UTC
svn commit: r1180198 - in
/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor:
AbstractSelectionProcessor.java base/SelectedMailboxImpl.java
Author: norman
Date: Fri Oct 7 20:17:01 2011
New Revision: 1180198
URL: http://svn.apache.org/viewvc?rev=1180198&view=rev
Log:
Start on work to make sure event can not get missed on select. See IMAP-342
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java?rev=1180198&r1=1180197&r2=1180198&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java Fri Oct 7 20:17:01 2011
@@ -61,8 +61,6 @@ import org.apache.james.mailbox.MessageR
abstract class AbstractSelectionProcessor<M extends AbstractMailboxSelectionRequest> extends AbstractMailboxProcessor<M> implements PermitEnableCapabilityProcessor {
- private final Flags flags = new Flags();
-
final StatusResponseFactory statusResponseFactory;
private final boolean openReadOnly;
@@ -73,11 +71,7 @@ abstract class AbstractSelectionProcesso
super(acceptableClass, next, mailboxManager, statusResponseFactory);
this.statusResponseFactory = statusResponseFactory;
this.openReadOnly = openReadOnly;
- flags.add(Flags.Flag.ANSWERED);
- flags.add(Flags.Flag.DELETED);
- flags.add(Flags.Flag.DRAFT);
- flags.add(Flags.Flag.FLAGGED);
- flags.add(Flags.Flag.SEEN);
+
}
/*
@@ -403,7 +397,9 @@ abstract class AbstractSelectionProcesso
if (currentMailbox != null) {
getStatusResponseFactory().untaggedOk(HumanReadableText.QRESYNC_CLOSED, ResponseCode.closed());
}
- sessionMailbox = createNewSelectedMailbox(mailbox, mailboxSession, session, mailboxPath);
+ session.selected(new SelectedMailboxImpl(getMailboxManager(), session, mailboxPath));
+
+ sessionMailbox = session.getSelected();
} else {
// TODO: Check if we need to handle CONDSTORE there too
@@ -414,25 +410,6 @@ abstract class AbstractSelectionProcesso
return metaData;
}
- private SelectedMailbox createNewSelectedMailbox(final MessageManager mailbox, final MailboxSession mailboxSession, ImapSession session, MailboxPath path) throws MailboxException {
-
- MessageResultIterator messages = mailbox.getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession);
- Flags applicableFlags = new Flags(flags);
- List<Long> uids = new ArrayList<Long>();
- while(messages.hasNext()) {
- MessageResult mr = messages.next();
- applicableFlags.add(mr.getFlags());
- uids.add(mr.getUid());
- }
-
-
- // \RECENT is not a applicable flag in imap so remove it from the list
- applicableFlags.remove(Flags.Flag.RECENT);
-
- final SelectedMailbox sessionMailbox = new SelectedMailboxImpl(getMailboxManager(), uids.iterator(),applicableFlags, session, path);
- session.selected(sessionMailbox);
- return sessionMailbox;
- }
private void addRecent(final MessageManager.MetaData metaData, SelectedMailbox sessionMailbox) throws MailboxException {
final List<Long> recentUids = metaData.getRecent();
Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java?rev=1180198&r1=1180197&r2=1180198&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java Fri Oct 7 20:17:01 2011
@@ -22,6 +22,7 @@ package org.apache.james.imap.processor.
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -34,6 +35,9 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPath;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageRange;
+import org.apache.james.mailbox.MessageResult;
+import org.apache.james.mailbox.MessageResultIterator;
/**
* Default implementation of {@link SelectedMailbox}
@@ -54,15 +58,41 @@ public class SelectedMailboxImpl impleme
private ImapSession session;
- public SelectedMailboxImpl(final MailboxManager mailboxManager, final Iterator<Long> uids, final Flags applicableFlags, final ImapSession session, final MailboxPath path) throws MailboxException {
+
+ private final static Flags FLAGS = new Flags();
+ static {
+ FLAGS.add(Flags.Flag.ANSWERED);
+ FLAGS.add(Flags.Flag.DELETED);
+ FLAGS.add(Flags.Flag.DRAFT);
+ FLAGS.add(Flags.Flag.FLAGGED);
+ FLAGS.add(Flags.Flag.SEEN);
+ }
+
+
+ public SelectedMailboxImpl(final MailboxManager mailboxManager, final ImapSession session, final MailboxPath path) throws MailboxException {
recentUids = new TreeSet<Long>();
recentUidRemoved = false;
+
MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
+ MessageResultIterator messages = mailboxManager.getMailbox(path, mailboxSession).getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession);
+ Flags applicableFlags = new Flags(FLAGS);
+ List<Long> uids = new ArrayList<Long>();
+ while(messages.hasNext()) {
+ MessageResult mr = messages.next();
+ applicableFlags.add(mr.getFlags());
+ uids.add(mr.getUid());
+ }
+
+
+ // \RECENT is not a applicable flag in imap so remove it from the list
+ applicableFlags.remove(Flags.Flag.RECENT);
+
+
events = new MailboxEventAnalyser(session, path, applicableFlags);
// Ignore events from our session
events.setSilentFlagChanges(true);
mailboxManager.addListener(path, events, mailboxSession);
- converter = new UidToMsnConverter(session, uids);
+ converter = new UidToMsnConverter(session, uids.iterator());
mailboxManager.addListener(path, converter, mailboxSession);
this.mailboxManager = mailboxManager;
this.path = path;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org