From: adam Date: Sat, 23 Oct 2004 22:17:10 +0000 (+0000) Subject: keep MIME headers in a byte[] until requested X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=8bed6f7a1b4b9336c71c89711df9def5c27d22c5;hp=f9cb58d99bd3c05d01446d261736bb004b18ad02;p=org.ibex.mail.git keep MIME headers in a byte[] until requested darcs-hash:20041023221710-5007d-246b0c0af71cd7dea3074a97779891ea54d2fe34.gz --- diff --git a/src/org/ibex/mail/MIME.java b/src/org/ibex/mail/MIME.java index e47b056..3258b6b 100644 --- a/src/org/ibex/mail/MIME.java +++ b/src/org/ibex/mail/MIME.java @@ -173,6 +173,7 @@ public class MIME { private Hashtable head = new Hashtable(); public final int lines; public final String raw; + public String toString() { return raw; } public Object get(Object s) { return head.get(((String)s).toLowerCase()); } public String gets(String s) { return (String)get(s); } public static String uncomment(String val) { diff --git a/src/org/ibex/mail/target/FileBasedMailbox.java b/src/org/ibex/mail/target/FileBasedMailbox.java index c62cb17..bf5d370 100644 --- a/src/org/ibex/mail/target/FileBasedMailbox.java +++ b/src/org/ibex/mail/target/FileBasedMailbox.java @@ -53,7 +53,7 @@ public class FileBasedMailbox extends Mailbox.Default { public Cache(File dir) { this.dir = dir; } - public void init(Prevayler prevayler) throws IOException { + public void init(final Prevayler prevayler) throws IOException { dir.mkdirs(); Log.info(this, "initializing maildir " + dir.getParent()); boolean invalid = false; @@ -70,7 +70,9 @@ public class FileBasedMailbox extends Mailbox.Default { if (file.charAt(0)!='.' && !(new File(dir.getParent() + slash + file).isDirectory())) if (get(file) == null) new Entry(this, prevayler, file); Log.info(this, " done initializing maildir " + dir.getParent()); - prevayler.takeSnapshot(); + new Thread() { public void run() { + try { prevayler.takeSnapshot(); } catch (Exception e) { Log.error(this, e); } + } }.start(); } public static class Drop implements Transaction { @@ -95,16 +97,17 @@ public class FileBasedMailbox extends Mailbox.Default { } public static class Entry implements Serializable { - public final MIME.Headers headers; + private final byte[] header; public final String name; private int uid; private boolean seen; + public MIME.Headers headers() { return new MIME.Headers(new Stream(new ByteArrayInputStream(header)), true); } public Entry(Cache cache, Prevayler prevayler, String name) throws IOException { File f = new File(cache.dir.getParent()+slash+name); seen = f.lastModified() == MAGIC_DATE; this.name = name; - headers = new MIME.Headers(new Stream(new FileInputStream(f)), true); + header = new MIME.Headers(new Stream(new FileInputStream(f)), true).toString().getBytes(); prevayler.execute(new Transaction() { public void executeOn(Object o, Date now) { Cache cache = (Cache)o; @@ -219,7 +222,7 @@ public class FileBasedMailbox extends Mailbox.Default { private class Iterator extends Mailbox.Default.Iterator { int cur = -1; private Cache.Entry entry() { return cache.getLinear(cur); } - public MIME.Headers head() { return done() ? null : entry().headers; } + public MIME.Headers head() { return done() ? null : entry().headers(); } public boolean done() { return cur >= cache.size(); } public boolean next() { cur++; return !done(); } public boolean seen() { return done() ? false : entry().seen(); }