diff --git a/src/overlay/elements/leaderboard/leaderboard_entry.rs b/src/overlay/elements/leaderboard/leaderboard_entry.rs index d45cdc5..c809b44 100644 --- a/src/overlay/elements/leaderboard/leaderboard_entry.rs +++ b/src/overlay/elements/leaderboard/leaderboard_entry.rs @@ -108,7 +108,26 @@ impl LeaderBoardEntry { pub fn change_name(&mut self, name: String) -> Result<()> { self.name = name; - self.name_label.set_text(&self.name) + self.name_label.set_text(Self::check_string(&self.name)) + } + + fn check_string(s: &str) -> String { + std::str::from_utf8( + &s.as_bytes() + .iter() + .filter(|&&b| { + (b > 96 && b < 123) // small letters + || (b > 64 && b < 91) // big letters + || (b > 47 && b < 58) // numbers + || b == 45 // dash + || b == 95 // underscore + || b == 32 // whitespace + }) + .map(|&b| b) + .collect::>(), + ) + .unwrap() + .to_string() } pub fn snippet(&self) -> Arc { @@ -253,3 +272,28 @@ impl LeaderBoardEntry { self.place_updated = false; } } + +#[cfg(test)] +mod test { + + #[test] + fn test_string_replacement() { + let s_orig = "blaĆ¼"; + let s = super::LeaderBoardEntry::check_string(s_orig); + println!("{} {:?}", s_orig, s); + + for b in s.as_bytes() { + println!("{}", b) + } + + println!(); + + let s2_orig = "az AZ 09 # - _"; + let s2 = super::LeaderBoardEntry::check_string(s2_orig); + println!("{} {:?}", s2_orig, s2); + + for b in s2.as_bytes() { + println!("{}", *b); + } + } +}