X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMailbox.java;h=3d3f8bb02050519ed433d19b79fb0dfb8078c359;hb=4b76a31e8f86bc8de673899bbb45252c01e9a0f6;hp=e305cc49c52c9025b9d5ffac10a7f55846fa4523;hpb=36f116445938fea33e79f121712c1d258e6d0f8a;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Mailbox.java b/src/org/ibex/mail/Mailbox.java index e305cc4..3d3f8bb 100644 --- a/src/org/ibex/mail/Mailbox.java +++ b/src/org/ibex/mail/Mailbox.java @@ -41,16 +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 void rename(String newName) { throw new MailException("not supported"); } - public void destroy(boolean recursive) { throw new MailException("not supported"); } 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(); } } @@ -69,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 */ @@ -77,10 +88,10 @@ public abstract class Mailbox extends JS.Obj implements Target { /** * Message number according to IMAP semantics. + * - must range from 1..numMessagesInMailbox * - no two messages in the same mailbox may have the same imapNumber * - sorting by uid must yield the same order as sorting them by imapNumber - * - imapNumber may only change if uidValidity changes - * - if uidValidity changes, imapNumbers may change or be reused + * - imapNumber changes when messages with lower imapNumbers are deleted */ public abstract int imapNumber();