X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMailbox.java;h=3d3f8bb02050519ed433d19b79fb0dfb8078c359;hb=4b76a31e8f86bc8de673899bbb45252c01e9a0f6;hp=402e316e3cd5676333df44ef64bbb8f73b121bda;hpb=e660b54a3078685fdc64fee0df4bcf94c9afef8e;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Mailbox.java b/src/org/ibex/mail/Mailbox.java index 402e316..3d3f8bb 100644 --- a/src/org/ibex/mail/Mailbox.java +++ b/src/org/ibex/mail/Mailbox.java @@ -41,14 +41,23 @@ public abstract class Mailbox extends JS.Obj implements Target { private int randomUidValidity = new Random().nextInt(); public int uidValidity() { return randomUidValidity; } + public int maxuid() { + int ret = -1; + for(Mailbox.Iterator it = iterator(); it.next(); ) ret = Math.max(ret, it.uid()); + return ret; + } + /** default, inefficient implementation of Mailbox; only requires a few methods to be implemented */ - public static abstract class Default extends Mailbox { + public static abstract class Default extends Mailbox /* implements MailTree? */ { public Mailbox.Iterator iterator(Query q) { return new Mailbox.Iterator.QueryIterator(q, this); } public void copy(Query q, Mailbox dest) { for(Mailbox.Iterator it = iterator(q); it.next();) dest.insert(it.cur(), it.getFlags()); } public int count(Query q) { int count = 0; for(Mailbox.Iterator it = iterator(q); it.next();) count++; return count; } public MailTree slash(String name, boolean create) { return null; } public String[] children() { return new String[] { }; } public void post(Message message) { insert(message, Flag.RECENT); } + public JS get(JS key) throws JSExn { + return (JS)slash(JSU.toString(key), true); + } public void move(Query q, Mailbox dest) { for(Mailbox.Iterator it = iterator(q);it.next();) { dest.insert(it.cur(), it.getFlags()); it.delete(); } } @@ -67,7 +76,11 @@ public abstract class Mailbox extends JS.Obj implements Target { public static interface Iterator { public abstract Message cur(); public abstract Headers head(); + + // FIXME: change all code to actually use this convention! + /** JDBC convention: iterator starts "before the first element" */ public abstract boolean next(); + public abstract void delete(); /** a unique identifier for this message */