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:
2026-03-14 20:01:58 -03:00
parent f5bae46620
commit fdc5f1d744
3 changed files with 120 additions and 116 deletions

View File

@@ -1,9 +1,10 @@
use crate::client::KeepClient;
use crate::modes::common::{
DisplayListItem, OutputFormat, format_size, render_list_table, settings_output_format,
ColumnType, OutputFormat, format_size, render_list_table_with_format, settings_output_format,
};
use clap::Command;
use log::debug;
use std::str::FromStr;
pub fn mode(
client: &KeepClient,
@@ -30,20 +31,39 @@ pub fn mode(
println!("{}", serde_yaml::to_string(&items)?);
}
OutputFormat::Table => {
let display_items: Vec<DisplayListItem> = items
let rows: Vec<Vec<String>> = items
.iter()
.map(|item| DisplayListItem {
id: item.id,
time: item.ts.clone(),
size: item
.size
.map(|s| format_size(s as u64, settings.human_readable))
.unwrap_or_default(),
compression: item.compression.clone(),
tags: item.tags.clone(),
.map(|item| {
let mut row = Vec::new();
for column in &settings.list_format {
let col_type = ColumnType::from_str(&column.name).ok();
let cell = match col_type {
Some(ColumnType::Id) => item.id.to_string(),
Some(ColumnType::Time) => item.ts.clone(),
Some(ColumnType::Size) => item
.size
.map(|s| format_size(s as u64, settings.human_readable))
.unwrap_or_default(),
Some(ColumnType::Compression) => item.compression.clone(),
Some(ColumnType::Tags) => item.tags.join(" "),
Some(ColumnType::Meta) => {
let meta_key = column.name.strip_prefix("meta:");
match meta_key {
Some(key) => {
item.metadata.get(key).cloned().unwrap_or_default()
}
None => String::new(),
}
}
_ => String::new(),
};
row.push(cell);
}
row
})
.collect();
render_list_table(&display_items, &settings.table_config);
render_list_table_with_format(&settings.list_format, &rows, &settings.table_config);
}
}