television_screen/
metadata.rs1use 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}