mail.dir, mail.shell
[org.ibex.mail.git] / src / org / ibex / mail / target / Script.java
index b509b86..0206e90 100644 (file)
@@ -4,7 +4,6 @@
 
 package org.ibex.mail.target;
 import org.ibex.js.*;
-import org.ibex.io.*;
 import org.ibex.util.*;
 import org.ibex.mail.*;
 import org.ibex.mail.filter.*;
@@ -129,6 +128,8 @@ public class Script extends JS.Obj implements Target {
             case "mail.bounce": return METHOD;
             case "mail.reject": return METHOD;
             case "mail.my": return getSub("mail.my");
+            case "mail.dir": return METHOD;
+            case "mail.shell": return METHOD;
             case "mail.my.prefs": try {
                     return new org.ibex.js.Directory(new File("/etc/org.ibex.mail.prefs"));
             } catch (IOException e) { throw new JSExn(e.toString()); }
@@ -149,6 +150,32 @@ public class Script extends JS.Obj implements Target {
             try {
                 if (name.equals("url.encode")) return JSU.S(java.net.URLEncoder.encode(JSU.toString(args[0])));
                 if (name.equals("mail.list")) return JSReflection.wrap(MailingList.getMailingList(JSU.toString(args[0])));
+                if (name.equals("mail.dir")) {
+                    return new org.ibex.js.Directory(new File(JSU.toString(args[0])));
+                }
+                if (name.equals("mail.shell")) {
+                    // FIXME: EEEEEVIL!
+                    Log.warn("dbug", args[0].getClass().getName());
+                    Log.warn("dbug", args[1].getClass().getName());
+                    final Process p = Runtime.getRuntime().exec(JSU.toString(args[1]));
+                    Message m = (Message)args[0];
+                    new Thread() {
+                        public void run() {
+                            try {
+                                BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+                                String s = null;
+                                while((s = br.readLine())!=null) 
+                                    Log.warn("shell", s);
+                            } catch (Exception e) { e.printStackTrace(); }
+                        }
+                    }.start();
+                    OutputStream os = p.getOutputStream();
+                    Stream stream = new Stream(os);
+                    m.getStream().transcribe(stream);
+                    stream.close();
+                    p.waitFor();
+                    return null;
+                }
                 if (name.equals("date")) { return new JSDate(args); }
                 if (name.equals("mail.send") || name.equals("send") || name.equals("mail.attempt") || name.equals("attempt")) {
                     boolean attempt = name.equals("mail.attempt") || name.equals("attempt");