From 5083e2f067bdb4b82a2c5136bbf6b1c34ce9caa0 Mon Sep 17 00:00:00 2001
From: iequidoo <dgreshilov@gmail.com>
Date: Wed, 16 Apr 2025 15:25:02 -0300
Subject: [PATCH] feat: Allow sending unencrypted for chatmail if
 SignUnencrypted is set

If a chatmail user somehow can send unencrypted, setting `SignUnencrypted` is a simplest workaround,
it has no meaning for chatmail anyway. Setting `IsChatmail` to 0 has more side effects.
---
 src/e2ee.rs | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/e2ee.rs b/src/e2ee.rs
index 011e8b8c06..25f35d31fe 100644
--- a/src/e2ee.rs
+++ b/src/e2ee.rs
@@ -48,12 +48,13 @@ impl EncryptHelper {
         context: &Context,
         peerstates: &[(Option<Peerstate>, String)],
     ) -> Result<bool> {
-        let is_chatmail = context.is_chatmail().await?;
+        // For chatmail we ignore the encryption preference,
+        // because we can either send encrypted or not at all.
+        let encrypt_if_possible = context.is_chatmail().await?
+            && !context.get_config_bool(Config::SignUnencrypted).await?;
         for (peerstate, _addr) in peerstates {
             if let Some(peerstate) = peerstate {
-                // For chatmail we ignore the encryption preference,
-                // because we can either send encrypted or not at all.
-                if is_chatmail || peerstate.prefer_encrypt != EncryptPreference::Reset {
+                if encrypt_if_possible || peerstate.prefer_encrypt != EncryptPreference::Reset {
                     continue;
                 }
             }