1 22 23 package gnu.mail.providers.mbox; 24 25 import java.io.*; 26 import java.net.*; 27 import java.util.Vector ; 28 import javax.mail.*; 29 import javax.mail.event.*; 30 import java.util.Hashtable ; 31 import gnu.mail.util.*; 32 import gnu.mail.treeutil.StatusEvent; 33 import gnu.mail.treeutil.StatusListener; 34 import gnu.mail.treeutil.StatusSource; 35 36 42 public class MboxStore 43 extends Store 44 implements StatusSource 45 { 46 47 private static final char separatorChar = '/'; 48 49 static int fetchsize = 1024; 50 static boolean attemptFallback = true; 51 52 Vector statusListeners = new Vector (); 53 54 57 public MboxStore(Session session, URLName urlname) 58 { 59 super(session, urlname); 60 String fs = session.getProperty("mail.mbox.fetchsize"); 61 if (fs!=null) 62 { 63 try 64 { 65 fetchsize = Math.max(Integer.parseInt(fs), 1024); 66 } 67 catch (NumberFormatException e) 68 { 69 log("fetchsize "+fs+" is not a number"); 70 } 71 } 72 String af = session.getProperty("mail.mbox.attemptFallback"); 73 if (af!=null) 74 attemptFallback = Boolean.valueOf(af).booleanValue(); 75 } 76 77 80 protected boolean protocolConnect( 81 String host, 82 int port, 83 String username, 84 String password) 85 throws MessagingException 86 { 87 return true; 88 } 89 90 93 public Folder getDefaultFolder() 94 throws MessagingException 95 { 96 if (url!=null) 99 { 100 String file = url.getFile(); 101 if (file!=null && file.length()>0) 102 return getFolder(file); 103 } 104 String mailhome = session.getProperty("mail.mbox.mailhome"); 106 if (mailhome == null) 107 { 108 try 109 { 110 String userhome = System.getProperty("user.home"); 111 mailhome = userhome+"/Mail"; if (!exists(mailhome)) 113 mailhome = userhome+"/mail"; 114 if (!exists(mailhome)) 115 mailhome = null; 116 } 117 catch (SecurityException e) 118 { 119 log("access denied reading system properties"); 120 mailhome = "/"; 121 } 122 } 123 return getFolder(mailhome); 124 } 125 126 129 public Folder getFolder(String filename) 130 throws MessagingException 131 { 132 boolean inbox = false; 133 if ("inbox".equalsIgnoreCase(filename)) 134 { 135 String inboxname = session.getProperty("mail.mbox.inbox"); 137 if (!exists(inboxname)) 138 inboxname = null; 139 if (inboxname==null && attemptFallback) 140 { 141 try 143 { 144 String username = System.getProperty("user.name"); 145 inboxname = "/var/mail/"+username; 146 if (!exists(inboxname)) 147 inboxname = "/var/spool/mail/"+username; 148 if (!exists(inboxname)) 149 { 150 inboxname = null; 151 String userhome = System.getProperty("user.home"); 152 inboxname = userhome+"/mbox"; 153 } 154 if (!exists(inboxname)) 155 inboxname = null; 156 } 157 catch (SecurityException e) 158 { 159 log("unable to access system properties"); 161 } 162 } 163 if (inboxname!=null) 164 { 165 filename = inboxname; 166 inbox = true; 167 } 168 } 170 171 StringBuffer buf = new StringBuffer (); 173 if (filename.length()<1 || filename.charAt(0)!=separatorChar) 174 buf.append(File.separator); 175 if (separatorChar!=File.separatorChar) 176 buf.append(filename.replace(separatorChar, File.separatorChar)); 177 else 178 buf.append(filename); 179 filename = buf.toString(); 180 181 return new MboxFolder(this, filename, inbox); 182 } 183 184 187 private boolean exists(String filename) 188 { 189 if (filename!=null) 190 { 191 File file = new File(filename); 192 if (separatorChar!=File.separatorChar) 193 file = new File(filename.replace(separatorChar, File.separatorChar)); 194 return file.exists(); 195 } 196 return false; 197 } 198 199 202 public Folder getFolder(URLName urlname) 203 throws MessagingException 204 { 205 return getFolder(urlname.getFile()); 206 } 207 208 Session getSession() 209 { 210 return session; 211 } 212 213 216 void log(String message) 217 { 218 Session.log("mbox: "+message); 219 } 220 221 223 230 public void addStatusListener(StatusListener l) 231 { 232 synchronized (statusListeners) 233 { 234 statusListeners.addElement(l); 235 } 236 } 237 238 243 public void removeStatusListener(StatusListener l) 244 { 245 synchronized (statusListeners) 246 { 247 statusListeners.removeElement(l); 248 } 249 } 250 251 256 protected void processStatusEvent(StatusEvent event) 257 { 258 StatusListener[] listeners; 259 synchronized (statusListeners) 260 { 261 listeners = new StatusListener[statusListeners.size()]; 262 statusListeners.copyInto(listeners); 263 } 264 switch (event.getType()) 265 { 266 case StatusEvent.OPERATION_START: 267 for (int i=0; i<listeners.length; i++) 268 listeners[i].statusOperationStarted(event); 269 break; 270 case StatusEvent.OPERATION_UPDATE: 271 for (int i=0; i<listeners.length; i++) 272 listeners[i].statusProgressUpdate(event); 273 break; 274 case StatusEvent.OPERATION_END: 275 for (int i=0; i<listeners.length; i++) 276 listeners[i].statusOperationEnded(event); 277 break; 278 } 279 } 280 281 } 282 | Popular Tags |