Author: dbkr
Date: 2006-09-03 20:47:50 +0000 (Sun, 03 Sep 2006)
New Revision: 10386

Modified:
   trunk/apps/Freemail/src/freemail/imap/IMAPHandler.java
Log:
Some fairly minor IMAP fixes. Messages not being marked as read, and flags not 
being sent on a store.


Modified: trunk/apps/Freemail/src/freemail/imap/IMAPHandler.java
===================================================================
--- trunk/apps/Freemail/src/freemail/imap/IMAPHandler.java      2006-09-03 
18:36:23 UTC (rev 10385)
+++ trunk/apps/Freemail/src/freemail/imap/IMAPHandler.java      2006-09-03 
20:47:50 UTC (rev 10386)
@@ -75,6 +75,8 @@
                        this.handle_select(msg);
                } else if (msg.type.equals("noop")) {
                        this.handle_noop(msg);
+               } else if (msg.type.equals("check")) {
+                       this.handle_check(msg);
                } else if (msg.type.equals("uid")) {
                        this.handle_uid(msg);
                } else if (msg.type.equals("fetch")) {
@@ -277,6 +279,10 @@
                this.reply(msg, "OK NOOP completed");
        }

+       private void handle_check(IMAPMessage msg) {
+               this.reply(msg, "OK Check completed");
+       }
+       
        private void handle_fetch(IMAPMessage msg) {
                int from;
                int to;
@@ -419,7 +425,9 @@

                        this.reply(msg, "OK Fetch completed");
                } else if (msg.args[0].equalsIgnoreCase("store")) {
+                       int oldsize = msgs.size();
                        msgs = msgs.tailMap(new Integer(from));
+                       int firstmsg = oldsize - msgs.size();
                        msgs = msgs.headMap(new Integer(to + 1));

                        MailMessage[] targetmsgs = new MailMessage[msgs.size()];
@@ -428,7 +436,7 @@
                                targetmsgs[i] = 
(MailMessage)msgs.values().toArray()[i];
                        }

-                       this.do_store(msg.args, 2, targetmsgs, msg, -1);
+                       this.do_store(msg.args, 2, targetmsgs, msg, firstmsg, 
true);

                        this.reply(msg, "OK Store completed");
                } else if (msg.args[0].equalsIgnoreCase("copy")) {
@@ -561,7 +569,12 @@
                        this.ps.print(a.substring(0, "body".length()));
                        this.ps.flush();
                        a = a.substring("body".length());
-                       return this.sendBody(mmsg, a);
+                       if (this.sendBody(mmsg, a)) {
+                               mmsg.flags.set("\\Seen", true);
+                               mmsg.storeFlags();
+                               return true;
+                       }
+                       return false;
                } else if (attr.startsWith("rfc822.header")) {
                        this.ps.print(a.substring(0, "rfc822.header".length()));
                        this.ps.flush();
@@ -719,12 +732,12 @@
                        msgs[i - from] = (MailMessage) allmsgs[i];
                }

-               do_store(msg.args, 1, msgs, msg, from + 1);
+               do_store(msg.args, 1, msgs, msg, from + 1, false);

                this.reply(msg, "OK Store completed");
        }

-       private void do_store(String[] args, int offset, MailMessage[] mmsgs, 
IMAPMessage msg, int firstmsgnum) {
+       private void do_store(String[] args, int offset, MailMessage[] mmsgs, 
IMAPMessage msg, int firstmsgnum, boolean senduid) {
                if (args[offset].toLowerCase().indexOf("flags") < 0) {
                        // IMAP4Rev1 can only store flags, so you're
                        // trying something crazy
@@ -764,16 +777,20 @@
                        for (int i = 0; i < mmsgs.length; i++) {
                                StringBuffer buf = new StringBuffer("");

-                               if (firstmsgnum < 0) {
-                                       buf.append(mmsgs[i].getUID() + " FETCH 
FLAGS (");
+                               buf.append((i+firstmsgnum));
+                               if (senduid) {
+                                       buf.append(" FETCH (UID ");
+                                       buf.append(mmsgs[i].getUID());
+                                       buf.append(" FLAGS (");
+                                       buf.append(mmsgs[i].flags.getFlags());
+                                       buf.append("))");
                                } else {
-                                       buf.append((i+firstmsgnum) + " FETCH 
FLAGS (");
+                                       
+                                       buf.append(" FETCH FLAGS (");
+                                       buf.append(mmsgs[i].flags.getFlags());
+                                       buf.append(")");
                                }

-                               buf.append(mmsgs[i].flags.getFlags());
-                               
-                               buf.append(")");
-                               
                                this.sendState(buf.toString());
                        }
                }


Reply via email to