use anyhow::Result;
use crate::matrix::message::MatrixMessage;
use crate::teams::TeamsMessage;
pub struct MessageFlow;
impl MessageFlow {
pub fn new() -> Self {
Self
}
pub async fn teams_to_matrix(&self, teams_message: TeamsMessage) -> Result<MatrixMessage> {
Ok(MatrixMessage {
event_id: format!("$teams_{}", teams_message.id),
room_id: format!("!teams_{}:localhost", teams_message.channel_id.unwrap_or_default()),
sender: format!("@teams_{}:localhost", teams_message.sender_id),
content: crate::matrix::message::MessageContent {
msgtype: "m.text".to_string(),
body: teams_message.content.clone(),
formatted_body: None,
format: None,
},
origin_server_ts: chrono::Utc::now().timestamp_millis() as u64,
})
}
pub async fn matrix_to_teams(&self, matrix_message: MatrixMessage) -> Result<TeamsMessage> {
Ok(TeamsMessage {
id: matrix_message.event_id.clone(),
channel_id: None,
chat_id: None,
sender_id: matrix_message.sender.clone(),
sender_name: String::new(),
content: matrix_message.content.body.clone(),
content_type: "text".to_string(),
attachments: vec![],
reply_to: None,
created_at: chrono::Utc::now().to_rfc3339(),
updated_at: None,
})
}
pub async fn handle_teams_message(&self, message: TeamsMessage) -> Result<()> {
let matrix_message = self.teams_to_matrix(message).await?;
Ok(())
}
pub async fn handle_matrix_message(&self, message: MatrixMessage) -> Result<()> {
let teams_message = self.matrix_to_teams(message).await?;
Ok(())
}
}