diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java index 03c595f66..b73fd134e 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java @@ -203,7 +203,7 @@ public class Mail { formattedSender = getAddress( sender ); shortSender = formattedSender.trim(); if( shortSender.length() > 40 ) { - shortSender = shortSender.substring( 0, 37 ).trim() + "..."; + shortSender = shortSender.substring( 0, 37 ).trim() + "…"; } shortSender = html.encode( shortSender ); } @@ -226,7 +226,7 @@ public class Mail { formattedSubject = subject; shortSubject = formattedSubject; if( formattedSubject.length() > 60 ) - shortSubject = formattedSubject.substring( 0, 57 ).trim() + "..."; + shortSubject = formattedSubject.substring( 0, 57 ).trim() + "…"; shortSubject = html.encode( shortSubject ); } else if( line.toLowerCase(Locale.US).startsWith( "reply-to:" ) ) { diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java index dc3fb8cf3..f61a1698f 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java +++ b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java @@ -37,19 +37,18 @@ public class MailCache { private final POP3MailBox mailbox; private final Hashtable mails; - private final Object synchronizer; MailCache( POP3MailBox mailbox ) { this.mailbox = mailbox; mails = new Hashtable(); - synchronizer = new Object(); } + /** * Fetch any needed data from pop3 server. * * @param uidl message id to get * @param headerOnly fetch only header lines? - * @return An e-mail + * @return An e-mail or null */ public Mail getMail( String uidl, boolean headerOnly ) { @@ -59,10 +58,8 @@ public class MailCache { /* * synchronize update to hashtable */ - synchronized( synchronizer ) { - + synchronized(mails) { mail = mails.get( uidl ); - if( mail == null ) { newMail = new Mail(); mails.put( uidl, newMail ); diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 05bfd816d..aaaef423f 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -47,6 +47,7 @@ import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Comparator; +import java.util.Date; import java.util.Enumeration; import java.util.Iterator; import java.util.Locale; @@ -635,11 +636,13 @@ public class WebMail extends HttpServlet sessionObject.folder.addSorter( SORT_SIZE, new SizeSorter( sessionObject.mailCache ) ); sessionObject.folder.setSortingDirection( Folder.DOWN ); sessionObject.reallyDelete = false; + Debug.debug(Debug.DEBUG, "CONNECTED, YAY"); } else { sessionObject.error += sessionObject.mailbox.lastError(); sessionObject.mailbox.close(); sessionObject.mailbox = null; + Debug.debug(Debug.DEBUG, "NOT CONNECTED, BOO"); } } } @@ -653,6 +656,7 @@ public class WebMail extends HttpServlet private static void processLogout( SessionObject sessionObject, RequestWrapper request ) { if( buttonPressed( request, LOGOUT ) ) { + Debug.debug(Debug.DEBUG, "REMOVING SESSION"); HttpSession session = request.getSession(); session.removeAttribute( "sessionObject" ); session.invalidate(); @@ -1181,6 +1185,10 @@ public class WebMail extends HttpServlet if( sessionObject == null ) { sessionObject = new SessionObject(); httpSession.setAttribute( "sessionObject", sessionObject ); + Debug.debug(Debug.DEBUG, "NEW session " + httpSession.getId() + " state = " + sessionObject.state); + } else { + Debug.debug(Debug.DEBUG, "Existing session " + httpSession.getId() + " state = " + sessionObject.state + + " created " + new Date(httpSession.getCreationTime())); } return sessionObject; } @@ -1267,7 +1275,18 @@ public class WebMail extends HttpServlet sessionObject.imgPath = sessionObject.themePath + "images/"; sessionObject.isMobile = isMobile; + int oldState = sessionObject.state; processStateChangeButtons( sessionObject, request ); + int newState = sessionObject.state; + if (oldState != newState) + Debug.debug(Debug.DEBUG, "STATE CHANGE from " + oldState + " to " + newState); + if (oldState == STATE_AUTH && newState != STATE_AUTH) { + // this isn't working in web.xml, so try setting it here + int oldIdle = httpSession.getMaxInactiveInterval(); + httpSession.setMaxInactiveInterval(60*60*24); // seconds + int newIdle = httpSession.getMaxInactiveInterval(); + Debug.debug(Debug.DEBUG, "Changed idle from " + oldIdle + " to " + newIdle); + } if( sessionObject.state != STATE_AUTH ) processGenericButtons( sessionObject, request ); @@ -1315,9 +1334,12 @@ public class WebMail extends HttpServlet */ if( sessionObject.state == STATE_AUTH ) subtitle = _("Login"); - else if( sessionObject.state == STATE_LIST ) - subtitle = ngettext("1 Message", "{0} Messages", sessionObject.mailbox.getNumMails()); - else if( sessionObject.state == STATE_SHOW ) + else if( sessionObject.state == STATE_LIST ) { + // mailbox.getNumMails() forces a connection, don't use it + // Not only does it slow things down, but a failure causes all our messages to "vanish" + //subtitle = ngettext("1 Message", "{0} Messages", sessionObject.mailbox.getNumMails()); + subtitle = ngettext("1 Message", "{0} Messages", sessionObject.folder.getSize()); + } else if( sessionObject.state == STATE_SHOW ) subtitle = _("Show Message"); response.setContentType( "text/html" ); @@ -1359,7 +1381,8 @@ public class WebMail extends HttpServlet else if( sessionObject.state == STATE_NEW ) showCompose( out, sessionObject, request ); - out.println( "

susimail v0." + version +" " + ( RELEASE ? "release" : "development" ) + " © 2004-2005 susi

\n"); + //out.println( "

susimail v0." + version +" " + ( RELEASE ? "release" : "development" ) + " © 2004-2005 susi

\n"); + out.println( "

susimail © 2004-2005 susi

\n"); out.flush(); } } @@ -1582,9 +1605,9 @@ public class WebMail extends HttpServlet out.println( button( SEND, _("Send") ) + button( CANCEL, _("Cancel") ) + spacer + (sessionObject.attachments != null && (!sessionObject.attachments.isEmpty()) ? button( DELETE_ATTACHMENT, _("Delete Attachment") ) : button2( DELETE_ATTACHMENT, _("Delete Attachment") ) ) + spacer); - if (Config.hasConfigFile()) - out.println(button( RELOAD, _("Reload Config") ) + spacer); - out.println(button( LOGOUT, _("Logout") ) ); + //if (Config.hasConfigFile()) + // out.println(button( RELOAD, _("Reload Config") ) + spacer); + //out.println(button( LOGOUT, _("Logout") ) ); String from = request.getParameter( NEW_FROM ); String fixed = Config.getProperty( CONFIG_SENDER_FIXED, "true" ); @@ -1749,7 +1772,7 @@ public class WebMail extends HttpServlet mail.part = new MailPart(); mail.part.parse( mail.body ); } - if( !RELEASE ) { + if(!RELEASE && mail != null && mail.body != null) { out.println( "