Improved reply/forward handling

This commit is contained in:
M66B
2019-01-21 16:45:05 +00:00
parent 2b3d6b94da
commit 332fcb5557
14 changed files with 132 additions and 136 deletions

View File

@@ -1474,10 +1474,10 @@ public class FragmentCompose extends FragmentBase {
if (answer > 0)
body = EntityAnswer.getAnswerText(db, answer, null) + body;
} else {
result.draft.thread = ref.thread;
if ("reply".equals(action) || "reply_all".equals(action)) {
result.draft.replying = ref.id;
result.draft.references = (ref.references == null ? "" : ref.references + " ") + ref.msgid;
result.draft.inreplyto = ref.msgid;
result.draft.thread = ref.thread;
result.draft.to = (ref.reply == null || ref.reply.length == 0 ? ref.from : ref.reply);
result.draft.from = ref.to;
@@ -1499,7 +1499,7 @@ public class FragmentCompose extends FragmentBase {
}
} else if ("forward".equals(action)) {
result.draft.forwarding = ref.id;
result.draft.thread = result.draft.msgid; // new thread
result.draft.from = ref.to;
}
@@ -1553,10 +1553,19 @@ public class FragmentCompose extends FragmentBase {
result.draft.received = new Date().getTime();
result.draft.id = db.message().insertMessage(result.draft);
result.draft.write(context, body == null ? "" : body);
Helper.writeText(EntityMessage.getFile(context, result.draft.id), body);
db.message().setMessageContent(result.draft.id, true, HtmlHelper.getPreview(body));
// Write reference text
if (ref != null && ref.content) {
String refBody = String.format("<p>%s %s:</p>\n<blockquote>%s</blockquote>",
Html.escapeHtml(new Date(ref.received).toString()),
Html.escapeHtml(MessageHelper.formatAddresses(ref.from)),
Helper.readText(EntityMessage.getFile(context, ref.id)));
Helper.writeText(EntityMessage.getRefFile(context, result.draft.id), refBody);
}
if ("new".equals(action)) {
ArrayList<Uri> uris = args.getParcelableArrayList("attachments");
if (uris != null)
@@ -1841,7 +1850,7 @@ public class FragmentCompose extends FragmentBase {
!MessageHelper.equal(draft.bcc, abcc) ||
(draft.subject == null ? subject != null : !draft.subject.equals(subject)) ||
last_available != available ||
!body.equals(draft.read(context)));
!body.equals(Helper.readText(EntityMessage.getFile(context, draft.id))));
last_available = available;
@@ -1857,7 +1866,7 @@ public class FragmentCompose extends FragmentBase {
draft.subject = subject;
draft.received = new Date().getTime();
db.message().updateMessage(draft);
draft.write(context, body);
Helper.writeText(EntityMessage.getFile(context, draft.id), body);
db.message().setMessageContent(draft.id, true, HtmlHelper.getPreview(body));
}
@@ -1908,13 +1917,19 @@ public class FragmentCompose extends FragmentBase {
// Delete draft (cannot move to outbox)
EntityOperation.queue(context, db, draft, EntityOperation.DELETE);
File refDraftFile = EntityMessage.getRefFile(context, draft.id);
// Copy message to outbox
draft.id = null;
draft.folder = db.folder().getOutbox().id;
draft.uid = null;
draft.ui_hide = false;
draft.id = db.message().insertMessage(draft);
draft.write(getContext(), body);
Helper.writeText(EntityMessage.getFile(context, draft.id), body);
if (refDraftFile.exists()) {
File refFile = EntityMessage.getRefFile(context, draft.id);
refDraftFile.renameTo(refFile);
}
// Move attachments
for (EntityAttachment attachment : attachments)
@@ -2044,10 +2059,6 @@ public class FragmentCompose extends FragmentBase {
private void showDraft(EntityMessage draft) {
Bundle args = new Bundle();
args.putLong("id", draft.id);
if (draft.replying != null)
args.putLong("reference", draft.replying);
else if (draft.forwarding != null)
args.putLong("reference", draft.forwarding);
args.putBoolean("show_images", show_images);
new SimpleTask<Spanned[]>() {
@@ -2066,21 +2077,21 @@ public class FragmentCompose extends FragmentBase {
@Override
protected Spanned[] onExecute(final Context context, Bundle args) throws Throwable {
long id = args.getLong("id");
final long reference = args.getLong("reference", -1);
final long id = args.getLong("id");
final boolean show_images = args.getBoolean("show_images", false);
String body = EntityMessage.read(context, id);
String body = Helper.readText(EntityMessage.getFile(context, id));
Spanned spannedBody = Html.fromHtml(body, cidGetter, null);
String quote = (reference < 0 ? null : HtmlHelper.getQuote(context, reference, true));
Spanned spannedReference = null;
if (quote != null) {
File refFile = EntityMessage.getRefFile(context, id);
if (refFile.exists()) {
String quote = Helper.readText(refFile);
Spanned spannedQuote = Html.fromHtml(quote,
new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable image = HtmlHelper.decodeImage(source, context, reference, show_images);
Drawable image = HtmlHelper.decodeImage(source, context, id, show_images);
float width = context.getResources().getDisplayMetrics().widthPixels -
Helper.dp2pixels(context, 12); // margins;