X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2Ftarget%2FFileBasedMailbox.java;h=3f198d074429e27d5cacea58a7d1001f7068305d;hb=8a4fb7b7043f096c7901f147295e5a539fbd71a6;hp=e3b9afdc49e03041109b0661d44656ead5c0fe23;hpb=0f7ce01e0256db7bf28e104887f78159ca23aed2;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/target/FileBasedMailbox.java b/src/org/ibex/mail/target/FileBasedMailbox.java index e3b9afd..3f198d0 100644 --- a/src/org/ibex/mail/target/FileBasedMailbox.java +++ b/src/org/ibex/mail/target/FileBasedMailbox.java @@ -21,17 +21,22 @@ public class FileBasedMailbox extends Mailbox.Default { public static final long MAGIC_DATE = 0; private static final char slash = File.separatorChar; - private static final WeakHashMap instances = new WeakHashMap(); + private static final WeakHashMap instances = new WeakHashMap(); public String toString() { return "[FileBasedMailbox " + path.getAbsolutePath() + "]"; } public Mailbox slash(String name, boolean create) { return getFileBasedMailbox(path.getAbsolutePath()+slash+name, create); } // FIXME: should be a File() - public static synchronized FileBasedMailbox getFileBasedMailbox(String path, boolean create) { + public static synchronized Mailbox getFileBasedMailbox(String path, boolean create) { try { - FileBasedMailbox ret = instances.get(path); + Mailbox ret = instances.get(path); if (ret == null) { if (!create && !(new File(path).exists())) return null; - instances.put(path, ret = new FileBasedMailbox(new File(path))); + if (new File(new File(path)+"/subscribers").exists()) { + ret = new MailingList(new File(path), new FileBasedMailbox(new File(path))); + } else { + ret = new FileBasedMailbox(new File(path)); + } + instances.put(path, ret); } return ret; } catch (Exception e) { @@ -72,16 +77,36 @@ public class FileBasedMailbox extends Mailbox.Default { if (files[i].indexOf('.') != -1) files[i] = files[i].substring(0, files[i].indexOf('.')); int n = Integer.parseInt(files[i]); if (n>=uidNext) uidNext = n; - } catch(Exception e) { /* DELIBERATE */ } + } catch(Exception e) { Log.error(this, e); } } } + public String[] sort(String[] s) { + Arrays.sort(s); + return s; + } + + public String[] files() { + String[] s = path.list(filter); + Arrays.sort(s, comparator); + return s; + } + + private static Comparator comparator = new Comparator() { + public int compare(String a, String b) { + if (a.indexOf('.')==-1) return a.compareTo(b); + if (b.indexOf('.')==-1) return a.compareTo(a); + int ai = Integer.parseInt(a.substring(0, a.indexOf('.'))); + int bi = Integer.parseInt(b.substring(0, b.indexOf('.'))); + return aibi ? 1 : 0; + } + }; public Mailbox.Iterator iterator() { return new Iterator(); } public synchronized void add(Message message) { add(message, Mailbox.Flag.RECENT); } public String[] children() { Vec vec = new Vec(); - String[] list = path.list(); + String[] list = sort(path.list()); for(int i=0; i= files.length; } public boolean next() { cur++; return !done(); } @@ -131,7 +159,7 @@ public class FileBasedMailbox extends Mailbox.Default { if (done()) return null; FileInputStream fis = null; try { - return new Headers(new Stream(new FileInputStream(file()))); + return new Headers.Original(new Stream(new FileInputStream(file()))); } catch (IOException e) { throw new MailException.IOException(e); } finally { if (fis != null) try { fis.close(); } catch (Exception e) { /* DELIBERATE */ } } } @@ -146,14 +174,16 @@ public class FileBasedMailbox extends Mailbox.Default { } public static class Servlet extends HttpServlet { - public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {doGet(request, response);} + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); } private void frames(HttpServletRequest request, HttpServletResponse response, boolean top) throws IOException { - String basename = request.getServletPath(); + String basename = request.getRequestURI(); PrintWriter pw = new PrintWriter(response.getWriter()); pw.println(""); if (top) { pw.println(" "); - pw.println(" "); + //pw.println(" "); + //pw.println(" "); + pw.println(" "); pw.println(" "); } else { pw.println(" "); @@ -167,10 +197,11 @@ public class FileBasedMailbox extends Mailbox.Default { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String frame = request.getParameter("frame"); - String basename = request.getServletPath(); + String basename = request.getRequestURI(); if (frame == null) { frames(request, response, true); return; } if (frame.equals("top")) { frames(request, response, false); return; } + if (frame.equals("banner")) { banner(request, response); return; } if (frame.equals("topleft")) { return; } if (request.getServletPath().indexOf("..") != -1) throw new IOException(".. not allowed in image paths"); @@ -200,30 +231,83 @@ public class FileBasedMailbox extends Mailbox.Default { throws IOException { PrintWriter pw = new PrintWriter(response.getWriter()); pw.println(""); + pw.println(" "); + pw.println(" "); + pw.println(" "); pw.println(" "); - pw.println("
");
             if (request.getParameter("msgnum") != null) {
                 int target = Integer.parseInt(request.getParameter("msgnum"));
-                for(Mailbox.Iterator it = mbox.iterator(); it.next();) {
-                    if (it.num() == target) {
-                        StringBuffer tgt = new StringBuffer();
-                        it.cur().getBody().getStream().transcribe(tgt);
-                        pw.println(tgt.toString());
+                Mailbox.Iterator it = mbox.iterator();
+                while(it.next())
+                    if (it.num() == target)
                         break;
+                if (it.cur() != null) {
+                    pw.println("    ");
+                    pw.println("      
"); + Headers h = it.cur().headers; + pw.println(" Subject: " + it.cur().subject +"
"); + pw.println(" From: " + it.cur().from +"
"); + pw.println(" Date: " + it.cur().date +"
"); + /* + for(java.util.Enumeration e = h.names(); e.hasMoreElements();) { + String key = (String)e.nextElement(); + if (key==null || key.length()==0 || key.equals("from") || + key.equals("to") || key.equals("subject") || key.equals("date")) continue; + key = Character.toUpperCase(key.charAt(0)) + key.substring(1); + String val = h.get(key); + for(int i=key.length(); i<15; i++)pw.print(" "); + pw.print(key+": "); + pw.println(val); } + */ + pw.print("
");
+                    StringBuffer tgt = new StringBuffer();
+                    it.cur().getBody().getStream().transcribe(tgt);
+                    pw.println(tgt.toString());
+                    pw.println("    
"); } } - pw.println("
"); pw.println(" "); pw.println(""); + pw.flush(); + pw.close(); } + private void banner(HttpServletRequest request, HttpServletResponse response) throws IOException { + String basename = request.getServletPath(); + String realpath = getServletContext().getRealPath(basename); + /* + MailingList list = MailingList.getMailingList(realpath); + list.banner(request, response); + */ + banner(request, response); + } + private void topright(HttpServletRequest request, HttpServletResponse response, String[][] messages) throws IOException { PrintWriter pw = new PrintWriter(response.getWriter()); - String basename = request.getServletPath(); + String basename = request.getRequestURI(); pw.println(""); pw.println(" "); pw.println("