Implement Event::RoomSubject for room subject changes/retrieve

This commit is contained in:
xmppftw 2023-12-31 19:41:34 +01:00
parent 51f2462772
commit 4f8ce0a953
2 changed files with 10 additions and 0 deletions

View file

@ -24,6 +24,11 @@ pub enum Event {
RoomJoined(BareJid), RoomJoined(BareJid),
RoomLeft(BareJid), RoomLeft(BareJid),
RoomMessage(Id, BareJid, RoomNick, Body), RoomMessage(Id, BareJid, RoomNick, Body),
/// The subject of a room was received.
/// - The BareJid is the room's address.
/// - The RoomNick is the nickname of the room member who set the subject.
/// - The String is the new subject.
RoomSubject(BareJid, Option<RoomNick>, String),
/// A private message received from a room, containing the message ID, the room's BareJid, /// A private message received from a room, containing the message ID, the room's BareJid,
/// the sender's nickname, and the message body. /// the sender's nickname, and the message body.
RoomPrivateMessage(Id, BareJid, RoomNick, Body), RoomPrivateMessage(Id, BareJid, RoomNick, Body),

View file

@ -15,6 +15,11 @@ pub async fn handle_message_group_chat(
message: &Message, message: &Message,
) { ) {
let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect(); let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect();
if let Some((_lang, subject)) = message.get_best_subject(langs.clone()) {
events.push(Event::RoomSubject(from.to_bare(), from.resource_str().map(String::from), subject.0.clone()));
}
if let Some((_lang, body)) = message.get_best_body(langs) { if let Some((_lang, body)) = message.get_best_body(langs) {
let event = match from.clone() { let event = match from.clone() {
Jid::Full(full) => Event::RoomMessage( Jid::Full(full) => Event::RoomMessage(