diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index c8a8898d4d..fb3d963c2d 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -150,6 +150,7 @@ import com.google.android.material.snackbar.Snackbar; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import org.w3c.dom.Entity; import org.w3c.dom.css.CSSStyleSheet; import java.io.BufferedOutputStream; @@ -5361,6 +5362,9 @@ public class AdapterMessage extends RecyclerView.Adapter>() { + @Override + protected List onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + + Map map = new HashMap<>(); + + DB db = DB.getInstance(context); + EntityMessage message = db.message().getMessage(id); + if (message == null) + return null; + + if (!TextUtils.isEmpty(message.inreplyto)) + for (EntityMessage m : db.message().getMessagesByMsgId(message.account, message.inreplyto)) + map.put(m.msgid, m); + + if (!TextUtils.isEmpty(message.references)) + for (String ref : message.references.split(" ")) + for (EntityMessage m : db.message().getMessagesByMsgId(message.account, ref)) + map.put(m.msgid, m); + + return new ArrayList(map.values()); + } + + @Override + protected void onExecuted(Bundle args, List referenced) { + DateFormat DTF = Helper.getDateTimeInstance(context); + + SpannableStringBuilder ssb = new SpannableStringBuilderEx(); + + ssb.append("Message-ID: ").append(message.msgid).append("\n"); + if (!TextUtils.isEmpty(message.inreplyto)) + ssb.append("In-reply-to: ").append(message.inreplyto).append("\n"); + if (!TextUtils.isEmpty(message.references)) + ssb.append("References: ").append(message.references).append("\n"); + ssb.append("Thread: ").append(message.thread).append("\n"); + ssb.append("\n"); + + if (referenced != null) + for (EntityMessage ref : referenced) + ssb.append(ref.msgid).append(": ") + .append(DTF.format(ref.received)).append(' ') + .append(ref.subject == null ? "" : ref.subject) + .append("\n\n"); + + ssb.setSpan(new RelativeSizeSpan(HtmlHelper.FONT_SMALL), 0, ssb.length(), 0); + + new AlertDialog.Builder(context) + .setTitle(context.getString(R.string.title_thread_info)) + .setMessage(ssb) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); + } + }.execute(context, owner, args, "message:resync"); + + } + private void onMenuResync(TupleMessageEx message) { Bundle args = new Bundle(); args.putLong("id", message.id); diff --git a/app/src/main/res/menu/popup_message_more.xml b/app/src/main/res/menu/popup_message_more.xml index 232a6dd4a2..9327df406b 100644 --- a/app/src/main/res/menu/popup_message_more.xml +++ b/app/src/main/res/menu/popup_message_more.xml @@ -150,6 +150,11 @@ + + Verify Encrypt Decrypt + Thread info Resync Show plain text Show HTML