refactor: move meta plugin finalization logic into meta plugins

Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-16 14:04:19 -03:00
parent 4f61306d79
commit a7977139a7
5 changed files with 153 additions and 32 deletions

View File

@@ -150,6 +150,7 @@ fn process_input_stream(
data_path: &std::path::PathBuf,
item_id: i64,
meta_plugins: &mut Vec<Box<dyn crate::meta_plugin::MetaPlugin>>,
conn: &rusqlite::Connection,
) -> Result<(Box<dyn std::io::Write>, crate::db::Item), anyhow::Error> {
let mut item = crate::db::Item {
id: Some(item_id),
@@ -194,39 +195,26 @@ fn process_input_stream(
}
debug!("MAIN: Ending IO loop after {:?} bytes", item.size);
// Finalize meta plugins and save their metadata
for meta_plugin in meta_plugins.iter_mut() {
match meta_plugin.finalize() {
Ok(value) => {
if let Err(e) = meta_plugin.save_meta(conn, item_id, value) {
eprintln!("Warning: Failed to save meta value: {}", e);
}
}
Err(e) => {
eprintln!("Warning: Failed to finalize meta plugin: {}", e);
}
}
}
stdout.flush()?;
item_out.flush()?;
Ok((item_out, item))
}
fn finalize_meta_plugins(
conn: &rusqlite::Connection,
meta_plugins: &mut Vec<Box<dyn crate::meta_plugin::MetaPlugin>>,
item: &crate::db::Item,
) -> Result<(), anyhow::Error> {
for meta_plugin in meta_plugins.iter_mut() {
let meta_name = meta_plugin.meta_name();
match meta_plugin.finalize() {
Ok(meta_value) => {
let meta = crate::db::Meta {
id: item.id.ok_or_else(|| anyhow!("Item missing ID"))?,
name: meta_name.clone(),
value: meta_value,
};
if let Err(e) = crate::db::store_meta(conn, meta) {
eprintln!("Warning: Failed to store meta value for {}: {}", meta_name, e);
}
}
Err(e) => {
eprintln!("Warning: Failed to finalize meta plugin {}: {}", meta_name, e);
}
}
}
Ok(())
}
pub fn mode_save(
cmd: &mut Command,
settings: &config::Settings,
@@ -257,17 +245,24 @@ pub fn mode_save(
crate::db::store_meta(conn, meta)?;
}
// Initialize meta plugins with database connection
for meta_plugin in meta_plugins.iter_mut() {
if let Err(e) = meta_plugin.initialize(conn, item_id) {
eprintln!("Warning: Failed to initialize meta plugin: {}", e);
}
}
let (_item_out, processed_item) = process_input_stream(
&compression_engine,
&data_path,
item_id,
&mut meta_plugins,
conn,
)?;
item.size = processed_item.size;
item.compression = compression_type.to_string();
finalize_meta_plugins(conn, &mut meta_plugins, &item)?;
crate::db::update_item(conn, item.clone())?;
Ok(())