diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 9a23f06476..0176072b5d 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -359,6 +359,7 @@ public class ServiceSend extends ServiceBase { long id = message.id; + imessage.saveChanges(); MessageHelper helper = new MessageHelper(imessage); if (message.uid != null) { @@ -366,21 +367,50 @@ public class ServiceSend extends ServiceBase { message.uid = null; } - message.id = null; - message.folder = sent.id; - message.identity = null; - message.from = helper.getFrom(); - message.bcc = helper.getBcc(); - message.reply = helper.getReply(); - message.received = new Date().getTime(); - message.seen = true; - message.ui_seen = true; - message.ui_hide = true; - message.error = null; - message.id = db.message().insertMessage(message); - - message.getFile(this).createNewFile(); - EntityAttachment.copy(this, id, message.id); + MessageHelper.MessageParts parts = helper.getMessageParts(this); + String body = parts.getHtml(this); + + try { + db.beginTransaction(); + + message.id = null; + message.folder = sent.id; + message.identity = null; + message.from = helper.getFrom(); + message.bcc = helper.getBcc(); + message.reply = helper.getReply(); + message.received = new Date().getTime(); + message.seen = true; + message.ui_seen = true; + message.ui_hide = true; + message.error = null; + message.id = db.message().insertMessage(message); + + Helper.writeText(EntityMessage.getFile(this, message.id), body); + db.message().setMessageContent(message.id, + true, + parts.isPlainOnly(), + HtmlHelper.getPreview(body), + parts.getWarnings(message.warning)); + + EntityAttachment.copy(this, id, message.id); + + Long size = null; + if (body != null) + size = (long) body.length(); + + Long total = null; + List attachments = db.attachment().getAttachments(message.id); + for (EntityAttachment attachment : attachments) + if (attachment.size != null) + total = (total == null ? 0 : total) + attachment.size; + + db.message().setMessageSize(message.id, size, total); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } sid = message.id; message.id = id; @@ -409,30 +439,11 @@ public class ServiceSend extends ServiceBase { try { db.beginTransaction(); + // Delete from outbox db.message().deleteMessage(message.id); + // Show in sent folder if (sid != null) { - MessageHelper helper = new MessageHelper(imessage); - MessageHelper.MessageParts parts = helper.getMessageParts(this); - String body = parts.getHtml(this); - Helper.writeText(EntityMessage.getFile(this, sid), body); - db.message().setMessageContent(message.id, - true, - parts.isPlainOnly(), - HtmlHelper.getPreview(body), - parts.getWarnings(message.warning)); - - Long size = null; - if (body != null) - size = (long) body.length(); - - Long total = null; - List attachments = db.attachment().getAttachments(sid); - for (EntityAttachment attachment : attachments) - if (attachment.size != null) - total = (total == null ? 0 : total) + attachment.size; - - db.message().setMessageSize(sid, size, total); db.message().setMessageSent(sid, time); db.message().setMessageUiHide(sid, false); } @@ -443,6 +454,7 @@ public class ServiceSend extends ServiceBase { EntityOperation.queue(this, replied, EntityOperation.ANSWERED, true); } + // Check sent message if (sid != null) { // Check for sent orphans EntityMessage orphan = db.message().getMessage(sid);