television_screen/
metadata.rs

1use std::fmt::Display;
2
3use crate::{
4    colors::Colorscheme,
5    mode::{mode_color, Mode},
6};
7use ratatui::{
8    layout::Constraint,
9    style::Style,
10    text::Span,
11    widgets::{Cell, Row, Table},
12};
13use television_channels::channels::UnitChannel;
14use television_utils::metadata::AppMetadata;
15
16impl Display for Mode {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        match self {
19            Mode::Channel => write!(f, "Channel"),
20            Mode::RemoteControl => write!(f, "Remote Control"),
21            Mode::SendToChannel => write!(f, "Send to Channel"),
22        }
23    }
24}
25
26pub fn build_metadata_table<'a>(
27    mode: Mode,
28    current_channel: UnitChannel,
29    app_metadata: &'a AppMetadata,
30    colorscheme: &'a Colorscheme,
31) -> Table<'a> {
32    let version_row = Row::new(vec![
33        Cell::from(Span::styled(
34            "version: ",
35            Style::default().fg(colorscheme.help.metadata_field_name_fg),
36        )),
37        Cell::from(Span::styled(
38            &app_metadata.version,
39            Style::default().fg(colorscheme.help.metadata_field_value_fg),
40        )),
41    ]);
42
43    let target_triple_row = Row::new(vec![
44        Cell::from(Span::styled(
45            "target triple: ",
46            Style::default().fg(colorscheme.help.metadata_field_name_fg),
47        )),
48        Cell::from(Span::styled(
49            &app_metadata.build.target_triple,
50            Style::default().fg(colorscheme.help.metadata_field_value_fg),
51        )),
52    ]);
53
54    let build_row = Row::new(vec![
55        Cell::from(Span::styled(
56            "build: ",
57            Style::default().fg(colorscheme.help.metadata_field_name_fg),
58        )),
59        Cell::from(Span::styled(
60            &app_metadata.build.rustc_version,
61            Style::default().fg(colorscheme.help.metadata_field_value_fg),
62        )),
63        Cell::from(Span::styled(
64            " (",
65            Style::default().fg(colorscheme.help.metadata_field_name_fg),
66        )),
67        Cell::from(Span::styled(
68            &app_metadata.build.build_date,
69            Style::default().fg(colorscheme.help.metadata_field_value_fg),
70        )),
71        Cell::from(Span::styled(
72            ")",
73            Style::default().fg(colorscheme.help.metadata_field_name_fg),
74        )),
75    ]);
76
77    let current_dir_row = Row::new(vec![
78        Cell::from(Span::styled(
79            "current directory: ",
80            Style::default().fg(colorscheme.help.metadata_field_name_fg),
81        )),
82        Cell::from(Span::styled(
83            std::env::current_dir()
84                .expect("Could not get current directory")
85                .display()
86                .to_string(),
87            Style::default().fg(colorscheme.help.metadata_field_value_fg),
88        )),
89    ]);
90
91    let current_channel_row = Row::new(vec![
92        Cell::from(Span::styled(
93            "current channel: ",
94            Style::default().fg(colorscheme.help.metadata_field_name_fg),
95        )),
96        Cell::from(Span::styled(
97            current_channel.to_string(),
98            Style::default().fg(colorscheme.help.metadata_field_value_fg),
99        )),
100    ]);
101
102    let current_mode_row = Row::new(vec![
103        Cell::from(Span::styled(
104            "current mode: ",
105            Style::default().fg(colorscheme.help.metadata_field_name_fg),
106        )),
107        Cell::from(Span::styled(
108            mode.to_string(),
109            Style::default().fg(mode_color(mode, &colorscheme.mode)),
110        )),
111    ]);
112
113    let widths = vec![Constraint::Fill(1), Constraint::Fill(2)];
114
115    Table::new(
116        vec![
117            version_row,
118            target_triple_row,
119            build_row,
120            current_dir_row,
121            current_channel_row,
122            current_mode_row,
123        ],
124        widths,
125    )
126}