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/04/11 12:19:48 UTC

svn commit: r1091008 - in /james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor: CopyProcessor.java base/MailboxEventAnalyser.java

Author: norman
Date: Mon Apr 11 10:19:47 2011
New Revision: 1091008

URL: http://svn.apache.org/viewvc?rev=1091008&view=rev
Log:
COPY command should set RECENT flag on messages after copy them. See IMAP-287

Modified:
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java?rev=1091008&r1=1091007&r2=1091008&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java Mon Apr 11 10:19:47 2011
@@ -22,6 +22,8 @@ package org.apache.james.imap.processor;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.mail.Flags;
+
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
@@ -36,6 +38,7 @@ 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.MessageManager;
 import org.apache.james.mailbox.MessageRangeException;
 import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
 import org.apache.james.mailbox.MessageRange;
@@ -62,24 +65,30 @@ public class CopyProcessor extends Abstr
             final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
             final MailboxManager mailboxManager = getMailboxManager();
             final boolean mailboxExists = mailboxManager.mailboxExists(targetMailbox, mailboxSession);
+
             if (!mailboxExists) {
                 no(command, tag, responder, HumanReadableText.FAILURE_NO_SUCH_MAILBOX,
                         ResponseCode.tryCreate());
             } else {
+                final MessageManager mailbox = mailboxManager.getMailbox(targetMailbox, mailboxSession);
+
                 List<IdRange> resultRanges=new ArrayList<IdRange>(); 
                 for (int i = 0; i < idSet.length; i++) {
                     MessageRange messageSet = messageRange(currentMailbox, idSet[i], useUids);
 
                     List<MessageRange> copiedUids = mailboxManager.copyMessages(messageSet, currentMailbox.getPath(), targetMailbox, mailboxSession);
-                    
                     for (MessageRange mr : copiedUids) {
+                       // Set recent flag on copied message as this SHOULD be done.
+                       // See RFC 3501 6.4.7.  COPY Command
+                       // See IMAP-287
+                       mailbox.setFlags(new Flags(Flags.Flag.RECENT), true,  false, mr, mailboxSession);
                        resultRanges.add(new IdRange(mr.getUidFrom(), mr.getUidTo())); 
                     }
                 }
                 IdRange[] resultUids = IdRange.mergeRanges(resultRanges).toArray(new IdRange[0]);
 
                 // get folder UIDVALIDITY
-                Long uidValidity = mailboxManager.getMailbox(targetMailbox, mailboxSession).getMetaData(false, mailboxSession, FetchGroup.NO_UNSEEN).getUidValidity();
+                Long uidValidity = mailbox.getMetaData(false, mailboxSession, FetchGroup.NO_UNSEEN).getUidValidity();
                 
                 unsolicitedResponses(session, responder, useUids);
                 okComplete(command, tag, ResponseCode.copyUid(uidValidity, idSet, resultUids), responder);

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java?rev=1091008&r1=1091007&r2=1091008&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java Mon Apr 11 10:19:47 2011
@@ -26,9 +26,11 @@ import java.util.Set;
 import java.util.TreeSet;
 
 import javax.mail.Flags;
+import javax.mail.Flags.Flag;
 
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.api.process.SelectedMailbox;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxPath;
 
@@ -102,6 +104,17 @@ public class MailboxEventAnalyser extend
                             flagUpdateUids.add(uidObject);
                         }
                     }
+                    SelectedMailbox sm = session.getSelected();
+                    // We need to add the UID of the message to the recent list if we receive an flag update which contains a \RECENT flag 
+                    // See IMAP-287
+                    Iterator<Flag> flags = updated.flagsIterator();
+                    while(flags.hasNext()) {
+                        if (Flag.RECENT.equals(flags.next())) {
+                            if (sm.getPath().equals(event.getMailboxPath())) {
+                                sm.addRecent(updated.getSubjectUid());
+                            }
+                        }
+                    }
                 } else if (messageEvent instanceof Expunged) {
                     final Long uidObject = uid;
                     synchronized (expungedUids) {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org