fur_cli/renderer/
terminal.rs1use colored::*;
2use serde_json::Value;
3use std::fs;
4use std::path::Path;
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 {
17 return;
18 };
19
20 if let Some(att) = msg.attachment {
21 println!("{}🖼️ [Attachment: {}]\n", " ".repeat(4), att);
22 }
23
24 println!(
25 "{} {} - {} [{}] {}:",
26 msg.date_str.cyan(),
27 msg.time_str.bright_cyan().bold(),
28 label.bright_green(),
29 msg.emoji,
30 msg.name.bright_yellow(),
31 );
32 println!("{}\n", msg.text.white());
33
34 if args.verbose || args.contents {
35 if let Some(path_str) = msg.markdown {
36 if let Ok(contents) = fs::read_to_string(path_str) {
37 println!("{}", contents);
38 }
39 }
40 }
41
42 for (bi, block) in msg.branches.iter().enumerate() {
44 let branch_label = format!("{} - Branch {}", label, bi + 1);
45
46 for cid in block {
47 render_message(fur_dir, cid, branch_label.clone(), args, avatars);
48 }
49 }
50}