fur_cli/renderer/
terminal.rs1use std::fs;
2use std::path::Path;
3use serde_json::Value;
4use colored::*;
5
6use crate::commands::timeline::TimelineArgs;
7use crate::renderer::utils::load_message;
8
9pub fn render_message(
10 fur_dir: &Path,
11 msg_id: &str,
12 label: String,
13 args: &TimelineArgs,
14 avatars: &Value,
15) {
16 let Some(msg) = load_message(fur_dir, msg_id, avatars) else { return };
17
18 if let Some(att) = msg.attachment {
19 println!("{}🖼️ [Attachment: {}]\n", " ".repeat(4), att);
20 }
21
22 println!(
23 "{} {} - {} [{}] {}:",
24 msg.date_str.cyan(),
25 msg.time_str.bright_cyan().bold(),
26 label.bright_green(),
27 msg.emoji,
28 msg.name.bright_yellow(),
29 );
30 println!("{}\n", msg.text.white());
31
32 if args.verbose || args.contents {
33 if let Some(path_str) = msg.markdown {
34 if let Ok(contents) = fs::read_to_string(path_str) {
35 println!("{}", contents);
36 }
37 }
38 }
39
40 for (bi, block) in msg.branches.iter().enumerate() {
42 let branch_label = format!("{} - Branch {}", label, bi + 1);
43
44 for cid in block {
45 render_message(fur_dir, cid, branch_label.clone(), args, avatars);
46 }
47 }
48}