fix: client --list uses list_format from config like local mode
Move apply_color/apply_table_attribute to common.rs for sharing. Add render_list_table_with_format() that takes ColumnConfig slice and pre-computed row values. Client list now renders columns based on settings.list_format, showing empty for columns where server data is unavailable (e.g. text_line_count, token_count).
This commit is contained in:
@@ -17,7 +17,7 @@ use crate::config;
|
||||
use crate::meta_plugin::MetaPluginType;
|
||||
use clap::Command;
|
||||
use clap::error::ErrorKind;
|
||||
use comfy_table::{ContentArrangement, Table};
|
||||
use comfy_table::{Attribute, Cell, ContentArrangement, Table};
|
||||
use log::debug;
|
||||
use regex::Regex;
|
||||
use std::collections::HashMap;
|
||||
@@ -488,29 +488,95 @@ pub fn render_item_info_table(info: &DisplayItemInfo, table_config: &config::Tab
|
||||
println!("{}", trim_lines_end(&table.trim_fmt()));
|
||||
}
|
||||
|
||||
/// Renders list table. Shared by local and client list modes.
|
||||
pub fn render_list_table(items: &[DisplayListItem], table_config: &config::TableConfig) {
|
||||
use comfy_table::{Attribute, Cell};
|
||||
|
||||
/// Renders list table with column format from config. Shared by local and client list modes.
|
||||
pub fn render_list_table_with_format(
|
||||
columns: &[config::ColumnConfig],
|
||||
rows: &[Vec<String>],
|
||||
table_config: &config::TableConfig,
|
||||
) {
|
||||
let mut table = create_table_with_config(table_config);
|
||||
|
||||
table.set_header(vec![
|
||||
Cell::new("ID").add_attribute(Attribute::Bold),
|
||||
Cell::new("Time").add_attribute(Attribute::Bold),
|
||||
Cell::new("Size").add_attribute(Attribute::Bold),
|
||||
Cell::new("Compression").add_attribute(Attribute::Bold),
|
||||
Cell::new("Tags").add_attribute(Attribute::Bold),
|
||||
]);
|
||||
let header_cells: Vec<Cell> = columns
|
||||
.iter()
|
||||
.map(|col| Cell::new(&col.label).add_attribute(Attribute::Bold))
|
||||
.collect();
|
||||
table.set_header(header_cells);
|
||||
|
||||
for item in items {
|
||||
table.add_row(vec![
|
||||
item.id.to_string(),
|
||||
item.time.clone(),
|
||||
item.size.clone(),
|
||||
item.compression.clone(),
|
||||
item.tags.join(" "),
|
||||
]);
|
||||
for row in rows {
|
||||
let cells: Vec<Cell> = row
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, val)| {
|
||||
let mut cell = Cell::new(val);
|
||||
if let Some(col) = columns.get(i) {
|
||||
if let Some(ref fg) = col.fg_color {
|
||||
cell = apply_color(cell, fg, true);
|
||||
}
|
||||
if let Some(ref bg) = col.bg_color {
|
||||
cell = apply_color(cell, bg, false);
|
||||
}
|
||||
for attr in &col.attributes {
|
||||
cell = apply_table_attribute(cell, attr);
|
||||
}
|
||||
}
|
||||
cell
|
||||
})
|
||||
.collect();
|
||||
table.add_row(cells);
|
||||
}
|
||||
|
||||
println!("{}", trim_lines_end(&table.trim_fmt()));
|
||||
}
|
||||
|
||||
/// Applies config TableColor to a comfy-table Cell.
|
||||
pub fn apply_color(mut cell: Cell, color: &config::TableColor, is_foreground: bool) -> Cell {
|
||||
use comfy_table::Color;
|
||||
|
||||
let comfy_color = match color {
|
||||
config::TableColor::Black => Color::Black,
|
||||
config::TableColor::Red => Color::Red,
|
||||
config::TableColor::Green => Color::Green,
|
||||
config::TableColor::Yellow => Color::Yellow,
|
||||
config::TableColor::Blue => Color::Blue,
|
||||
config::TableColor::Magenta => Color::Magenta,
|
||||
config::TableColor::Cyan => Color::Cyan,
|
||||
config::TableColor::White => Color::White,
|
||||
config::TableColor::Gray => Color::Grey,
|
||||
config::TableColor::DarkRed => Color::DarkRed,
|
||||
config::TableColor::DarkGreen => Color::DarkGreen,
|
||||
config::TableColor::DarkYellow => Color::DarkYellow,
|
||||
config::TableColor::DarkBlue => Color::DarkBlue,
|
||||
config::TableColor::DarkMagenta => Color::DarkMagenta,
|
||||
config::TableColor::DarkCyan => Color::DarkCyan,
|
||||
config::TableColor::Rgb(r, g, b) => Color::Rgb {
|
||||
r: *r,
|
||||
g: *g,
|
||||
b: *b,
|
||||
},
|
||||
};
|
||||
|
||||
if is_foreground {
|
||||
cell = cell.fg(comfy_color);
|
||||
} else {
|
||||
cell = cell.bg(comfy_color);
|
||||
}
|
||||
|
||||
cell
|
||||
}
|
||||
|
||||
/// Applies config TableAttribute to a comfy-table Cell.
|
||||
pub fn apply_table_attribute(mut cell: Cell, attribute: &config::TableAttribute) -> Cell {
|
||||
match attribute {
|
||||
config::TableAttribute::Bold => cell = cell.add_attribute(Attribute::Bold),
|
||||
config::TableAttribute::Dim => cell = cell.add_attribute(Attribute::Dim),
|
||||
config::TableAttribute::Italic => cell = cell.add_attribute(Attribute::Italic),
|
||||
config::TableAttribute::Underlined => cell = cell.add_attribute(Attribute::Underlined),
|
||||
config::TableAttribute::SlowBlink => cell = cell.add_attribute(Attribute::SlowBlink),
|
||||
config::TableAttribute::RapidBlink => cell = cell.add_attribute(Attribute::RapidBlink),
|
||||
config::TableAttribute::Reverse => cell = cell.add_attribute(Attribute::Reverse),
|
||||
config::TableAttribute::Hidden => cell = cell.add_attribute(Attribute::Hidden),
|
||||
config::TableAttribute::CrossedOut => cell = cell.add_attribute(Attribute::CrossedOut),
|
||||
}
|
||||
|
||||
cell
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user