use crate::client::KeepClient; use crate::modes::common::{OutputFormat, format_size, settings_output_format}; use clap::Command; use log::debug; pub fn mode( client: &KeepClient, _cmd: &mut Command, settings: &crate::config::Settings, tags: &[String], ) -> Result<(), anyhow::Error> { debug!("CLIENT_LIST: Listing items via remote server"); let items = client.list_items(tags, "newest", 0, 100)?; let output_format = settings_output_format(settings); match output_format { OutputFormat::Json => { println!("{}", serde_json::to_string_pretty(&items)?); } OutputFormat::Yaml => { println!("{}", serde_yaml::to_string(&items)?); } OutputFormat::Table => { use comfy_table::{Table, presets::UTF8_FULL}; let mut table = Table::new(); table.load_preset(UTF8_FULL); // Header let headers = ["ID", "Time", "Size", "Compression", "Tags"]; table.set_header(headers.iter().map(|h| h.to_string()).collect::>()); for item in &items { let size_str = item .size .map(|s| format_size(s as u64, settings.human_readable)) .unwrap_or_default(); table.add_row(vec![ item.id.to_string(), item.ts.clone(), size_str, item.compression.clone(), item.tags.join(", "), ]); } println!("{table}"); } } Ok(()) }