Private
Public Access
1
0

weird: need to filter out bidi control characters from sender handles from server

This commit is contained in:
2025-06-26 18:32:53 -07:00
parent f6bb1a9b57
commit 5a399cc6ca
2 changed files with 24 additions and 11 deletions

View File

@@ -23,15 +23,32 @@ impl Message {
impl From<kordophone::model::Message> for Message {
fn from(value: kordophone::model::Message) -> Self {
let sender_participant = match value.sender {
Some(sender) => Participant::Remote {
contact_id: None,
// Weird server quirk: some sender handles are encoded with control characters.
handle: sender.chars()
.filter(|c| !c.is_control() && !matches!(c,
'\u{202A}' | // LRE
'\u{202B}' | // RLE
'\u{202C}' | // PDF
'\u{202D}' | // LRO
'\u{202E}' | // RLO
'\u{2066}' | // LRI
'\u{2067}' | // RLI
'\u{2068}' | // FSI
'\u{2069}' // PDI
))
.collect::<String>(),
},
None => Participant::Me,
};
Self {
id: value.guid,
sender: match value.sender {
Some(sender) => Participant::Remote {
handle: sender,
contact_id: None,
},
None => Participant::Me,
},
sender: sender_participant,
text: value.text,
date: DateTime::from_timestamp(
value.date.unix_timestamp(),