diff --git a/src/chat.rs b/src/chat.rs index a1cd149c1..5e79c3516 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1722,76 +1722,73 @@ pub unsafe fn set_chat_profile_image( ) -> Result<(), Error> { ensure!(chat_id > DC_CHAT_ID_LAST_SPECIAL, "Invalid chat ID"); - let mut success = false; - let mut chat = Chat::load_from_db(context, chat_id)?; let mut msg = dc_msg_new_untyped(context); - let mut new_image_rel = None; + let new_image_rel; - (|| { - if real_group_exists(context, chat_id) { - if !(is_contact_in_chat(context, chat_id, 1i32 as u32) == 1i32) { - log_event!( - context, - Event::ERROR_SELF_NOT_IN_GROUP, - 0, - "Cannot set chat profile image; self not in group.", - ); - /* we should respect this - whatever we send to the group, it gets discarded anyway! */ - return; - } - if !new_image.as_ref().is_empty() { - let mut img = new_image.as_ref().to_string(); - if !dc_make_rel_and_copy(context, &mut img) { - return; - } - new_image_rel = Some(img); - } else { - new_image_rel = Some("".to_string()); - } - - if let Some(ref new_image_rel) = new_image_rel { - chat.param.set(Param::ProfileImage, new_image_rel); - } - if chat.update_param().is_ok() { - if chat.param.get_int(Param::Unpromoted).unwrap_or_default() == 0 { - msg.param.set_int(Param::Cmd, 3); - if let Some(ref new_image_rel) = new_image_rel { - msg.param.set(Param::Arg, new_image_rel); - } - msg.type_0 = Viewtype::Text; - msg.text = Some(context.stock_system_msg( - if new_image_rel.is_some() { - StockMessage::MsgGrpImgChanged - } else { - StockMessage::MsgGrpImgDeleted - }, - "", - "", - DC_CONTACT_ID_SELF, - )); - msg.id = send_msg(context, chat_id, &mut msg).unwrap_or_default(); - context.call_cb( - Event::MSGS_CHANGED, - chat_id as uintptr_t, - msg.id as uintptr_t, - ); - } - context.call_cb( - Event::CHAT_MODIFIED, - chat_id as uintptr_t, - 0i32 as uintptr_t, - ); - success = true; - } - } - })(); - - if !success { - bail!("Failed to set profile image"); + macro_rules! returnError{ + () => { + bail!("Failed to set profile image"); + }; } - Ok(()) + if real_group_exists(context, chat_id) { + if !(is_contact_in_chat(context, chat_id, 1i32 as u32) == 1i32) { + log_event!( + context, + Event::ERROR_SELF_NOT_IN_GROUP, + 0, + "Cannot set chat profile image; self not in group.", + ); + /* we should respect this - whatever we send to the group, it gets discarded anyway! */ + returnError!(); + } + if !new_image.as_ref().is_empty() { + let mut img = new_image.as_ref().to_string(); + if !dc_make_rel_and_copy(context, &mut img) { + returnError!(); + } + new_image_rel = Some(img); + } else { + new_image_rel = Some("".to_string()); + } + + if let Some(ref new_image_rel) = new_image_rel { + chat.param.set(Param::ProfileImage, new_image_rel); + } + if chat.update_param().is_ok() { + if chat.param.get_int(Param::Unpromoted).unwrap_or_default() == 0 { + msg.param.set_int(Param::Cmd, 3); + if let Some(ref new_image_rel) = new_image_rel { + msg.param.set(Param::Arg, new_image_rel); + } + msg.type_0 = Viewtype::Text; + msg.text = Some(context.stock_system_msg( + if new_image_rel.is_some() { + StockMessage::MsgGrpImgChanged + } else { + StockMessage::MsgGrpImgDeleted + }, + "", + "", + DC_CONTACT_ID_SELF, + )); + msg.id = send_msg(context, chat_id, &mut msg).unwrap_or_default(); + context.call_cb( + Event::MSGS_CHANGED, + chat_id as uintptr_t, + msg.id as uintptr_t, + ); + } + context.call_cb( + Event::CHAT_MODIFIED, + chat_id as uintptr_t, + 0i32 as uintptr_t, + ); + return Ok(()); + } + } + returnError!() } pub unsafe fn forward_msgs(