Show received header delays

This commit is contained in:
M66B 2022-03-30 20:20:24 +02:00
parent 2fc76b481f
commit e4225f310b
1 changed files with 25 additions and 6 deletions

View File

@ -40,6 +40,7 @@ import android.text.SpannableStringBuilder;
import android.text.Spanned; import android.text.Spanned;
import android.text.TextDirectionHeuristics; import android.text.TextDirectionHeuristics;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.style.AbsoluteSizeSpan; import android.text.style.AbsoluteSizeSpan;
import android.text.style.AlignmentSpan; import android.text.style.AlignmentSpan;
import android.text.style.BackgroundColorSpan; import android.text.style.BackgroundColorSpan;
@ -107,7 +108,9 @@ import java.io.InputStream;
import java.io.StringReader; import java.io.StringReader;
import java.net.URI; import java.net.URI;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition; import java.text.ParsePosition;
import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
@ -2659,25 +2662,41 @@ public class HtmlHelper {
// https://datatracker.ietf.org/doc/html/rfc2821#section-4.4 // https://datatracker.ietf.org/doc/html/rfc2821#section-4.4
final DateFormat DTF = Helper.getDateTimeInstance(context, DateFormat.SHORT, DateFormat.MEDIUM); final DateFormat DTF = Helper.getDateTimeInstance(context, DateFormat.SHORT, DateFormat.MEDIUM);
MailDateFormat mdf = new MailDateFormat();
ByteArrayInputStream bis = new ByteArrayInputStream(headers.getBytes()); ByteArrayInputStream bis = new ByteArrayInputStream(headers.getBytes());
String[] received = new InternetHeaders(bis).getHeader("Received"); InternetHeaders iheaders = new InternetHeaders(bis);
String dh = iheaders.getHeader("Date", null);
Date tx = null;
try {
if (dh != null)
tx = mdf.parse(dh);
} catch (ParseException ex) {
Log.w(ex);
}
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--) {
ssb.append('\n'); ssb.append('\n');
String h = MimeUtility.unfold(received[i]); String h = MimeUtility.unfold(received[i]);
int semi = h.lastIndexOf(';'); int semi = h.lastIndexOf(';');
Date date = null; Date rx = null;
if (semi > 0) { if (semi > 0) {
MailDateFormat mdf = new MailDateFormat(); rx = mdf.parse(h, new ParsePosition(semi + 1));
date = mdf.parse(h, new ParsePosition(semi + 1));
h = h.substring(0, semi); h = h.substring(0, semi);
} }
int s = ssb.length(); int s = ssb.length();
ssb.append('#').append(Integer.toString(received.length - i)); ssb.append('#').append(Integer.toString(received.length - i));
if (date != null) if (rx != null) {
ssb.append(' ').append(DTF.format(date)); ssb.append(' ').append(DTF.format(rx));
if (tx != null) {
long ms = rx.getTime() - tx.getTime();
ssb.append(" \u0394").append(DateUtils.formatElapsedTime(ms / 1000));
}
}
ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0); ssb.setSpan(new StyleSpan(Typeface.BOLD), s, ssb.length(), 0);
if (blocklist && i == received.length - 1) { if (blocklist && i == received.length - 1) {