Do not reset draft info for drafts
authorAndre Heinecke <aheinecke@gnupg.org>
Wed, 10 Apr 2019 10:41:26 +0000 (12:41 +0200)
committerAndre Heinecke <aheinecke@gnupg.org>
Wed, 10 Apr 2019 10:41:26 +0000 (12:41 +0200)
* src/cryptcontroller.cpp (CryptController::update_mail_mapi):
Pass isDraftEncrypt to finalize message.
* src/mimemaker.cpp (finalize_message): Do not remove draft info
for drafts.

--
This commit is a bit confusing because we use "draft info" as
our tracking property for the encrypt/sign actions. Now that
we also work with real drafts this is a bit confusing.

src/cryptcontroller.cpp
src/mimemaker.cpp
src/mimemaker.h

index a68d154..833fbf3 100644 (file)
@@ -1175,7 +1175,7 @@ CryptController::update_mail_mapi ()
   if (!rc)
     {
       rc = finalize_message (message, att_table, protocol, m_encrypt ? 1 : 0,
-                             false);
+                             false, m_mail->isDraftEncrypt ());
     }
 
   // only on error.
index dff03e3..8667fda 100644 (file)
@@ -1212,7 +1212,8 @@ cancel_mapi_attachment (LPATTACH *attach, sink_t sink)
 /* Do the final processing for a message. */
 int
 finalize_message (LPMESSAGE message, mapi_attach_item_t *att_table,
-                  protocol_t protocol, int encrypt, bool is_inline)
+                  protocol_t protocol, int encrypt, bool is_inline,
+                  bool is_draft)
 {
   HRESULT hr = 0;
   SPropValue prop;
@@ -1298,8 +1299,16 @@ finalize_message (LPMESSAGE message, mapi_attach_item_t *att_table,
     }
 
   /* Remove the draft info so that we don't leak the information on
-     whether the message has been signed etc.  */
-  mapi_set_gpgol_draft_info (message, NULL);
+     whether the message has been signed etc. when we send it.
+     If it is a draft we are encrypting we want to keep them.
+
+     To avoid confusion: draft_info for us means the state of
+     the secure toggle button.
+     */
+  if (!is_draft)
+    {
+      mapi_set_gpgol_draft_info (message, NULL);
+    }
 
   if (mapi_save_changes (message, KEEP_OPEN_READWRITE|FORCE_SAVE))
     {
index 621f1f0..c8aa755 100644 (file)
@@ -84,7 +84,8 @@ LPATTACH create_mapi_attachment (LPMESSAGE message, sink_t sink,
                                  const char *overrideMimeTag = nullptr);
 int close_mapi_attachment (LPATTACH *attach, sink_t sink);
 int finalize_message (LPMESSAGE message, mapi_attach_item_t *att_table,
-                      protocol_t protocol, int encrypt, bool is_inline = false);
+                      protocol_t protocol, int encrypt, bool is_inline = false,
+                      bool is_draft = false);
 void cancel_mapi_attachment (LPATTACH *attach, sink_t sink);
 void create_top_signing_header (char *buffer, size_t buflen, protocol_t protocol,
                            int first, const char *boundary, const char *micalg);