make exception-throwing optional in IMAP mailbox()
authoradam <adam@megacz.com>
Mon, 16 Aug 2004 02:01:27 +0000 (02:01 +0000)
committeradam <adam@megacz.com>
Mon, 16 Aug 2004 02:01:27 +0000 (02:01 +0000)
darcs-hash:20040816020127-5007d-32ed988363b6cbab840a8338e36c400b8e1cad76.gz

src/org/ibex/mail/protocol/IMAP.java

index 1c9b5c6..4ec0fb1 100644 (file)
@@ -98,11 +98,15 @@ public class IMAP {
 
         public MailboxWrapper(Login auth, Client c) { this.auth=auth; this.client=c;}
 
-        private Mailbox mailbox(String name, boolean create) {
+        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;
             Mailbox m = root;
             for(StringTokenizer st = new StringTokenizer(name, sep + ""); st.hasMoreTokens();)
-                if ((m = m.slash(st.nextToken(), create)) == null) throw new Server.No("no such mailbox " + name);
+                if ((m = m.slash(st.nextToken(), create)) == null) {
+                    if (throwexn) throw new Server.No("no such mailbox " + name);
+                    return null;
+                }
             return m;
         }
 
@@ -158,7 +162,7 @@ public class IMAP {
         public void unselect() { selected = null; }
         public void delete(String m0) { delete(mailbox(m0,false)); }
         public void delete(Mailbox m) { if (!m.equals(inbox)) m.destroy(false); else throw new Bad("can't delete inbox"); }
-        public void create(String m) { mailbox(m, true); }
+        public void create(String m) { mailbox(m, true, false); }
         public void append(String m,int f,Date a,String b) { try {
             mailbox(m,false).add(new Message(new Stream(b), new Message.Envelope(null,null,a)),f|Mailbox.Flag.RECENT);
         } catch (Message.Malformed e) { throw new No(e.getMessage()); } }