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());
}
}