X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FIMAP.java;h=582a36d6e430a99555f5e229252caa5266c2c922;hb=6e71e9912cef58aa9bd6ccf8af335aa6f69296a5;hp=9038cc13514ec7f360e5ecec65ee1f8eefaccb95;hpb=7783d407061534f9158f68934a77867a461aa0b5;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/IMAP.java b/src/org/ibex/mail/IMAP.java index 9038cc1..582a36d 100644 --- a/src/org/ibex/mail/IMAP.java +++ b/src/org/ibex/mail/IMAP.java @@ -237,8 +237,8 @@ public class IMAP { 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; - int size = message == null ? 0 : message.getLength(); - client.fetch(it.imapNumber(), it.getFlags(), size, message, it.uid()); + 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); } } @@ -310,10 +310,10 @@ public class IMAP { case EXPUNGE: selected(); api.expunge(); break; case UNSELECT: selected(); api.unselect(); selected = false; break; case CREATE: api.create(token().astring()); break; - case FETCH: selected(); fetch(((lastuid=uid) - ? Query.uid(token().set(maxn(uid))) - : Query.imapNumber(token().set(maxn(uid)))), - lastfetch=token().lx(), 0, 0, 0, uid, 0); break; + case FETCH: selected(); lastuid = uid; fetch((uid + ? Query.uid(token().set(maxn(uid))) + : Query.imapNumber(token().set(maxn(uid)))), + lastfetch=token().lx(), 0, 0, 0, uid, 0); break; case COPY: selected(); api.copy(uid ? Query.uid(token().set(maxn(uid))) : Query.imapNumber(token().set(maxn(uid))), token().astring()); break; @@ -358,7 +358,8 @@ public class IMAP { Date arrival = new Date(); Parser.Token t = token(); if (t.type == t.LIST) { flags = t.flags(); t = token(); } - if (t.type != t.QUOTED) { arrival = t.datetime(); t = token(); } + Parser.Token t2 = token(false); + if (t2 != null) { arrival = t.datetime(); t = t2; } api.append(m, flags, arrival, t.q()); break; } case STORE: { @@ -459,8 +460,8 @@ public class IMAP { } else if (s.equals("FLAGS")) { spec|=FLAGS; if(e){r.append(" ");r.append(Printer.flags(flags));} } else if (s.equals("INTERNALDATE")) { spec|=INTERNALDATE; if(e){r.append(" ");r.append(Printer.date(m.arrival));} } else if (s.equals("RFC822")) { spec|=RFC822; if(e){r.append(" ");r.append(Printer.message(m));} - } else if (s.equals("RFC822.TEXT")) { spec|=RFC822TEXT; if(e){r.append(" ");r.append(Printer.qq(getBodyString(m)));} - } else if (s.equals("RFC822.HEADER")){ spec|=HEADER;if(e){r.append(" ");r.append(Printer.qq(m.headers.getString()+"\r\n"));} + } else if (s.equals("RFC822.TEXT")) { spec|=RFC822TEXT; if(e){r.append(" ");r.append(Printer.qq(m.getStream()));} + } else if (s.equals("RFC822.HEADER")){ spec|=HEADER; if(e){r.append(" ");r.append(Printer.qq(m.headers.getStream().append("\r\n")));} } else if (s.equals("RFC822.SIZE")) { spec|=RFC822SIZE; if(e){r.append(" ");r.append(m.getLength());} } else if (s.equals("UID")) { spec|=UID; if(e){r.append(" ");r.append(muid); } } else if (!(s.equals("BODY.PEEK") || s.equals("BODY"))) { throw new Server.No("unknown fetch argument: " + s); @@ -472,17 +473,17 @@ public class IMAP { if (e) { r.append(" "); r.append(Printer.bodystructure(m)); } continue; //{ if (e) { r.append(" "); r.append(Printer.qq(m.body)); } continue; } } - String payload = ""; + Fountain payload = Fountain.Util.create(""); r.append("["); Parser.Token[] list = t[++i].l(); s = list.length == 0 ? "" : list[0].s.toUpperCase(); r.append(s); - if (list.length == 0) { spec |= RFC822TEXT; if(e) payload = m.headers.getString()+"\r\n"+getBodyString(m); } - else if (s.equals("") || s.equals("1")) { spec |= RFC822TEXT; if(e) payload = m.headers.getString()+"\r\n"+getBodyString(m); } - else if (s.equals("TEXT")) { spec |= RFC822TEXT; if(e) payload = getBodyString(m); } - else if (s.equals("HEADER")) { spec |= HEADER; if(e) payload = m.headers.getString()+"\r\n"; } - else if (s.equals("HEADER.FIELDS")) { spec |= FIELDS; payload=headers(r,t[i].l()[1].sl(),false,m,e); } - else if (s.equals("HEADER.FIELDS.NOT")) { spec |= FIELDSNOT; payload=headers(r,t[i].l()[1].sl(),true,m,e); } + if (list.length == 0) { spec |= RFC822TEXT; if(e) payload = m; } + else if (s.equals("") || s.equals("1")) { spec |= RFC822TEXT; if(e) payload = m; } + else if (s.equals("TEXT")) { spec |= RFC822TEXT; if(e) payload = m.getBody(); } + else if (s.equals("HEADER")) { spec |= HEADER; if(e) payload = Fountain.Util.concat(m.headers, Fountain.Util.create("\r\n")); } + else if (s.equals("HEADER.FIELDS")) { spec |= FIELDS; payload=Fountain.Util.create(headers(r,t[i].l()[1].sl(),false,m,e)); } + else if (s.equals("HEADER.FIELDS.NOT")) { spec |= FIELDSNOT; payload=Fountain.Util.create(headers(r,t[i].l()[1].sl(),true,m,e)); } else if (s.equals("MIME")) { throw new Server.Bad("MIME not supported"); } else throw new Server.Bad("unknown section type " + s); if (i"); } + if (e) { + //payload = payload.substring(start, Math.min(end+1,payload.getLength())); r.append("<"+start+">"); + // FIXME + throw new RuntimeException("this had to be disabled"); + } } - if (e) { r.append("] "); r.append(Printer.qq(payload)); } + if (e) { r.append("] "); r.append(Printer.qq(payload.getStream())); } } } if (e) {