fur_cli/renderer/
markdown.rs1use std::fs;
2use std::path::Path;
3use serde_json::Value;
4
5use crate::commands::timeline::TimelineArgs;
6use crate::renderer::utils::load_message;
7
8pub fn render_message_md(
9 fur_dir: &Path,
10 msg_id: &str,
11 label: String,
12 args: &TimelineArgs,
13 avatars: &Value,
14 out: &mut String,
15) {
16 let Some(msg) = load_message(fur_dir, msg_id, avatars) else { return };
17
18 if let Some(att) = msg.attachment {
19 if att.ends_with(".png")
20 || att.ends_with(".jpg")
21 || att.ends_with(".jpeg")
22 || att.ends_with(".gif")
23 {
24 out.push_str(&format!("\n\n\n", att));
25 } else if att.ends_with(".pdf") {
26 out.push_str(&format!(
28 "\n[Attached PDF: {}]({})\n\n",
29 Path::new(&att).file_name().unwrap().to_string_lossy(),
30 att
31 ));
32 } else {
33 out.push_str(&format!("\n[Attachment: {}]\n\n", att));
34 }
35 }
36
37 out.push_str(&format!("**{} [{}]:** {}\n", msg.name, msg.emoji, msg.text));
38 out.push_str(&format!("_{} {} - {}_\n\n", msg.date_str, msg.time_str, label));
39
40 if args.verbose || args.contents {
41 if let Some(path_str) = msg.markdown {
42 if let Ok(contents) = fs::read_to_string(path_str) {
43 out.push_str(&format!("\n{}\n", contents));
44 }
45 }
46 }
47
48 for (bi, block) in msg.branches.iter().enumerate() {
50 let branch_label = format!("{} - Branch {}", label, bi + 1);
51
52 for cid in block {
53 render_message_md(fur_dir, cid, branch_label.clone(), args, avatars, out);
54 }
55 }
56}