Skip to main content

fur_cli/renderer/
terminal.rs

1use 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    // ✅ Branch-aware recursion: one label per branch block
41    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}