From d55b594858d19a182b068253a395d73cb1eec7da Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 16 Dec 2023 15:42:43 +0100 Subject: [PATCH] Complete chain of received headers --- .../java/eu/faircode/email/ActivityDSN.java | 3 +- .../java/eu/faircode/email/ActivityEML.java | 3 +- .../eu/faircode/email/AdapterMessage.java | 3 +- .../main/java/eu/faircode/email/Helper.java | 7 ++- .../java/eu/faircode/email/HtmlHelper.java | 58 ++++++++++++------- 5 files changed, 50 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityDSN.java b/app/src/main/java/eu/faircode/email/ActivityDSN.java index 645a763dc2..7f7a74cf00 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDSN.java +++ b/app/src/main/java/eu/faircode/email/ActivityDSN.java @@ -118,7 +118,8 @@ public class ActivityDSN extends ActivityBase { bos.write(buffer, 0, length); String headers = MessageHelper.decodeMime(bos.toString(StandardCharsets.UTF_8.name())); - result.headers = HtmlHelper.highlightHeaders(context, null, headers, false); + result.headers = HtmlHelper.highlightHeaders(context, + null, null, null, headers, false); } return result; diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index 7f7b0a4647..d0c8418bb8 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -323,7 +323,8 @@ public class ActivityEML extends ActivityBase { MessageHelper.getStructure(imessage, ssb, 0, textColorLink); result.structure = ssb; - result.headers = HtmlHelper.highlightHeaders(context, helper.getFrom(), helper.getHeaders(), false); + result.headers = HtmlHelper.highlightHeaders(context, + helper.getFrom(), helper.getTo(), helper.getReceivedHeader(), helper.getHeaders(), false); return result; } diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index dd1b3214b3..7377a36c2a 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -2756,7 +2756,8 @@ public class AdapterMessage extends RecyclerView.Adapter 0 ? days + " " : "") + DateUtils.formatElapsedTime(seconds) + "." + ms; + return (sign < 0 ? "-" : "") + + (days > 0 ? days + " " : "") + + DateUtils.formatElapsedTime(seconds) + + (ms == 0 ? "" : ". " + ms); } static String formatNumber(Integer number, long max, NumberFormat nf) { diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 6ca1eb34d9..2fc05faf65 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -2936,7 +2936,7 @@ public class HtmlHelper { return ssb.toString(); } - static Spanned highlightHeaders(Context context, Address[] from, String headers, boolean blocklist) { + static Spanned highlightHeaders(Context context, Address[] from, Address[] to, Long r, String headers, boolean blocklist) { SpannableStringBuilder ssb = new SpannableStringBuilderEx(headers.replaceAll("\\t", " ")); int textColorLink = Helper.resolveColor(context, android.R.attr.textColorLink); int colorVerified = Helper.resolveColor(context, R.attr.colorVerified); @@ -2969,23 +2969,23 @@ public class HtmlHelper { Log.w(ex); } - if (tx != null) { - ssb.append('\n'); - int s = ssb.length(); - ssb.append("\n#0 ").append(DTF.format(tx)); - ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); - - if (from != null) { - ssb.append('\n'); - s = ssb.length(); - ssb.append("from"); - ssb.setSpan(new ForegroundColorSpan(textColorLink), s, ssb.length(), 0); - ssb.append(' ').append(MessageHelper.formatAddresses(from, true, false)); - } + int s = ssb.length(); + ssb.append("\n#0 "); + if (tx != null) + ssb.append(DTF.format(tx)); + ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); + if (from != null) { ssb.append('\n'); + s = ssb.length(); + ssb.append("from"); + ssb.setSpan(new ForegroundColorSpan(textColorLink), s, ssb.length(), 0); + ssb.append(' ').append(MessageHelper.formatAddresses(from, true, false)); } + ssb.append('\n'); + + Date rx = null; String[] received = iheaders.getHeader("Received"); if (received != null && received.length > 0) { for (int i = received.length - 1; i >= 0; i--) { @@ -2993,20 +2993,18 @@ public class HtmlHelper { String h = MimeUtility.unfold(received[i]); int semi = h.lastIndexOf(';'); - Date rx = null; if (semi > 0) { rx = mdf.parse(h, new ParsePosition(semi + 1)); h = h.substring(0, semi); } - int s = ssb.length(); + s = ssb.length(); ssb.append('#').append(Integer.toString(received.length - i)); if (rx != null) { ssb.append(' ').append(DTF.format(rx)); - if (tx != null) { - long ms = rx.getTime() - tx.getTime(); - ssb.append(" \u0394").append(DateUtils.formatElapsedTime(ms / 1000)); - } + if (tx != null) + ssb.append(" \u0394") + .append(Helper.formatDuration(rx.getTime() - tx.getTime())); } ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); @@ -3065,6 +3063,26 @@ public class HtmlHelper { ssb.append("\n"); } } + + s = ssb.length(); + ssb.append("\n#").append(Integer.toString(received == null ? 1 : received.length + 1)); + if (r != null) { + ssb.append(' ').append(DTF.format(r)); + if (rx != null) + ssb.append(" \u0394") + .append(Helper.formatDuration(r - rx.getTime())); + } + ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); + + if (to != null) { + ssb.append('\n'); + s = ssb.length(); + ssb.append("to"); + ssb.setSpan(new ForegroundColorSpan(textColorLink), s, ssb.length(), 0); + ssb.append(' ').append(MessageHelper.formatAddresses(to, true, false)); + } + + ssb.append('\n'); } catch (Throwable ex) { Log.w(ex); }