diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 0c08df1543..101f76b131 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -173,7 +173,6 @@ public class EntityOperation { // Message with same msgid can be in archive Long newid = null; if (message.uid != null && - message.ui_seen && target.synchronize && message.received > cal_keep.getTimeInMillis() && db.message().countMessageByMsgId(target.id, message.msgid) == 0) { @@ -210,10 +209,8 @@ public class EntityOperation { name = ADD; folder = target.id; jargs = new JSONArray(); - if (newid != null) { - jargs.put(0, newid); - jargs.put(1, autoread); - } + jargs.put(0, newid); // Can be null + jargs.put(1, autoread); } } else if (DELETE.equals(name)) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 6e50823fbb..45dccbb760 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1976,13 +1976,12 @@ public class FragmentMessages extends FragmentBase { db.beginTransaction(); EntityMessage message = db.message().getMessage(id); - EntityFolder folder = db.folder().getFolder(message.folder); - - if (!message.content) - EntityOperation.queue(context, db, message, EntityOperation.BODY); - - if (!message.ui_seen && !EntityFolder.OUTBOX.equals(folder.type)) - EntityOperation.queue(context, db, message, EntityOperation.SEEN, true); + if (message.uid != null) { + if (!message.content) + EntityOperation.queue(context, db, message, EntityOperation.BODY); + if (!message.ui_seen) + EntityOperation.queue(context, db, message, EntityOperation.SEEN, true); + } db.setTransactionSuccessful(); } finally { diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 4f29beb667..b567506e8a 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1544,9 +1544,11 @@ public class ServiceSynchronize extends LifecycleService { db.message().deleteMessage(message.id); // Delete temporary copy in target folder - if (EntityOperation.MOVE.equals(op.name) && jargs.length() > 2) + if (EntityOperation.MOVE.equals(op.name) && + jargs.length() > 2) db.message().deleteMessage(jargs.getInt(2)); - if (EntityOperation.ADD.equals(op.name) && jargs.length() > 0) + if (EntityOperation.ADD.equals(op.name) && + jargs.length() > 0 && !jargs.isNull(0)) db.message().deleteMessage(jargs.getInt(0)); } else db.message().setMessageUiHide(message.id, false); @@ -1710,11 +1712,16 @@ public class ServiceSynchronize extends LifecycleService { if (autoread && !imessage.isSet(Flags.Flag.SEEN)) imessage.setFlag(Flags.Flag.SEEN, true); + if (target.id.equals(folder.id)) { + Log.w(folder.name + " MOVE onto self"); + return; + } + if (istore.hasCapability("MOVE") && !EntityFolder.DRAFTS.equals(folder.type)) { Folder itarget = istore.getFolder(target.name); ifolder.moveMessages(new Message[]{imessage}, itarget); } else { - Log.w("MOVE by DELETE/APPEND"); + Log.w(folder.name + " MOVE by DELETE/APPEND"); // Delete source imessage.setFlag(Flags.Flag.DELETED, true);