From cccf76cc780f791604dd67e866ed9628486570cd Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Thu, 1 Feb 2018 14:14:19 +0000
Subject: [PATCH] SusiMail: Don't duplicate Re: and Fwd: final formatters store
 Message-ID

---
 apps/susimail/src/src/i2p/susi/webmail/Mail.java    |  9 ++++++---
 apps/susimail/src/src/i2p/susi/webmail/WebMail.java | 12 ++++++++++--
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
index ce11e2bd8b..6d050b1848 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
@@ -77,6 +77,7 @@ class Mail {
 	String[] to, cc;        // addresses only, enclosed by <>
 	private boolean isNew, isSpam;
 	public String contentType;
+	public String messageID; // as received, trimmed only, probably enclosed with <>, not HTML escaped
 
 	public String error;
 
@@ -282,9 +283,9 @@ class Mail {
 	}
 
 	private static final DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-	private static DateFormat localDateFormatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
-	private static DateFormat longLocalDateFormatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
-	private static DateFormat mailDateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH );
+	private static final DateFormat localDateFormatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+	private static final DateFormat longLocalDateFormatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
+	private static final DateFormat mailDateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH );
 	static {
 		// the router sets the JVM time zone to UTC but saves the original here so we can get it
 		TimeZone tz = SystemVersion.getSystemTimeZone();
@@ -410,6 +411,8 @@ class Mail {
 							// we want to know if we have attachments, even if
 							// we haven't fetched the body
 							contentType = line.substring(13).trim();
+						} else if (hlc.startsWith("message-id:")) {
+							messageID = line.substring(11).trim();
 						}
 					}
 				}
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index 86ece4d968..8a597125b5 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -1088,7 +1088,11 @@ public class WebMail extends HttpServlet
 								sessionObject.replyTo = mail.reply;
 							else if( mail.sender != null && Mail.validateAddress( mail.sender ) )
 								sessionObject.replyTo = mail.sender;
-							sessionObject.subject = _t("Re:") + ' ' + mail.formattedSubject;
+							sessionObject.subject = mail.formattedSubject;
+							if (!(sessionObject.subject.startsWith("Re:") ||
+							      sessionObject.subject.startsWith(_t("Re:")))) {
+								sessionObject.subject = _t("Re:") + ' ' + sessionObject.subject;
+							}
 							StringWriter text = new StringWriter();
 							PrintWriter pw = new PrintWriter( text );
 							pw.println( _t("On {0} {1} wrote:", mail.formattedDate + " UTC", sessionObject.replyTo) );
@@ -1126,7 +1130,11 @@ public class WebMail extends HttpServlet
 								sessionObject.replyCC = buf.toString();
 						}
 						if( forward ) {
-							sessionObject.subject = _t("Fwd:") + ' ' + mail.formattedSubject;
+							sessionObject.subject = mail.formattedSubject;
+							if (!(sessionObject.subject.startsWith("Fwd:") ||
+							      sessionObject.subject.startsWith(_t("Fwd:")))) {
+								sessionObject.subject = _t("Fwd:") + ' ' + sessionObject.subject;
+							}
 							String sender = null;
 							if( mail.reply != null && Mail.validateAddress( mail.reply ) )
 								sender = Mail.getAddress( mail.reply );
-- 
GitLab