From 1377a77ea8bd93d8681a78f62253e9747ec007d8 Mon Sep 17 00:00:00 2001 From: Hocuri Date: Thu, 7 Aug 2025 11:49:04 +0200 Subject: [PATCH] refactor: Use the same decode_name() function for the contact name, remove redundant check for grpid.is_some() If grpid is none, the group/brodacast name isn't used, anyways --- src/qr.rs | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/src/qr.rs b/src/qr.rs index d6f53954c..d6b3378f1 100644 --- a/src/qr.rs +++ b/src/qr.rs @@ -433,15 +433,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result { None }; - let name = if let Some(encoded_name) = param.get("n") { - let encoded_name = encoded_name.replace('+', "%20"); // sometimes spaces are encoded as `+` - match percent_decode_str(&encoded_name).decode_utf8() { - Ok(name) => name.to_string(), - Err(err) => bail!("Invalid name: {}", err), - } - } else { - "".to_string() - }; + let name = decode_name(¶m, "n")?.unwrap_or_default(); let invitenumber = param .get("i") @@ -456,8 +448,8 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result { .filter(|&s| validate_id(s)) .map(|s| s.to_string()); - let grpname = decode_chat_name(¶m, &grpid, "g")?; - let broadcast_name = decode_chat_name(¶m, &grpid, "b")?; + let grpname = decode_name(¶m, "g")?; + let broadcast_name = decode_name(¶m, "b")?; if let (Some(addr), Some(invitenumber), Some(authcode)) = (&addr, invitenumber, authcode.clone()) @@ -577,20 +569,12 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result { } } -fn decode_chat_name( - param: &BTreeMap<&str, &str>, - grpid: &Option, - key: &str, -) -> Result> { - if grpid.is_some() { - if let Some(encoded_name) = param.get(key) { - let encoded_name = encoded_name.replace('+', "%20"); // sometimes spaces are encoded as `+` - match percent_decode_str(&encoded_name).decode_utf8() { - Ok(name) => Ok(Some(name.to_string())), - Err(err) => bail!("Invalid group name: {}", err), - } - } else { - Ok(None) +fn decode_name(param: &BTreeMap<&str, &str>, key: &str) -> Result> { + if let Some(encoded_name) = param.get(key) { + let encoded_name = encoded_name.replace('+', "%20"); // sometimes spaces are encoded as `+` + match percent_decode_str(&encoded_name).decode_utf8() { + Ok(name) => Ok(Some(name.to_string())), + Err(err) => bail!("Invalid QR param {key}: {err}"), } } else { Ok(None)