Skip to content

Commit

Permalink
Improve quote rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
haecker-felix committed Jun 21, 2021
1 parent a06428f commit 22b2087
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 7 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
config.json
store.json
backup.json
template.md
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ async-trait = "0.1"
log = "0.4"
pretty_env_logger = "0.4"
chrono = "0.4"
regex = "1.5.4"
5 changes: 3 additions & 2 deletions src/bot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,12 @@ impl EventCallback {

async fn render_message_command(&self, editor: &RoomMember) {
let rendered = {
let bot = self.0.client.user_id().await.unwrap();

let news_store = self.0.news_store.lock().unwrap();
let news = news_store.get_news().clone();

let editor = utils::get_member_display_name(editor);
let r = render::render(news, editor);
let r = render::render(news, editor, &bot);

format!("<pre><code>{}</code></pre>\n", r)
};
Expand Down
45 changes: 40 additions & 5 deletions src/render.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
use matrix_sdk::RoomMember;
use regex::Regex;
use ruma::UserId;

use std::env;
use std::fs::File;
use std::io::Read;

use crate::store::News;
use crate::utils;

pub fn render(news: Vec<News>, editor: String) -> String {
pub fn render(news: Vec<News>, editor: &RoomMember, bot: &UserId) -> String {
let path = match env::var("TEMPLATE_PATH") {
Ok(val) => val,
Err(_) => "./template.md".to_string(),
Expand All @@ -28,22 +33,52 @@ pub fn render(news: Vec<News>, editor: String) -> String {
n.reporter_display_name, n.reporter_id
);

let message = prepare_message(n.message, bot);

let section = format!(
"# {}\n\
{} reports that\n\
> {}\n\n",
section, user, n.message
{} reports that\n\n\
{}\n\n",
section, user, message
);

report = (report + &section).to_string();
}

// Editor user name / link
let display_name = utils::get_member_display_name(editor);
let author = format!(
"[{}](https://matrix.to/#/{})",
display_name,
editor.user_id()
);

// Date for the blog
let now: chrono::DateTime<chrono::Utc> = chrono::Utc::now();
let today = now.format("%Y-%m-%d");

template = template.replace("{{today}}", &today.to_string());
template = template.replace("{{author}}", &editor);
template = template.replace("{{author}}", &author);
template = template.replace("{{report}}", &report);

template
}

fn prepare_message(msg: String, bot: &UserId) -> String {
let msg = msg.trim();

// remove bot user name
let regex = format!("^@?{}(:{})?:?", bot.localpart(), bot.server_name());
let re = Regex::new(&regex).unwrap();
let msg = re.replace(&msg, "");
let msg = msg.trim();

// quote message
let msg = format!("> {}", msg);
let msg = msg.replace("\n", "\n> ");

// lists
let msg = msg.replace("> -", "> *");

msg.to_string()
}

0 comments on commit 22b2087

Please sign in to comment.