diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 094ace3a34..a1c862e8df 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -535,10 +535,8 @@ public class AdapterMessage extends RecyclerView.Adapter() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + + EntityMessage message; + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + message = db.message().getMessage(id); + if (message == null) + return null; + + db.folder().setFolderError(message.folder, null); + + File source = message.getFile(context); + + // Insert into drafts + EntityFolder drafts = db.folder().getFolderByType(message.account, EntityFolder.DRAFTS); + message.id = null; + message.folder = drafts.id; + message.ui_snoozed = null; + message.id = db.message().insertMessage(message); + + File target = message.getFile(context); + source.renameTo(target); + + List attachments = db.attachment().getAttachments(id); + for (EntityAttachment attachment : attachments) + db.attachment().setMessage(attachment.id, message.id); + + EntityOperation.queue(context, message, EntityOperation.ADD); + + // Delete from outbox + db.operation().deleteOperation(id, EntityOperation.SEND); + db.message().deleteMessage(id); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("send", message.identity.intValue()); + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, owner, ex); + } + }.execute(context, owner, args, "message:move:draft"); + } + private void onActionMove(final ActionData data) { final View dview = LayoutInflater.from(context).inflate(R.layout.dialog_folder_select, null); final RecyclerView rvFolder = dview.findViewById(R.id.rvFolder); @@ -3182,30 +3240,7 @@ public class AdapterMessage extends RecyclerView.Adapter attachments = db.attachment().getAttachments(message.id); - for (EntityAttachment attachment : attachments) - db.attachment().setMessage(attachment.id, message.id); - - EntityOperation.queue(context, message, EntityOperation.ADD); - - // Delete from outbox - db.message().deleteMessage(message.id); - } else - folders = db.folder().getFolders(message.account); + folders = db.folder().getFolders(message.account); db.setTransactionSuccessful(); } finally { diff --git a/app/src/main/java/eu/faircode/email/DaoOperation.java b/app/src/main/java/eu/faircode/email/DaoOperation.java index a20012791b..655bd7f1c2 100644 --- a/app/src/main/java/eu/faircode/email/DaoOperation.java +++ b/app/src/main/java/eu/faircode/email/DaoOperation.java @@ -104,4 +104,9 @@ public interface DaoOperation { @Query("DELETE FROM operation WHERE id = :id") int deleteOperation(long id); + + @Query("DELETE FROM operation" + + " WHERE message = :message" + + " AND name = :name") + int deleteOperation(long message, String name); }