diff --git a/src/dc_chat.rs b/src/dc_chat.rs index edb98022e5..e0b3725b91 100644 --- a/src/dc_chat.rs +++ b/src/dc_chat.rs @@ -1410,32 +1410,38 @@ pub fn dc_get_chat_contacts(context: &Context, chat_id: u32) -> *mut dc_array_t /* Normal chats do not include SELF. Group chats do (as it may happen that one is deleted from a groupchat but the chats stays visible, moreover, this makes displaying lists easier) */ - if chat_id == 1 { - return std::ptr::null_mut(); - } + let ret = if chat_id != 1 { + // we could also create a list for all contacts in the deaddrop by searching contacts belonging to chats with + // chats.blocked=2, however, currently this is not needed - // we could also create a list for all contacts in the deaddrop by searching contacts belonging to chats with - // chats.blocked=2, however, currently this is not needed + context + .sql + .query_map( + "SELECT cc.contact_id FROM chats_contacts cc \ + LEFT JOIN contacts c ON c.id=cc.contact_id WHERE cc.chat_id=? \ + ORDER BY c.id=1, LOWER(c.name||c.addr), c.id;", + params![chat_id as i32], + |row| row.get::<_, i32>(0), + |ids| { + let mut ret = dc_array_t::new(100); - context - .sql - .query_map( - "SELECT cc.contact_id FROM chats_contacts cc \ - LEFT JOIN contacts c ON c.id=cc.contact_id WHERE cc.chat_id=? \ - ORDER BY c.id=1, LOWER(c.name||c.addr), c.id;", - params![chat_id as i32], - |row| row.get::<_, i32>(0), - |ids| { - let mut ret = dc_array_t::new(100); + for id in ids { + ret.add_id(id? as u32); + } - for id in ids { - ret.add_id(id? as u32); - } + Ok(ret.into_raw()) + }, + ) + .ok() + } else { + None + }; - Ok(ret.into_raw()) - }, - ) - .unwrap_or_else(|_| std::ptr::null_mut()) + if let Some(chat_contacts) = ret { + chat_contacts + } else { + dc_array_t::new(0).into_raw() + } } pub unsafe fn dc_get_chat(context: &Context, chat_id: uint32_t) -> *mut Chat {