From af5bf09828201984d1c37116b837523a39901f2a Mon Sep 17 00:00:00 2001 From: mguessan Date: Mon, 29 Aug 2011 21:04:30 +0000 Subject: [PATCH] IMAP: implement DRAFT and UNDRAFT search conditions, fix 3396248 git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1779 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/imap/ImapConnection.java | 8 +++++++- src/test/davmail/imap/TestImap.java | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index 4c5f5add..460bf166 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -905,7 +905,8 @@ public class ImapConnection extends AbstractConnection { while (iterator.hasNext()) { ExchangeSession.Message message = iterator.next(); if ((conditions.flagged == null || message.flagged == conditions.flagged) - && (conditions.answered == null || message.answered == conditions.answered)) { + && (conditions.answered == null || message.answered == conditions.answered) + && (conditions.draft == null || message.draft == conditions.draft)) { uidList.add(message.getImapUid()); } } @@ -1169,6 +1170,7 @@ public class ImapConnection extends AbstractConnection { static final class SearchConditions { Boolean flagged; Boolean answered; + Boolean draft; String indexRange; String uidRange; } @@ -1215,6 +1217,10 @@ public class ImapConnection extends AbstractConnection { return session.isTrue("read"); } else if ("UNSEEN".equals(token) || "NEW".equals(token)) { return session.isFalse("read"); + } else if ("DRAFT".equals(token)) { + conditions.draft = Boolean.TRUE; + } else if ("UNDRAFT".equals(token)) { + conditions.draft = Boolean.FALSE; } else if ("DELETED".equals(token)) { // conditions.deleted = Boolean.TRUE; return session.isEqualTo("deleted", "1"); diff --git a/src/test/davmail/imap/TestImap.java b/src/test/davmail/imap/TestImap.java index 252462f5..2af6cd31 100644 --- a/src/test/davmail/imap/TestImap.java +++ b/src/test/davmail/imap/TestImap.java @@ -316,6 +316,14 @@ public class TestImap extends AbstractImapTestCase { assertEquals(". OK SEARCH completed", readFullAnswer(".")); } + public void testSearchUndraft() throws IOException { + testSelectInbox(); + writeLine(". UID SEARCH UNDRAFT"); + assertEquals(". OK SEARCH completed", readFullAnswer(".")); + writeLine(". UID SEARCH DRAFT"); + assertEquals(". OK SEARCH completed", readFullAnswer(".")); + } + public void testBrokenPipe() throws IOException, InterruptedException { testSelectInbox(); writeLine(". UID FETCH 1:* (RFC822.SIZE BODY.TEXT)");