X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FFileBasedMailbox.java;h=2adf9cdf8f91842332f026a83d766151e938bbf6;hb=588a0070324a2c58e54ccd5f7cdbf8ee7cb3a58d;hp=4c9d4a59398accbf6f092f607a710a0f866cd7a5;hpb=40e53cd3c7abe25902add4c97b8bc9202f3c8931;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/FileBasedMailbox.java b/src/org/ibex/mail/FileBasedMailbox.java index 4c9d4a5..2adf9cd 100644 --- a/src/org/ibex/mail/FileBasedMailbox.java +++ b/src/org/ibex/mail/FileBasedMailbox.java @@ -21,9 +21,12 @@ import javax.servlet.http.*; /** An exceptionally crude implementation of Mailbox relying on POSIXy filesystem semantics */ public class FileBasedMailbox extends Mailbox.Default implements MailTree { - public static final long MAGIC_DATE = 0; + public static final long MAGIC_DATE = 0; private static final char slash = File.separatorChar; - private static final WeakHashMap instances = new WeakHashMap(); + + // FIXME: ideally this should be weak, but we end up getting duplicates of SqliteMailboxes + private static final HashMap instances = new HashMap(); + public String toString() { return "[FileBasedMailbox " + path.getAbsolutePath() + "]"; } public MailTree slash(String name, boolean create) { return getFileBasedMailbox(path.getAbsolutePath()+slash+name, create); } @@ -38,12 +41,17 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree { // 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()); 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) { @@ -92,8 +100,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); } } } @@ -126,6 +136,8 @@ public class FileBasedMailbox extends Mailbox.Default implements MailTree { for(int i=0; i