X-Git-Url: http://git.megacz.com/?p=org.ibex.mail.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FIMAP.java;h=a111429e2d5a27d5aa9b32192f6e9a2dcd203db3;hp=dc3b8f3af299fc1dffb322f573fda3d48c9ad366;hb=40e53cd3c7abe25902add4c97b8bc9202f3c8931;hpb=c0cdaca74524315b01e9973c027e689627d3d58e diff --git a/src/org/ibex/mail/IMAP.java b/src/org/ibex/mail/IMAP.java index dc3b8f3..a111429 100644 --- a/src/org/ibex/mail/IMAP.java +++ b/src/org/ibex/mail/IMAP.java @@ -102,7 +102,7 @@ public class IMAP { Mailbox inbox = null; Mailbox selected = null; - MailboxTree root = null; + MailTree root = null; Mailbox selected() { if (selected == null) throw new Bad("no mailbox selected"); return selected; } final Login auth; final Client client; @@ -115,12 +115,12 @@ public class IMAP { private Mailbox mailbox(String name, boolean create) { return mailbox(name, create, true); } private Mailbox mailbox(String name, boolean create, boolean throwexn) { if (name.equalsIgnoreCase("inbox")) return inbox; - MailboxTree mt = mailboxTree(name, create, throwexn); + MailTree mt = mailboxTree(name, create, throwexn); return mt==null ? null : mt.getMailbox(); } - private MailboxTree mailboxTree(String name, boolean create) { return mailboxTree(name, create, true); } - private MailboxTree mailboxTree(String name, boolean create, boolean throwexn) { - MailboxTree m = root; + private MailTree mailboxTree(String name, boolean create) { return mailboxTree(name, create, true); } + private MailTree mailboxTree(String name, boolean create, boolean throwexn) { + MailTree m = root; for(StringTokenizer st = new StringTokenizer(name, sep + ""); st.hasMoreTokens();) if ((m = m.slash(st.nextToken(), create)) == null) { if (throwexn) throw new Server.No("no such mailbox " + name); @@ -144,7 +144,7 @@ public class IMAP { for(int i=0; i 0 ? sep+"" : "") + s; if (mailbox(kid, false) == null) continue; - MailboxTree phant = mailboxTree(kid, false, false); + MailTree phant = mailboxTree(kid, false, false); if (phant != null) { boolean phantom = phant.getMailbox()==null; while(true) { @@ -183,11 +183,16 @@ public class IMAP { public void unselect() { selected = null; } public void delete(String m0) { mailboxTree(dirname(m0),false).rmdir(basename(m0)); } + public void rename(String from0, String to) { Mailbox from = mailbox(from0, false); if (from.equals(inbox)) { from.copy(Query.all(), mailbox(to, true)); } else if (to.equalsIgnoreCase("inbox")) { from.copy(Query.all(), mailbox(to, true)); delete(from0); } - else mailboxTree(dirname(from0), false).rename(dirname(from0), mailboxTree(dirname(to), false), basename(to)); + else mailboxTree(dirname(from0), false) + .rename(dirname(from0), + mailboxTree(dirname(to), + true /* required by IMAP */), + basename(to)); } public void create(String m) { mailbox(m, true, false); } @@ -260,7 +265,7 @@ public class IMAP { public static class Listener implements Client { String selectedName = null; Mailbox inbox = null; - MailboxTree root = null; + MailTree root = null; Server api; Parser parser = null; Connection conn = null; @@ -284,7 +289,7 @@ public class IMAP { } else { Account account = (Account)ret; ((MailboxWrapper)api).root = root = account.getMailbox(IMAP.class); - MailboxTree ibt = root.slash("INBOX", false); + MailTree ibt = root.slash("INBOX", false); Mailbox ib = ibt==null ? null : ibt.getMailbox(); ((MailboxWrapper)api).inbox = inbox = ib; }