remove FileBasedMailbox.get(JS), be sure to set the path
[org.ibex.mail.git] / src / org / ibex / mail / FileBasedMailbox.java
index dd41566..c965b9a 100644 (file)
@@ -35,18 +35,20 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree {
     public void         rename(String subdir, MailTree newParent, String newName) { throw new RuntimeException("FIXME not implemented"); }
     public Mailbox      getMailbox() { return this; }
 
-    public JS get(JS key) throws JSExn {
-        return (JS)slash(JSU.toString(key), true);
-    }
-
     // FIXME: should be a File()
     public static synchronized MailTree getFileBasedMailbox(String path, boolean create) {
+        if (path.endsWith(".sqlite")) path = path.substring(0, path.length()-".sqlite".length());
+       path = new File(path).getAbsolutePath().toString();
         try {
             MailTree ret = instances.get(path);
             if (ret == null) {
-                if (!create && !(new File(path).exists())) return null;
-                ret = new FileBasedMailbox(new File(path));
-                instances.put(path, (FileBasedMailbox)ret);
+                Log.error("n", "no match for " + path + " in " + instances.hashCode());
+                if (new File(path+".sqlite").exists()) ret = new SqliteMailbox(path+".sqlite");
+                else if (new File(path).exists()) ret = new FileBasedMailbox(new File(path));
+                else if (create) ret = new SqliteMailbox(path+".sqlite");
+                else return null;
+                instances.put(path, (MailTree)ret);
+                Log.error("n", "filling " + path + " with " + instances.get(path));
             }
             return ret;
         } catch (Exception e) {
@@ -95,8 +97,10 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree {
             try {
                 if (files[i].indexOf('.') <= 0) continue;
                 files[i] = files[i].substring(0, files[i].indexOf('.'));
-                int n = Integer.parseInt(files[i]);
-                if (n>=uidNext) uidNext = n;
+                try {
+                    int n = Integer.parseInt(files[i]);
+                    if (n>=uidNext) uidNext = n;
+                } catch (NumberFormatException nfe) { continue; }
             } catch(Exception e) { Log.error(this, e); }
         }
     }
@@ -129,6 +133,8 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree {
         for(int i=0; i<list.length; i++) {
             File f = new File(path.getAbsolutePath() + slash + list[i]);
             if (f.isDirectory() && f.getName().charAt(0) != '.') vec.addElement(list[i]);
+            if (!f.isDirectory() && f.getName().endsWith(".sqlite"))
+                vec.addElement(list[i].substring(0, list[i].length()-".sqlite".length()));
         }
         return (String[])vec.copyInto(new String[vec.size()]);
     }
@@ -187,6 +193,7 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree {
             if ((flags & Mailbox.Flag.SEEN) == 0)  f.setLastModified(MAGIC_DATE);
             else if (f.lastModified()==MAGIC_DATE) f.setLastModified(System.currentTimeMillis());
             // FIXME: other flags?
+            // FIXME: definitely need DELETED flag in order to do message moves!
         }
         public Headers head() { return done() ? null : new Headers(new Fountain.File(file())); }
         public Message cur() { return Message.newMessage(new Fountain.File(file())); }