commit 80c9da538552e39d62b69cd566f2380f52d0fc7d
parent 5904c5c97812db400f3a74c0304072c58cead008
Author: Marcel <mtrnord1@gmail.com>
Date: Fri, 29 May 2020 10:05:44 +0200
Add markdown sending
Took 15 minutes
Diffstat:
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
@@ -28,6 +28,7 @@ url = "2.1.1"
thiserror = "1.0"
futures-locks = { git = "https://github.com/asomers/futures-locks", default-features = false }
linked_hash_set = {version = "0.1.3", features = ["serde"] }
+comrak = "0.7"
[dev-dependencies]
wasm-bindgen-test = "0.3"
diff --git a/src/app/matrix.rs b/src/app/matrix.rs
@@ -23,6 +23,7 @@ use yew::worker::*;
use crate::app::matrix::types::{MessageWrapper, SmallRoom};
use crate::constants::AUTH_KEY;
use crate::errors::MatrixError;
+use comrak::{Arena, ComrakOptions, parse_document, format_html};
mod sync;
pub mod types;
@@ -335,9 +336,33 @@ impl Agent for MatrixAgent {
}
Request::SendMessage((room_id, message)) => {
let client = self.matrix_client.clone().unwrap();
- let content =
- MessageEventContent::Text(TextMessageEventContent::new_plain(message.clone()));
spawn_local(async move {
+ let arena = Arena::new();
+
+ let root = parse_document(
+ &arena,
+ message.clone().as_str(),
+ &ComrakOptions::default());
+
+ let mut html = vec![];
+ format_html(root, &ComrakOptions::default(), &mut html).unwrap();
+ let mut formatted_message = String::from_utf8(html).unwrap();
+ formatted_message = formatted_message.replace("<p>", "").replace("</p>","");
+ formatted_message.pop();
+
+ let content;
+ if formatted_message == message {
+ content =
+ MessageEventContent::Text(TextMessageEventContent::new_plain(message.clone()));
+ } else {
+ content =
+ MessageEventContent::Text(TextMessageEventContent {
+ body: message.into(),
+ format: Some("org.matrix.custom.html".to_string()),
+ formatted_body: Some(formatted_message),
+ relates_to: None,
+ });
+ }
client.room_send(&room_id, content, None).await;
});
}