diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index b540cc5339..1ec050af66 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -440,12 +440,6 @@ char* dc_get_blobdir (const dc_context_t* context); * spam folder and `sendbox_watch` will also still be respected * if enabled. * 0=watch all folders normally (default) - * - `show_emails` = DC_SHOW_EMAILS_OFF (0)= - * show direct replies to chats only, - * DC_SHOW_EMAILS_ACCEPTED_CONTACTS (1)= - * also show all mails of confirmed contacts, - * DC_SHOW_EMAILS_ALL (2)= - * also show mails of unconfirmed contacts (default). * - `delete_device_after` = 0=do not delete messages from device automatically (default), * >=1=seconds, after which messages are deleted automatically from the device. * Messages in the "saved messages" chat (see dc_chat_is_self_talk()) are skipped. @@ -454,8 +448,7 @@ char* dc_get_blobdir (const dc_context_t* context); * - `delete_server_after` = 0=do not delete messages from server automatically (default), * 1=delete messages directly after receiving from server, mvbox is skipped. * >1=seconds, after which messages are deleted automatically from the server, mvbox is used as defined. - * "Saved messages" are deleted from the server as well as - * e-mails matching the `show_emails` settings above, the UI should clearly point that out. + * "Saved messages" are deleted from the server as well as emails, the UI should clearly point that out. * See also dc_estimate_deletion_cnt(). * - `media_quality` = DC_MEDIA_QUALITY_BALANCED (0) = * good outgoing images/videos/voice quality at reasonable sizes (default) @@ -1478,7 +1471,6 @@ dc_chatlist_t* dc_get_similar_chatlist (dc_context_t* context, uint32_t ch * @param from_server 1=Estimate deletion count for server, 0=Estimate deletion count for device * @param seconds Count messages older than the given number of seconds. * @return Number of messages that are older than the given number of seconds. - * This includes e-mails downloaded due to the `show_emails` option. * Messages in the "saved messages" folder are not counted as they will not be deleted automatically. */ int dc_estimate_deletion_cnt (dc_context_t* context, int from_server, int64_t seconds); @@ -6712,14 +6704,6 @@ void dc_event_unref(dc_event_t* event); #define DC_EVENT_DATA2_IS_STRING(e) ((e)==DC_EVENT_CONFIGURE_PROGRESS || (e)==DC_EVENT_IMEX_FILE_WRITTEN || ((e)>=100 && (e)<=499)) -/* - * Values for dc_get|set_config("show_emails") - */ -#define DC_SHOW_EMAILS_OFF 0 -#define DC_SHOW_EMAILS_ACCEPTED_CONTACTS 1 -#define DC_SHOW_EMAILS_ALL 2 - - /* * Values for dc_get|set_config("media_quality") */ diff --git a/src/chat/chat_tests.rs b/src/chat/chat_tests.rs index a93ab2179a..924edfa1a4 100644 --- a/src/chat/chat_tests.rs +++ b/src/chat/chat_tests.rs @@ -1895,12 +1895,6 @@ async fn test_classic_email_chat() -> Result<()> { let msgs = get_chat_msgs(&alice, chat_id).await?; assert_eq!(msgs.len(), 1); - // Alice disables receiving classic emails. - alice - .set_config(Config::ShowEmails, Some("0")) - .await - .unwrap(); - // Already received classic email should still be in the chat. assert_eq!(chat_id.get_fresh_msg_cnt(&alice).await?, 1); diff --git a/src/config.rs b/src/config.rs index 62feb6bca1..5fbdb95435 100644 --- a/src/config.rs +++ b/src/config.rs @@ -167,10 +167,6 @@ pub enum Config { #[strum(props(default = "0"))] OnlyFetchMvbox, - /// Whether to show classic emails or only chat messages. - #[strum(props(default = "2"))] // also change ShowEmails.default() on changes - ShowEmails, - /// Quality of the media files to send. #[strum(props(default = "0"))] // also change MediaQuality.default() on changes MediaQuality, @@ -464,7 +460,6 @@ impl Config { Self::Displayname | Self::MdnsEnabled | Self::MvboxMove - | Self::ShowEmails | Self::Selfavatar | Self::Selfstatus, ) @@ -711,12 +706,7 @@ impl Context { Self::check_config(key, value)?; let n_transports = self.count_transports().await?; - if n_transports > 1 - && matches!( - key, - Config::MvboxMove | Config::OnlyFetchMvbox | Config::ShowEmails - ) - { + if n_transports > 1 && matches!(key, Config::MvboxMove | Config::OnlyFetchMvbox) { bail!("Cannot reconfigure {key} when multiple transports are configured"); } diff --git a/src/config/config_tests.rs b/src/config/config_tests.rs index aabe0e7f5f..7da5cb2c6f 100644 --- a/src/config/config_tests.rs +++ b/src/config/config_tests.rs @@ -165,12 +165,10 @@ async fn test_sync() -> Result<()> { sync(&alice0, &alice1).await; assert_eq!(alice1.get_config_bool(Config::MdnsEnabled).await?, false); - for key in [Config::ShowEmails, Config::MvboxMove] { - let val = alice0.get_config_bool(key).await?; - alice0.set_config_bool(key, !val).await?; - sync(&alice0, &alice1).await; - assert_eq!(alice1.get_config_bool(key).await?, !val); - } + let val = alice0.get_config_bool(Config::MvboxMove).await?; + alice0.set_config_bool(Config::MvboxMove, !val).await?; + sync(&alice0, &alice1).await; + assert_eq!(alice1.get_config_bool(Config::MvboxMove).await?, !val); // `Config::SyncMsgs` mustn't be synced. alice0.set_config_bool(Config::SyncMsgs, false).await?; diff --git a/src/configure.rs b/src/configure.rs index e72315e7e4..479099639c 100644 --- a/src/configure.rs +++ b/src/configure.rs @@ -282,11 +282,6 @@ impl Context { "To use additional relays, disable the legacy option \"Settings / Advanced / Only Fetch from DeltaChat Folder\"." ); } - if self.get_config(Config::ShowEmails).await?.as_deref() != Some("2") { - bail!( - "To use additional relays, set the legacy option \"Settings / Advanced / Show Classic Emails\" to \"All\"." - ); - } if self .sql diff --git a/src/constants.rs b/src/constants.rs index 28eb4c0fed..c8518d3174 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -36,17 +36,6 @@ pub enum Blocked { Request = 2, } -#[derive( - Debug, Default, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, FromSql, ToSql, -)] -#[repr(u8)] -pub enum ShowEmails { - Off = 0, - AcceptedContacts = 1, - #[default] // also change Config.ShowEmails props(default) on changes - All = 2, -} - #[derive( Debug, Default, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, FromSql, ToSql, )] @@ -277,18 +266,6 @@ mod tests { assert_eq!(Chattype::OutBroadcast, Chattype::from_i32(160).unwrap()); } - #[test] - fn test_showemails_values() { - // values may be written to disk and must not change - assert_eq!(ShowEmails::All, ShowEmails::default()); - assert_eq!(ShowEmails::Off, ShowEmails::from_i32(0).unwrap()); - assert_eq!( - ShowEmails::AcceptedContacts, - ShowEmails::from_i32(1).unwrap() - ); - assert_eq!(ShowEmails::All, ShowEmails::from_i32(2).unwrap()); - } - #[test] fn test_blocked_values() { // values may be written to disk and must not change diff --git a/src/context.rs b/src/context.rs index afff22e5ab..53bfc3c9ac 100644 --- a/src/context.rs +++ b/src/context.rs @@ -945,10 +945,6 @@ impl Context { .await? .to_string(), ); - res.insert( - "show_emails", - self.get_config_int(Config::ShowEmails).await?.to_string(), - ); res.insert( "download_limit", self.get_config_int(Config::DownloadLimit) diff --git a/src/context/context_tests.rs b/src/context/context_tests.rs index 4a20c3af37..7f026a04fc 100644 --- a/src/context/context_tests.rs +++ b/src/context/context_tests.rs @@ -602,10 +602,7 @@ async fn test_get_next_msgs() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_cache_is_cleared_when_io_is_started() -> Result<()> { let alice = TestContext::new_alice().await; - assert_eq!( - alice.get_config(Config::ShowEmails).await?, - Some("2".to_string()) - ); + assert_eq!(alice.get_config(Config::Displayname).await?, None); // Change the config circumventing the cache // This simulates what the notification plugin on iOS might do @@ -613,24 +610,21 @@ async fn test_cache_is_cleared_when_io_is_started() -> Result<()> { alice .sql .execute( - "INSERT OR REPLACE INTO config (keyname, value) VALUES ('show_emails', '0')", + "INSERT OR REPLACE INTO config (keyname, value) VALUES ('displayname', 'Alice 2')", (), ) .await?; // Alice's Delta Chat doesn't know about it yet: - assert_eq!( - alice.get_config(Config::ShowEmails).await?, - Some("2".to_string()) - ); + assert_eq!(alice.get_config(Config::Displayname).await?, None); // Starting IO will fail of course because no server settings are configured, // but it should invalidate the caches: alice.start_io().await; assert_eq!( - alice.get_config(Config::ShowEmails).await?, - Some("0".to_string()) + alice.get_config(Config::Displayname).await?, + Some("Alice 2".to_string()) ); Ok(()) diff --git a/src/html.rs b/src/html.rs index 5ecbba1a31..b8acce41d5 100644 --- a/src/html.rs +++ b/src/html.rs @@ -281,7 +281,6 @@ mod tests { use super::*; use crate::chat; use crate::chat::{forward_msgs, save_msgs}; - use crate::config::Config; use crate::contact::ContactId; use crate::message::{MessengerMessage, Viewtype}; use crate::receive_imf::receive_imf; @@ -522,13 +521,7 @@ test some special html-characters as < > and & but also " and &#x async fn test_html_forwarding_encrypted() { let mut tcm = TestContextManager::new(); // Alice receives a non-delta html-message - // (`ShowEmails=AcceptedContacts` lets Alice actually receive non-delta messages for known - // contacts, the contact is marked as known by creating a chat using `chat_with_contact()`) let alice = &tcm.alice().await; - alice - .set_config(Config::ShowEmails, Some("1")) - .await - .unwrap(); let chat = alice .create_chat_with_contact("", "sender@testrun.org") .await; @@ -546,10 +539,6 @@ test some special html-characters as < > and & but also " and &#x // receive the message on another device let alice = &tcm.alice().await; - alice - .set_config(Config::ShowEmails, Some("0")) - .await - .unwrap(); let msg = alice.recv_msg(&msg).await; assert_eq!(msg.chat_id, alice.get_self_chat().await.id); assert_eq!(msg.get_from_id(), ContactId::SELF); diff --git a/src/imap.rs b/src/imap.rs index 5bac1e201b..69fabacf9f 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -19,7 +19,6 @@ use async_imap::types::{Fetch, Flag, Name, NameAttribute, UnsolicitedResponse}; use deltachat_contact_tools::ContactAddress; use futures::{FutureExt as _, TryStreamExt}; use futures_lite::FutureExt; -use num_traits::FromPrimitive; use ratelimit::Ratelimit; use url::Url; @@ -27,7 +26,7 @@ use crate::calls::{create_fallback_ice_servers, create_ice_servers_from_metadata use crate::chat::{self, ChatId, ChatIdBlocked, add_device_msg}; use crate::chatlist_events; use crate::config::Config; -use crate::constants::{self, Blocked, Chattype, DC_VERSION_STR, ShowEmails}; +use crate::constants::{self, Blocked, Chattype, DC_VERSION_STR}; use crate::contact::{Contact, ContactId, Modifier, Origin}; use crate::context::Context; use crate::events::EventType; @@ -2317,7 +2316,7 @@ pub(crate) async fn prefetch_should_download( Some(f) => f, None => return Ok(false), }; - let (_from_id, blocked_contact, origin) = + let (_from_id, blocked_contact, _origin) = match from_field_to_contact_id(context, &from, None, true, true).await? { Some(res) => res, None => return Ok(false), @@ -2330,29 +2329,7 @@ pub(crate) async fn prefetch_should_download( return Ok(false); } - let is_chat_message = headers.get_header_value(HeaderDef::ChatVersion).is_some(); - let accepted_contact = origin.is_known(); - let is_reply_to_chat_message = get_prefetch_parent_message(context, headers) - .await? - .map(|parent| match parent.is_dc_message { - MessengerMessage::No => false, - MessengerMessage::Yes | MessengerMessage::Reply => true, - }) - .unwrap_or_default(); - - let show_emails = - ShowEmails::from_i32(context.get_config_int(Config::ShowEmails).await?).unwrap_or_default(); - - let show = is_autocrypt_setup_message - || match show_emails { - ShowEmails::Off => is_chat_message || is_reply_to_chat_message, - ShowEmails::AcceptedContacts => { - is_chat_message || is_reply_to_chat_message || accepted_contact - } - ShowEmails::All => true, - }; - - let should_download = (show && !blocked_contact) || maybe_ndn; + let should_download = !blocked_contact || maybe_ndn; Ok(should_download) } diff --git a/src/message.rs b/src/message.rs index 129e037e63..486245def0 100644 --- a/src/message.rs +++ b/src/message.rs @@ -2018,7 +2018,6 @@ pub async fn get_request_msg_cnt(context: &Context) -> usize { /// Count messages older than the given number of `seconds`. /// /// Returns the number of messages that are older than the given number of seconds. -/// This includes e-mails downloaded due to the `show_emails` option. /// Messages in the "saved messages" folder are not counted as they will not be deleted automatically. pub async fn estimate_deletion_cnt( context: &Context, diff --git a/src/mimefactory/mimefactory_tests.rs b/src/mimefactory/mimefactory_tests.rs index d29fe54645..a5909f704c 100644 --- a/src/mimefactory/mimefactory_tests.rs +++ b/src/mimefactory/mimefactory_tests.rs @@ -503,11 +503,6 @@ async fn msg_to_subject_str_inner( // Creates a `Message` that replies "Hi" to the incoming email in `imf_raw`. async fn incoming_msg_to_reply_msg(imf_raw: &[u8], context: &Context) -> Message { - context - .set_config(Config::ShowEmails, Some("2")) - .await - .unwrap(); - receive_imf(context, imf_raw, false).await.unwrap(); let chats = Chatlist::try_load(context, 0, None, None).await.unwrap(); diff --git a/src/provider/data.rs b/src/provider/data.rs index bfd359f325..7d42e93b6e 100644 --- a/src/provider/data.rs +++ b/src/provider/data.rs @@ -638,16 +638,10 @@ static P_HERMES_RADIO: Provider = Provider { strict_tls: false, ..ProviderOptions::new() }, - config_defaults: Some(&[ - ConfigDefault { - key: Config::MdnsEnabled, - value: "0", - }, - ConfigDefault { - key: Config::ShowEmails, - value: "2", - }, - ]), + config_defaults: Some(&[ConfigDefault { + key: Config::MdnsEnabled, + value: "0", + }]), oauth2_authorizer: None, }; diff --git a/src/receive_imf.rs b/src/receive_imf.rs index 0013443fc3..e96e0de906 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -11,12 +11,11 @@ use deltachat_contact_tools::{ }; use iroh_gossip::proto::TopicId; use mailparse::SingleInfo; -use num_traits::FromPrimitive; use regex::Regex; use crate::chat::{self, Chat, ChatId, ChatIdBlocked, save_broadcast_secret}; use crate::config::Config; -use crate::constants::{self, Blocked, Chattype, DC_CHAT_ID_TRASH, EDITED_PREFIX, ShowEmails}; +use crate::constants::{self, Blocked, Chattype, DC_CHAT_ID_TRASH, EDITED_PREFIX}; use crate::contact::{self, Contact, ContactId, Origin, mark_contact_id_as_verified}; use crate::context::Context; use crate::debug_logging::maybe_set_logging_xdc_inner; @@ -739,21 +738,8 @@ pub(crate) async fn receive_imf_inner( MessengerMessage::No }; - let show_emails = ShowEmails::from_i32(context.get_config_int(Config::ShowEmails).await?) - .unwrap_or_default(); - let allow_creation = if mime_parser.decrypting_failed { false - } else if mime_parser.is_system_message != SystemMessage::AutocryptSetupMessage - && is_dc_message == MessengerMessage::No - && !context.get_config_bool(Config::IsChatmail).await? - { - // the message is a classic email in a classic profile - // (in chatmail profiles, we always show all messages, because shared dc-mua usage is not supported) - match show_emails { - ShowEmails::Off | ShowEmails::AcceptedContacts => false, - ShowEmails::All => true, - } } else { !mime_parser.parts.iter().all(|part| part.is_reaction) }; @@ -1177,20 +1163,6 @@ async fn decide_chat_assignment( } info!(context, "Outgoing undecryptable message (TRASH)."); true - } else if mime_parser.is_system_message != SystemMessage::AutocryptSetupMessage - && !mime_parser.has_chat_version() - && parent_message - .as_ref() - .is_none_or(|p| p.is_dc_message == MessengerMessage::No) - && !context.get_config_bool(Config::IsChatmail).await? - && ShowEmails::from_i32(context.get_config_int(Config::ShowEmails).await?) - .unwrap_or_default() - == ShowEmails::Off - { - info!(context, "Classical email not shown (TRASH)."); - // the message is a classic email in a classic profile - // (in chatmail profiles, we always show all messages, because shared dc-mua usage is not supported) - true } else if mime_parser .get_header(HeaderDef::XMozillaDraftInfo) .is_some() diff --git a/src/receive_imf/receive_imf_tests.rs b/src/receive_imf/receive_imf_tests.rs index 40a6eddd05..d2410b592a 100644 --- a/src/receive_imf/receive_imf_tests.rs +++ b/src/receive_imf/receive_imf_tests.rs @@ -81,7 +81,6 @@ static GRP_MAIL: &[u8] = #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_adhoc_group_show_chats_only() { let t = TestContext::new_alice().await; - t.set_config(Config::ShowEmails, Some("0")).await.unwrap(); let chats = Chatlist::try_load(&t, 0, None, None).await.unwrap(); assert_eq!(chats.len(), 0); @@ -102,7 +101,6 @@ async fn test_adhoc_group_show_chats_only() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_adhoc_group_show_accepted_contact_unknown() { let t = TestContext::new_alice().await; - t.set_config(Config::ShowEmails, Some("1")).await.unwrap(); receive_imf(&t, GRP_MAIL, false).await.unwrap(); // adhoc-group with unknown contacts with show_emails=accepted is ignored for unknown contacts @@ -115,11 +113,6 @@ async fn test_adhoc_group_outgoing_show_accepted_contact_unaccepted() -> Result< let mut tcm = TestContextManager::new(); let alice = &tcm.alice().await; let bob = &tcm.bob().await; - bob.set_config( - Config::ShowEmails, - Some(&ShowEmails::AcceptedContacts.to_string()), - ) - .await?; tcm.send_recv(alice, bob, "hi").await; receive_imf( bob, @@ -142,7 +135,6 @@ async fn test_adhoc_group_outgoing_show_accepted_contact_unaccepted() -> Result< #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_adhoc_group_show_accepted_contact_known() { let t = TestContext::new_alice().await; - t.set_config(Config::ShowEmails, Some("1")).await.unwrap(); Contact::create(&t, "Bob", "bob@example.com").await.unwrap(); receive_imf(&t, GRP_MAIL, false).await.unwrap(); @@ -155,7 +147,6 @@ async fn test_adhoc_group_show_accepted_contact_known() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_adhoc_group_show_accepted_contact_accepted() { let t = TestContext::new_alice().await; - t.set_config(Config::ShowEmails, Some("1")).await.unwrap(); // accept Bob by accepting a delta-message from Bob receive_imf(&t, MSGRMSG, false).await.unwrap(); @@ -191,7 +182,6 @@ async fn test_adhoc_group_show_accepted_contact_accepted() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_adhoc_group_show_all() { let t = TestContext::new_alice().await; - assert_eq!(t.get_config_int(Config::ShowEmails).await.unwrap(), 2); receive_imf(&t, GRP_MAIL, false).await.unwrap(); // adhoc-group with unknown contacts with show_emails=all will show up in a single chat @@ -817,10 +807,6 @@ async fn test_concat_multiple_ndns() -> Result<()> { } async fn load_imf_email(context: &Context, imf_raw: &[u8]) -> Message { - context - .set_config(Config::ShowEmails, Some("2")) - .await - .unwrap(); receive_imf(context, imf_raw, false).await.unwrap(); let chats = Chatlist::try_load(context, 0, None, None).await.unwrap(); let msg_id = chats.get_msg_id(0).unwrap().unwrap(); diff --git a/src/sql/migrations.rs b/src/sql/migrations.rs index 80ac2c564a..3681963056 100644 --- a/src/sql/migrations.rs +++ b/src/sql/migrations.rs @@ -12,7 +12,6 @@ use rusqlite::OptionalExtension; use crate::config::Config; use crate::configure::EnteredLoginParam; -use crate::constants::ShowEmails; use crate::context::Context; use crate::key::DcKey; use crate::log::warn; @@ -226,8 +225,7 @@ ALTER TABLE msgs ADD COLUMN mime_references TEXT;"#, // keep this default and use DC_SHOW_EMAILS_NO // only for new installations if exists_before_update { - sql.set_raw_config_int("show_emails", ShowEmails::All as i32) - .await?; + sql.set_raw_config_int("show_emails", 2).await?; } sql.set_db_version(50).await?; } @@ -708,8 +706,7 @@ CREATE INDEX smtp_messageid ON imap(rfc724_mid); } if dbversion < 98 { if exists_before_update && sql.get_raw_config_int("show_emails").await?.is_none() { - sql.set_raw_config_int("show_emails", ShowEmails::Off as i32) - .await?; + sql.set_raw_config_int("show_emails", 0).await?; } sql.set_db_version(98).await?; } diff --git a/src/test_utils.rs b/src/test_utils.rs index 8f837ebf11..3751f72f2b 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -779,8 +779,7 @@ impl TestContext { let chat_msgs = chat::get_chat_msgs(self, received.chat_id).await.unwrap(); assert!( chat_msgs.contains(&ChatItem::Message { msg_id: msg.id }), - "received message is not shown in chat, maybe it's hidden (you may have \ - to call set_config(Config::ShowEmails, Some(\"2\")).await)" + "received message is not shown in chat, maybe it's hidden" ); msg