optimize IMAP.java to return a "bodyless message" when only headers are requested
authoradam <adam@megacz.com>
Sat, 1 Mar 2008 08:16:04 +0000 (08:16 +0000)
committeradam <adam@megacz.com>
Sat, 1 Mar 2008 08:16:04 +0000 (08:16 +0000)
darcs-hash:20080301081604-5007d-349a37f3d887c883724bbba3fb997c1c70d362e0.gz

src/org/ibex/mail/IMAP.java

index 9588cb4..b4abb24 100644 (file)
@@ -254,8 +254,12 @@ public class IMAP {
         public void fetch(Query q, int spec, String[] headers, int start, int end, boolean uid) {
             for(Mailbox.Iterator it = selected().iterator(q); it.next(); ) {
                 Message message =
-                    ((spec & (BODYSTRUCTURE | ENVELOPE | INTERNALDATE | FIELDS | FIELDSNOT | RFC822 |
-                                            RFC822TEXT | RFC822SIZE | HEADERNOT | HEADER)) != 0) ? it.cur() : null;
+                    ((spec & (BODYSTRUCTURE | RFC822 | RFC822TEXT | RFC822SIZE)) != 0)
+                    ? it.cur()
+                    : ((spec & (ENVELOPE | INTERNALDATE | FIELDS | FIELDSNOT | RFC822SIZE | HEADERNOT | HEADER)) != 0)
+                    ? Message.newMessage(Fountain.Util.concat(it.head(), Fountain.Util.create("\r\n\r\n")))
+                    : null;
+                if (message != null) Log.warn("spec", spec);
                 long size = message == null ? 0 : message.getLength();
                 client.fetch(it.imapNumber(), it.getFlags(), (int)size, message, it.uid());
                 it.setFlags(it.getFlags() & ~Mailbox.Flag.RECENT);