Skip to main content

fur_cli/renderer/
terminal.rs

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