feat: implement unified settings system

Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-15 16:36:58 -03:00
parent 067cba703b
commit 56f4d8aad5
12 changed files with 283 additions and 140 deletions

View File

@@ -27,7 +27,8 @@ struct ListItem {
pub fn mode_list(
cmd: &mut clap::Command,
args: &crate::Args,
settings: &crate::config::Settings,
_config: &crate::config::Config,
ids: &mut Vec<i64>,
tags: &Vec<String>,
conn: &mut rusqlite::Connection,
@@ -42,7 +43,7 @@ pub fn mode_list(
}
let mut meta: std::collections::HashMap<String, String> = std::collections::HashMap::new();
for item in args.item.meta.iter() {
for item in settings.meta.iter() {
let item = item.clone();
meta.insert(item.key, item.value);
}
@@ -71,16 +72,16 @@ pub fn mode_list(
// Fetch all metadata for all items in a single query
let meta_by_item = crate::db::get_meta_for_items(conn, &item_ids)?;
let output_format = get_output_format(args);
let output_format = crate::modes::common::settings_output_format(settings);
if output_format != OutputFormat::Table {
return show_list_structured(items, tags_by_item, meta_by_item, data_path, args, output_format);
return show_list_structured(items, tags_by_item, meta_by_item, data_path, settings, output_format);
}
let mut table = Table::new();
table.set_format(*prettytable::format::consts::FORMAT_CLEAN);
let list_format = args.options.list_format.split(",");
let list_format = settings.list_format.split(",");
let mut title_row = row!();
@@ -141,7 +142,7 @@ pub fn mode_list(
)),
ColumnType::Size => match item.size {
Some(size) => Cell::new_align(
&size_column(size as u64, args.options.human_readable, column_width),
&size_column(size as u64, settings.human_readable, column_width),
Alignment::RIGHT,
),
None => match item_path.metadata() {
@@ -158,7 +159,7 @@ pub fn mode_list(
},
ColumnType::FileSize => match item_path.metadata() {
Ok(metadata) => Cell::new_align(
&size_column(metadata.len(), args.options.human_readable, column_width),
&size_column(metadata.len(), settings.human_readable, column_width),
Alignment::RIGHT,
),
Err(_) => Cell::new_align("Missing", Alignment::RIGHT)
@@ -195,7 +196,7 @@ fn show_list_structured(
tags_by_item: std::collections::HashMap<i64, Vec<String>>,
meta_by_item: std::collections::HashMap<i64, std::collections::HashMap<String, String>>,
data_path: std::path::PathBuf,
args: &crate::Args,
settings: &crate::config::Settings,
output_format: OutputFormat,
) -> anyhow::Result<()> {
let mut list_items = Vec::new();
@@ -210,12 +211,12 @@ fn show_list_structured(
let file_size = item_path.metadata().map(|m| m.len()).ok();
let file_size_formatted = match file_size {
Some(size) => crate::modes::common::format_size(size, args.options.human_readable),
Some(size) => crate::modes::common::format_size(size, settings.human_readable),
None => "Missing".to_string(),
};
let size_formatted = match item.size {
Some(size) => crate::modes::common::format_size(size as u64, args.options.human_readable),
Some(size) => crate::modes::common::format_size(size as u64, settings.human_readable),
None => "Unknown".to_string(),
};