use chrono::{DateTime, Utc};
use tokio_xmpp::{
jid::Jid,
parsers::{delay::Delay, message::Message, ns},
};
#[derive(Debug, Clone)]
pub struct StanzaTimeInfo {
pub received: DateTime<Utc>,
pub delays: Vec<Delay>,
}
impl StanzaTimeInfo {
pub fn delay_from(&self, jid: &Jid) -> Option<&Delay> {
self.delays.iter().find(|delay| {
if let Some(from) = &delay.from {
return from == jid;
}
return false;
})
}
}
pub fn message_time_info(message: &Message) -> StanzaTimeInfo {
let mut delays = vec![];
for payload in &message.payloads {
if payload.is("delay", ns::DELAY) {
match Delay::try_from(payload.clone()) {
Ok(delay) => delays.push(delay),
Err(e) => {
error!("Wrong <delay> format in payload from {}:{}\n{:?}\nUsing received time only.",
message.from.as_ref().unwrap().to_owned(),
e,
payload);
}
}
}
}
StanzaTimeInfo {
received: Utc::now(),
delays,
}
}