diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java index c188e3d36a..5f14d94ee8 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java @@ -90,9 +90,9 @@ class Mail { } /** - * This may or may not contain the body also. - * @return may be null - */ + * This may or may not contain the body also. + * @return if null, nothing has been loaded yet for this UIDL + */ public synchronized ReadBuffer getHeader() { return header; } @@ -104,6 +104,9 @@ class Mail { parseHeaders(); } + /** + * @return if false, nothing has been loaded yet for this UIDL + */ public synchronized boolean hasHeader() { return header != null; } diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java index 278a4e1200..3005750fb4 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java +++ b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java @@ -121,6 +121,7 @@ class MailCache { mail = mails.get( uidl ); if( mail == null ) { newMail = new Mail(uidl); + // TODO really? 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 3389c4071d..1851739dd2 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -1725,14 +1725,13 @@ public class WebMail extends HttpServlet if( sessionObject.state == STATE_SHOW ) { if (isPOST) showUIDL = processMessageButtons(sessionObject, showUIDL, request); - // ?download=nnn link should be valid in any state - // but depends on current UIDL + // ?download=nnn&b64uidl link (same for ?att) should be valid in any state if (processDownloadLink(sessionObject, showUIDL, request, response)) { // download or raw view sent, or 404 return; } if (isPOST && processSaveAsLink(sessionObject, showUIDL, request, response)) { - // download or sent, or 404 + // download sent, or 404 return; } // If the last message has just been deleted then @@ -1776,10 +1775,14 @@ public class WebMail extends HttpServlet subtitle = ngettext("1 Message", "{0} Messages", sessionObject.folder.getSize()); } else if( sessionObject.state == STATE_SHOW ) { Mail mail = showUIDL != null ? sessionObject.mailCache.getMail(showUIDL, MailCache.FetchMode.HEADER) : null; - if (mail != null && mail.shortSubject != null) - subtitle = mail.shortSubject; // already HTML encoded - else - subtitle = _t("Show Message"); + if (mail != null && mail.hasHeader()) { + if (mail.shortSubject != null) + subtitle = mail.shortSubject; // already HTML encoded + else + subtitle = _t("Show Message"); + } else { + subtitle = _t("Message not found."); + } } else if( sessionObject.state == STATE_NEW ) { subtitle = _t("New Message"); } else if( sessionObject.state == STATE_CONFIG ) { @@ -2277,13 +2280,14 @@ public class WebMail extends HttpServlet //if (Config.hasConfigFile()) // out.println(button( RELOAD, _t("Reload Config") ) + spacer); out.println(button( LOGOUT, _t("Logout") )); - if (sessionObject.folder.getPages() > 1) - showPageButtons(out, sessionObject.folder); + Folder folder = sessionObject.folder; + if (folder.getPages() > 1) + showPageButtons(out, folder); out.println(""); - String curSort = sessionObject.folder.getCurrentSortBy(); - Folder.SortOrder curOrder = sessionObject.folder.getCurrentSortingDirection(); + String curSort = folder.getCurrentSortBy(); + Folder.SortOrder curOrder = folder.getCurrentSortingDirection(); out.println("\n" + "\n" + thSpacer + "" + @@ -2294,11 +2298,10 @@ public class WebMail extends HttpServlet thSpacer + "" ); int bg = 0; int i = 0; - for( Iterator it = sessionObject.folder.currentPageIterator(); it != null && it.hasNext(); ) { + for (Iterator it = folder.currentPageIterator(); it != null && it.hasNext(); ) { String uidl = it.next(); Mail mail = sessionObject.mailCache.getMail( uidl, MailCache.FetchMode.HEADER ); - if (mail == null) { - i++; + if (mail == null || !mail.hasHeader()) { continue; } String type; @@ -2349,10 +2352,10 @@ public class WebMail extends HttpServlet if (i == 0) out.println(""); out.println( ""); - if (sessionObject.folder.getPages() > 1 && i > 30) { + if (folder.getPages() > 1 && i > 30) { // show the buttons again if page is big out.println(""); } out.println("

 " + sortHeader( SORT_SENDER, _t("From"), sessionObject.imgPath, curSort, curOrder ) + "" + sortHeader( SORT_SIZE, _t("Size"), sessionObject.imgPath, curSort, curOrder ) + "
" + _t("No messages") + "
"); - showPageButtons(out, sessionObject.folder); + showPageButtons(out, folder); out.println("
"); @@ -2425,26 +2428,36 @@ public class WebMail extends HttpServlet out.println( "-->" ); } out.println("
"); - out.println( button( NEW, _t("New") ) + spacer + - button( REPLY, _t("Reply") ) + - button( REPLYALL, _t("Reply All") ) + - button( FORWARD, _t("Forward") ) + spacer + - button( SAVE_AS, _t("Save As") ) + spacer); - if (sessionObject.reallyDelete) - out.println(button2(DELETE, _t("Delete"))); - else - out.println(button(DELETE, _t("Delete"))); + out.println( button( NEW, _t("New") ) + spacer); + boolean hasHeader = mail != null && mail.hasHeader(); + if (hasHeader) { + out.println(button( REPLY, _t("Reply") ) + + button( REPLYALL, _t("Reply All") ) + + button( FORWARD, _t("Forward") ) + spacer + + button( SAVE_AS, _t("Save As") ) + spacer); + if (sessionObject.reallyDelete) + out.println(button2(DELETE, _t("Delete"))); + else + out.println(button(DELETE, _t("Delete"))); + } out.println(button(LOGOUT, _t("Logout") )); // TODO make these GETs not POSTs so we have a consistent URL - out.println("
" + - ( sessionObject.folder.isFirstElement(showUIDL) ? button2( PREV, _t("Previous") ) : button( PREV, _t("Previous") ) ) + spacer + - button( LIST, _t("Back to Folder") ) + spacer + - ( sessionObject.folder.isLastElement(showUIDL) ? button2( NEXT, _t("Next") ) : button( NEXT, _t("Next") ) )); + out.println("
"); + if (hasHeader) { + out.println( + ( sessionObject.folder.isFirstElement(showUIDL) ? button2(PREV, _t("Previous")) : button(PREV, _t("Previous"))) + + spacer); + } + out.println(button( LIST, _t("Back to Folder") ) + spacer); + if (hasHeader) { + out.println( + ( sessionObject.folder.isLastElement(showUIDL) ? button2(NEXT, _t("Next")) : button(NEXT, _t("Next")))); + } out.println("
"); //if (Config.hasConfigFile()) // out.println(button( RELOAD, _t("Reload Config") ) + spacer); out.println( "
\n"); - if( mail != null ) { + if (hasHeader) { out.println("
\n" + "\n" + "\n" ); + out.println( "\n" ); } out.println( "

" + _t("From") + @@ -2464,7 +2477,7 @@ public class WebMail extends HttpServlet } } else { - out.println( "

" + _t("Could not fetch mail.") + "

" + _t("Message not found.") + "

" ); }