From 9a9a55b3bf02c9dc1e93c52461ed04c9bc556037 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 5 Jun 2019 14:12:10 +0200 Subject: [PATCH] Handle add without message ID --- app/src/main/java/eu/faircode/email/Core.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 784272f3e1..69e2a64135 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -450,9 +450,6 @@ class Core { boolean across = (jargs.length() > 2 && jargs.getBoolean(2)); try { - if (TextUtils.isEmpty(message.msgid)) - throw new IllegalArgumentException("Message ID missing"); - if (EntityFolder.DRAFTS.equals(folder.type) && !folder.id.equals(message.folder) && !across) { @@ -465,13 +462,28 @@ class Core { // Prevent adding/deleting message db.message().setMessageUid(message.id, message.uid == null ? -1L : -message.uid); - Message[] ideletes = ifolder.search(new MessageIDTerm(message.msgid)); - for (Message idelete : ideletes) { - long uid = ifolder.getUID(idelete); - Log.i(folder.name + " deleting previous uid=" + uid + " msgid=" + message.msgid); - try { - idelete.setFlag(Flags.Flag.DELETED, true); - } catch (MessageRemovedException ignored) { + if (TextUtils.isEmpty(message.msgid)) { + // Draft might be created somewhere else + if (message.uid == null) + throw new IllegalArgumentException("Add without ID"); + else { + Message idelete = ifolder.getMessageByUID(message.uid); + Log.i(folder.name + " deleting previous uid=" + message.uid + " msgid=" + message.msgid); + try { + idelete.setFlag(Flags.Flag.DELETED, true); + } catch (MessageRemovedException ignored) { + } + } + message.msgid = EntityMessage.generateMessageId(); + } else { + Message[] ideletes = ifolder.search(new MessageIDTerm(message.msgid)); + for (Message idelete : ideletes) { + long uid = ifolder.getUID(idelete); + Log.i(folder.name + " deleting previous uid=" + uid + " msgid=" + message.msgid); + try { + idelete.setFlag(Flags.Flag.DELETED, true); + } catch (MessageRemovedException ignored) { + } } } ifolder.expunge();