diff --git a/src/chat/gui.rs b/src/chat/gui.rs index 07bca22..6691c06 100644 --- a/src/chat/gui.rs +++ b/src/chat/gui.rs @@ -956,7 +956,7 @@ fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool let mut label = String::new(); - if let (true, Some((date, ip, content, nick))) = + if let (true, Some((date, ip, content, nick, avatar))) = (formatting_enabled, parse_message(message.clone())) { if let Some(ip) = ip { diff --git a/src/chat/mod.rs b/src/chat/mod.rs index bb82e68..f7171d4 100644 --- a/src/chat/mod.rs +++ b/src/chat/mod.rs @@ -34,6 +34,7 @@ lazy_static! { pub static ref DATE_REGEX: Regex = Regex::new(r"\[(.*?)\] (.*)").unwrap(); pub static ref IP_REGEX: Regex = Regex::new(r"\{(.*?)\} (.*)").unwrap(); + pub static ref AVATAR_REGEX: Regex = Regex::new(r"(.*) !!AR!!(.*)").unwrap(); pub static ref DEFAULT_USER_AGENT: Regex = Regex::new(r"<(.*?)> (.*)").unwrap(); @@ -256,10 +257,16 @@ pub fn sanitize_message(message: String) -> Option { Some(message) } -/// message -> (date, ip, text, (name, color)) +/// message -> (date, ip, text, (name, color), avatar) pub fn parse_message( message: String, -) -> Option<(String, Option, String, Option<(String, String)>)> { +) -> Option<( + String, + Option, + String, + Option<(String, String)>, + Option, +)> { if message.is_empty() { return None; } @@ -297,7 +304,16 @@ pub fn parse_message( (message, None) }; - Some((date, ip, message, nick)) + let (message, avatar) = if let Some(message) = AVATAR_REGEX.captures(&message) { + ( + message.get(1)?.as_str().to_string(), + Some(message.get(2)?.as_str().to_string()), + ) + } else { + (message, None) + }; + + Some((date, ip, message, nick, avatar)) } // message -> (nick, content, color)