diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 84840d056e..09d6fa867b 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -417,6 +417,13 @@ public interface DaoMessage { " AND msgid = :msgid") List getMessagesByMsgId(long account, String msgid); + @Query("SELECT message.* FROM message" + + " JOIN folder ON folder.id = message.folder" + + " WHERE message.account = :account" + + " AND folder.type = :folderType" + + " AND message.msgid = :msgid") + EntityMessage getMessage(long account, String folderType, String msgid); + @Query("SELECT * FROM message" + " WHERE account = :account" + " AND inreplyto = :inreplyto") diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index ca943413f6..66c64c9c45 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -280,10 +280,22 @@ public class EntityOperation { if (!message.ui_deleted) db.message().setMessageUiHide(message.id, true); - if (account != null && account.isGmail() && - EntityFolder.ARCHIVE.equals(source.type) && - !(EntityFolder.TRASH.equals(target.type) || EntityFolder.JUNK.equals(target.type))) - name = COPY; + if (account != null && account.isGmail()) { + if (EntityFolder.ARCHIVE.equals(source.type) && + !(EntityFolder.SENT.equals(target.type) || + EntityFolder.TRASH.equals(target.type) || + EntityFolder.JUNK.equals(target.type))) + name = COPY; + + if (!TextUtils.isEmpty(message.msgid) && !TextUtils.isEmpty(message.hash) && + (EntityFolder.SENT.equals(target.type) || + EntityFolder.TRASH.equals(target.type) || + EntityFolder.JUNK.equals(target.type))) { + EntityMessage archived = db.message().getMessage(message.account, EntityFolder.ARCHIVE, message.msgid); + if (archived != null && message.hash.equals(archived.hash)) + db.message().setMessageUiHide(archived.id, true); + } + } if (account != null && account.isGmail() && (EntityFolder.DRAFTS.equals(source.type) || EntityFolder.DRAFTS.equals(target.type)))