Author: dbkr
Date: 2006-06-03 23:27:44 +0000 (Sat, 03 Jun 2006)
New Revision: 9032

Modified:
   trunk/apps/fnmail/src/fnmail/FNMail.java
   trunk/apps/fnmail/src/fnmail/MessageSender.java
   trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java
   trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java
Log:
Use a temporary directory in the same place as the data directory so we can 
rename files (more atomic)


Modified: trunk/apps/fnmail/src/fnmail/FNMail.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/FNMail.java    2006-06-03 19:40:15 UTC (rev 
9031)
+++ trunk/apps/fnmail/src/fnmail/FNMail.java    2006-06-03 23:27:44 UTC (rev 
9032)
@@ -8,7 +8,15 @@
 import fnmail.imap.IMAPListener;
 import fnmail.smtp.SMTPListener;

-class FNMail {
+public class FNMail {
+       private static final String TEMPDIRNAME = "temp";
+       private static File datadir;
+       private static File tempdir;
+       
+       public static File getTempDir() {
+               return FNMail.tempdir;
+       }
+
        public static void main(String[] args) {
                String fcphost = "localhost";
                int fcpport = 9481;
@@ -72,13 +80,24 @@
                fcpthread.start();

                // start a SingleAccountWatcher for each account
-               File dir = new File("data");
-               if (!dir.exists()) {
+               FNMail.datadir = new File("data");
+               if (!FNMail.datadir.exists()) {
                        System.out.println("Starting fnmail for the first 
time.");
                        System.out.println("You will probably want to add an 
account by running fnmail with arguments --newaccount <username>");
-                       dir.mkdir();
+                       if (!FNMail.datadir.mkdir()) {
+                               System.out.println("Couldn't create data 
directory. Please ensure that the user you are running fnmail as has write 
access to its working directory");
+                               System.exit(1);
+                       }
                }
-               File[] files = dir.listFiles();
+               FNMail.tempdir = new File(FNMail.TEMPDIRNAME);
+               if (!FNMail.tempdir.exists()) {
+                       if (!FNMail.tempdir.mkdir()) {
+                               System.out.println("Couldn't create temporary 
directory. Please ensure that the user you are running fnmail as has write 
access to its working directory");
+                               System.exit(1);
+                       }
+               }
+               
+               File[] files = FNMail.datadir.listFiles();
                for (int i = 0; i < files.length; i++) {
                        if (files[i].getName().equals(".") || 
files[i].getName().equals(".."))
                                continue;
@@ -89,7 +108,7 @@
                }

                // and a sender thread
-               MessageSender sender = new MessageSender(dir, fcpconn);
+               MessageSender sender = new MessageSender(FNMail.datadir, 
fcpconn);
                Thread senderthread = new Thread(sender);
                senderthread.setDaemon(true);
                senderthread.start();

Modified: trunk/apps/fnmail/src/fnmail/MessageSender.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/MessageSender.java     2006-06-03 19:40:15 UTC 
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/MessageSender.java     2006-06-03 23:27:44 UTC 
(rev 9032)
@@ -19,17 +19,17 @@
        public static final String OUTBOX_DIR = "outbox";
        public static final int MIN_RUN_TIME = 60000;
        public static final String NIM_KEY_PREFIX = "KSK at fnmail-nim-";
-       private final File dir;
+       private final File datadir;
        private final FCPConnection fcpconn;
        private Thread senderthread;

        public MessageSender(File d, FCPConnection conn) {
-               this.dir = d;
+               this.datadir = d;
                this.fcpconn = conn;
        }

        public void send_message(String from_user, Vector to, File msg) throws 
IOException {
-               File user_dir = new File(this.dir, from_user);
+               File user_dir = new File(this.datadir, from_user);
                File outbox = new File(user_dir, OUTBOX_DIR);

                Enumeration e = to.elements();
@@ -42,7 +42,7 @@
        }

        private synchronized void copyToOutbox(File src, File outbox, String 
to) throws IOException {
-               File tempfile = File.createTempFile("fmail-msg-tmp", null);
+               File tempfile = File.createTempFile("fmail-msg-tmp", null, 
FNMail.getTempDir());

                FileOutputStream fos = new FileOutputStream(tempfile);
                FileInputStream fis = new FileInputStream(src);
@@ -72,7 +72,7 @@
                        long start = System.currentTimeMillis();

                        // iterate through users
-                       File[] files = dir.listFiles();
+                       File[] files = this.datadir.listFiles();
                        for (int i = 0; i < files.length; i++) {
                                if (files[i].getName().startsWith("."))
                                        continue;

Modified: trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java    2006-06-03 19:40:15 UTC 
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java    2006-06-03 23:27:44 UTC 
(rev 9032)
@@ -9,6 +9,8 @@
 import java.util.Enumeration;
 import java.util.Collections;

+import fnmail.FNMail;
+
 import freenet.support.io.LineReader;
 import freenet.support.io.LineReadingInputStream;

@@ -83,7 +85,7 @@

        private void readData(InputStream is, int len) {
                try {
-                       this.data = File.createTempFile("fnmail-fcp", null);
+                       this.data = File.createTempFile("fnmail-fcp", null, 
FNMail.getTempDir());
                } catch (Exception e) {
                        this.data = null;
                        return;

Modified: trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java  2006-06-03 19:40:15 UTC 
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java  2006-06-03 23:27:44 UTC 
(rev 9032)
@@ -12,6 +12,7 @@
 import java.util.Vector;

 import thirdparty.Base64Coder;
+import fnmail.FNMail;
 import fnmail.AccountManager;
 import fnmail.MessageSender;
 import fnmail.utils.EmailAddress;
@@ -231,7 +232,7 @@
                }

                try {
-                       File tempfile = File.createTempFile("fnmail-", 
".message");
+                       File tempfile = File.createTempFile("fnmail-", 
".message", FNMail.getTempDir());
                        PrintWriter pw = new PrintWriter(new 
FileOutputStream(tempfile));

                        this.ps.print("354 Go crazy\r\n");


Reply via email to