diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e232c42..83959c2f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ ### Changes - allow sender timestamp to be in the future, but not too much +- refactorings #3706 ### Fixes - `dc_search_msgs()` returns unaccepted requests #3694 diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index 2b1594a7a..402627206 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -2852,7 +2852,11 @@ pub unsafe extern "C" fn dc_chat_get_mailinglist_addr(chat: *mut dc_chat_t) -> * return "".strdup(); } let ffi_chat = &*chat; - ffi_chat.chat.get_mailinglist_addr().strdup() + ffi_chat + .chat + .get_mailinglist_addr() + .unwrap_or_default() + .strdup() } #[no_mangle] diff --git a/deltachat-jsonrpc/src/api/types/chat.rs b/deltachat-jsonrpc/src/api/types/chat.rs index f63243112..f5a5c3bcd 100644 --- a/deltachat-jsonrpc/src/api/types/chat.rs +++ b/deltachat-jsonrpc/src/api/types/chat.rs @@ -37,7 +37,7 @@ pub struct FullChat { ephemeral_timer: u32, //TODO look if there are more important properties in newer core versions can_send: bool, was_seen_recently: bool, - mailing_list_address: String, + mailing_list_address: Option, } impl FullChat { @@ -81,7 +81,7 @@ impl FullChat { false }; - let mailing_list_address = chat.get_mailinglist_addr().to_string(); + let mailing_list_address = chat.get_mailinglist_addr().map(|s| s.to_string()); Ok(FullChat { id: chat_id, diff --git a/deltachat-jsonrpc/typescript/generated/types.ts b/deltachat-jsonrpc/typescript/generated/types.ts index d55bde227..c8d451b44 100644 --- a/deltachat-jsonrpc/typescript/generated/types.ts +++ b/deltachat-jsonrpc/typescript/generated/types.ts @@ -22,7 +22,7 @@ export type Contact={"address":string;"color":string;"authName":string;"status": * the contact's last seen timestamp */ "lastSeen":I64;"wasSeenRecently":boolean;}; -export type FullChat={"id":U32;"name":string;"isProtected":boolean;"profileImage":(string|null);"archived":boolean;"chatType":U32;"isUnpromoted":boolean;"isSelfTalk":boolean;"contacts":(Contact)[];"contactIds":(U32)[];"color":string;"freshMessageCounter":Usize;"isContactRequest":boolean;"isDeviceChat":boolean;"selfInGroup":boolean;"isMuted":boolean;"ephemeralTimer":U32;"canSend":boolean;"wasSeenRecently":boolean;"mailingListAddress":string;}; +export type FullChat={"id":U32;"name":string;"isProtected":boolean;"profileImage":(string|null);"archived":boolean;"chatType":U32;"isUnpromoted":boolean;"isSelfTalk":boolean;"contacts":(Contact)[];"contactIds":(U32)[];"color":string;"freshMessageCounter":Usize;"isContactRequest":boolean;"isDeviceChat":boolean;"selfInGroup":boolean;"isMuted":boolean;"ephemeralTimer":U32;"canSend":boolean;"wasSeenRecently":boolean;"mailingListAddress":(string|null);}; /** * cheaper version of fullchat, omits: diff --git a/src/chat.rs b/src/chat.rs index 7bda1598b..6e58d1d2d 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1130,8 +1130,8 @@ impl Chat { } /// Returns mailing list address where messages are sent to. - pub fn get_mailinglist_addr(&self) -> &str { - self.param.get(Param::ListPost).unwrap_or_default() + pub fn get_mailinglist_addr(&self) -> Option<&str> { + self.param.get(Param::ListPost) } /// Returns profile image path for the chat. diff --git a/src/receive_imf.rs b/src/receive_imf.rs index 3d078b91a..dc48c5d66 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -1912,7 +1912,7 @@ async fn apply_mailinglist_changes( if list_post != old_list_post { // Apparently the mailing list is using a different List-Post header in each message. // Make the mailing list read-only because we would't know which message the user wants to reply to. - chat.param.set(Param::ListPost, ""); + chat.param.remove(Param::ListPost); chat.update_param(context).await?; } } else { @@ -2989,7 +2989,7 @@ mod tests { assert!(chat.can_send(&t.ctx).await?); assert_eq!( chat.get_mailinglist_addr(), - "reply+elernshsetushoyseshetihseusaferuhsedtisneu@reply.github.com" + Some("reply+elernshsetushoyseshetihseusaferuhsedtisneu@reply.github.com") ); assert_eq!(chat.name, "deltachat/deltachat-core-rust"); assert_eq!(chat::get_chat_contacts(&t.ctx, chat_id).await?.len(), 1); @@ -2998,7 +2998,7 @@ mod tests { let chat = chat::Chat::load_from_db(&t.ctx, chat_id).await?; assert!(!chat.can_send(&t.ctx).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); let chats = Chatlist::try_load(&t.ctx, 0, None, None).await?; assert_eq!(chats.len(), 1); @@ -3057,7 +3057,7 @@ mod tests { let chat = Chat::load_from_db(&t.ctx, chat_id).await.unwrap(); assert_eq!(chat.name, "delta-dev"); assert!(chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), "delta@codespeak.net"); + assert_eq!(chat.get_mailinglist_addr(), Some("delta@codespeak.net")); let msg = get_chat_msg(&t, chat_id, 0, 1).await; let contact1 = Contact::load_from_db(&t.ctx, msg.from_id).await.unwrap(); @@ -3320,7 +3320,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.name, "ola"); assert_eq!(chat::get_chat_msgs(&t, chat.id, 0).await.unwrap().len(), 1); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); // receive another message with no sender name but the same address, // make sure this lands in the same chat @@ -3373,7 +3373,7 @@ Hello mailinglist!\r\n" ); assert_eq!(chat.name, "Atlas Obscura"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); Ok(()) } @@ -3402,7 +3402,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.grpid, "1234ABCD-123LMNO.mailing.dhl.de"); assert_eq!(chat.name, "DHL Paket"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); Ok(()) } @@ -3431,7 +3431,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.grpid, "dpdde.mxmail.service.dpd.de"); assert_eq!(chat.name, "DPD"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); Ok(()) } @@ -3452,7 +3452,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.grpid, "96540.xt.local"); assert_eq!(chat.name, "Microsoft Store"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); receive_imf( &t, @@ -3465,7 +3465,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.grpid, "121231234.xt.local"); assert_eq!(chat.name, "DER SPIEGEL Kundenservice"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); Ok(()) } @@ -3488,7 +3488,7 @@ Hello mailinglist!\r\n" assert_eq!(chat.grpid, "51231231231231231231231232869f58.xing.com"); assert_eq!(chat.name, "xing.com"); assert!(!chat.can_send(&t).await?); - assert_eq!(chat.get_mailinglist_addr(), ""); + assert_eq!(chat.get_mailinglist_addr(), None); Ok(()) }