Complete chain of received headers

pull/214/head
M66B 1 year ago
parent c2514ead5f
commit d55b594858

@ -118,7 +118,8 @@ public class ActivityDSN extends ActivityBase {
bos.write(buffer, 0, length); bos.write(buffer, 0, length);
String headers = MessageHelper.decodeMime(bos.toString(StandardCharsets.UTF_8.name())); 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; return result;

@ -323,7 +323,8 @@ public class ActivityEML extends ActivityBase {
MessageHelper.getStructure(imessage, ssb, 0, textColorLink); MessageHelper.getStructure(imessage, ssb, 0, textColorLink);
result.structure = ssb; 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; return result;
} }

@ -2756,7 +2756,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (show_headers && message.headers != null) { if (show_headers && message.headers != null) {
Spanned headers = HtmlHelper.highlightHeaders(context, Spanned headers = HtmlHelper.highlightHeaders(context,
message.from, message.headers, message.blocklist != null && message.blocklist); message.from, message.to, message.received, message.headers,
message.blocklist != null && message.blocklist);
if (BuildConfig.DEBUG && headers instanceof SpannableStringBuilder) { if (BuildConfig.DEBUG && headers instanceof SpannableStringBuilder) {
SpannableStringBuilder ssb = (SpannableStringBuilder) headers; SpannableStringBuilder ssb = (SpannableStringBuilder) headers;
ssb.append('\n') ssb.append('\n')

@ -2299,11 +2299,16 @@ public class Helper {
} }
static String formatDuration(long ms) { static String formatDuration(long ms) {
int sign = (ms < 0 ? -1 : 1);
ms = Math.abs(ms);
int days = (int) (ms / (24 * 3600 * 1000L)); int days = (int) (ms / (24 * 3600 * 1000L));
ms = ms % (24 * 3600 * 1000L); ms = ms % (24 * 3600 * 1000L);
long seconds = ms / 1000; long seconds = ms / 1000;
ms = ms % 1000; ms = ms % 1000;
return (days > 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) { static String formatNumber(Integer number, long max, NumberFormat nf) {

@ -2936,7 +2936,7 @@ public class HtmlHelper {
return ssb.toString(); 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", " ")); SpannableStringBuilder ssb = new SpannableStringBuilderEx(headers.replaceAll("\\t", " "));
int textColorLink = Helper.resolveColor(context, android.R.attr.textColorLink); int textColorLink = Helper.resolveColor(context, android.R.attr.textColorLink);
int colorVerified = Helper.resolveColor(context, R.attr.colorVerified); int colorVerified = Helper.resolveColor(context, R.attr.colorVerified);
@ -2969,23 +2969,23 @@ public class HtmlHelper {
Log.w(ex); Log.w(ex);
} }
if (tx != null) { int s = ssb.length();
ssb.append('\n'); ssb.append("\n#0 ");
int s = ssb.length(); if (tx != null)
ssb.append("\n#0 ").append(DTF.format(tx)); ssb.append(DTF.format(tx));
ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); 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));
}
if (from != null) {
ssb.append('\n'); 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"); String[] received = iheaders.getHeader("Received");
if (received != null && received.length > 0) { if (received != null && received.length > 0) {
for (int i = received.length - 1; i >= 0; i--) { for (int i = received.length - 1; i >= 0; i--) {
@ -2993,20 +2993,18 @@ public class HtmlHelper {
String h = MimeUtility.unfold(received[i]); String h = MimeUtility.unfold(received[i]);
int semi = h.lastIndexOf(';'); int semi = h.lastIndexOf(';');
Date rx = null;
if (semi > 0) { if (semi > 0) {
rx = mdf.parse(h, new ParsePosition(semi + 1)); rx = mdf.parse(h, new ParsePosition(semi + 1));
h = h.substring(0, semi); h = h.substring(0, semi);
} }
int s = ssb.length(); s = ssb.length();
ssb.append('#').append(Integer.toString(received.length - i)); ssb.append('#').append(Integer.toString(received.length - i));
if (rx != null) { if (rx != null) {
ssb.append(' ').append(DTF.format(rx)); ssb.append(' ').append(DTF.format(rx));
if (tx != null) { if (tx != null)
long ms = rx.getTime() - tx.getTime(); ssb.append(" \u0394")
ssb.append(" \u0394").append(DateUtils.formatElapsedTime(ms / 1000)); .append(Helper.formatDuration(rx.getTime() - tx.getTime()));
}
} }
ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0);
@ -3065,6 +3063,26 @@ public class HtmlHelper {
ssb.append("\n"); 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) { } catch (Throwable ex) {
Log.w(ex); Log.w(ex);
} }

Loading…
Cancel
Save