From fe41f95570d874c1f85f3bd6c8500c14c9ff196e Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Thu, 28 Aug 2025 17:07:05 -0300 Subject: [PATCH] refactor: update meta plugins structure to use map and vector Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/common/status.rs | 50 +++++++++++----------------------- src/modes/status.rs | 4 +-- src/services/status_service.rs | 34 +++-------------------- 3 files changed, 22 insertions(+), 66 deletions(-) diff --git a/src/common/status.rs b/src/common/status.rs index a6738b6..009a1bf 100644 --- a/src/common/status.rs +++ b/src/common/status.rs @@ -13,7 +13,8 @@ use crate::meta_plugin; pub struct StatusInfo { pub paths: PathInfo, pub compression: Vec, - pub meta_plugins: Vec, + pub meta_plugins: std::collections::HashMap, + pub enabled_meta_plugins: Vec, } #[derive(serde::Serialize, serde::Deserialize, ToSchema)] @@ -36,10 +37,6 @@ pub struct CompressionInfo { #[derive(serde::Serialize, serde::Deserialize, ToSchema, Clone)] pub struct MetaPluginInfo { pub meta_name: String, - pub found: bool, - pub enabled: bool, - pub binary: String, - pub args: String, pub outputs: std::collections::HashMap, pub options: std::collections::HashMap, } @@ -93,7 +90,8 @@ pub fn generate_status_info( }); } - let mut meta_plugin_info = Vec::new(); + let mut meta_plugins_map = std::collections::HashMap::new(); + let mut enabled_meta_plugins_vec = Vec::new(); // Sort meta plugin types by their string representation to avoid creating plugins just for sorting let mut sorted_meta_plugins: Vec = MetaPluginType::iter().collect(); @@ -104,34 +102,18 @@ pub fn generate_status_info( log::debug!("STATUS: About to call get_meta_plugin"); let meta_plugin = meta_plugin::get_meta_plugin(meta_plugin_type.clone(), None, None); log::debug!("STATUS: Created meta plugin instance"); - let is_supported = meta_plugin.is_supported(); - log::debug!("STATUS: Checked is_supported: {}", is_supported); - let is_enabled = enabled_meta_plugins.contains(&meta_plugin_type); - log::debug!("STATUS: Checked is_enabled: {}", is_enabled); // Get meta name first to avoid borrowing issues log::debug!("STATUS: Getting meta name..."); let meta_name = meta_plugin.meta_type().to_string(); log::debug!("STATUS: Got meta name: {}", meta_name); - // Note: In status mode we don't have access to actual settings, - // so we can't configure plugins with their settings here. - // Plugin configuration happens during save operations. + // Check if this plugin is enabled + let is_enabled = enabled_meta_plugins.contains(&meta_plugin_type); + if is_enabled { + enabled_meta_plugins_vec.push(meta_name.clone()); + } - let (binary_display, args_display) = if !is_supported { - ("".to_string(), "".to_string()) - } else { - if meta_plugin.is_internal() { - ("".to_string(), "".to_string()) - } else { - if let Some((program, args)) = meta_plugin.program_info() { - (program.to_string(), args.join(" ")) - } else { - ("".to_string(), "".to_string()) - } - } - }; - // Create a display of outputs for status - use configured outputs if available, otherwise defaults let outputs_display = if meta_plugin.outputs().is_empty() { // No configured outputs, use defaults @@ -145,20 +127,20 @@ pub fn generate_status_info( meta_plugin.outputs().clone() }; - meta_plugin_info.push(MetaPluginInfo { + // Get options + let options = meta_plugin.options().clone(); + + meta_plugins_map.insert(meta_name.clone(), MetaPluginInfo { meta_name, - found: is_supported, - enabled: is_enabled, - binary: binary_display, - args: args_display, outputs: outputs_display, - options: std::collections::HashMap::new(), + options, }); } StatusInfo { paths: path_info, compression: compression_info, - meta_plugins: meta_plugin_info, + meta_plugins: meta_plugins_map, + enabled_meta_plugins: enabled_meta_plugins_vec, } } diff --git a/src/modes/status.rs b/src/modes/status.rs index 6bb6c8f..f34ed05 100644 --- a/src/modes/status.rs +++ b/src/modes/status.rs @@ -272,7 +272,7 @@ fn build_meta_plugins_configured_table(settings: &config::Settings) -> Option) -> Table { +fn build_meta_plugin_table(meta_plugin_info: &std::collections::HashMap) -> Table { let mut meta_plugin_table = Table::new(); if std::io::stdout().is_terminal() { //meta_plugin_table.set_format(get_format_box_chars_no_border_line_separator()); @@ -287,7 +287,7 @@ fn build_meta_plugin_table(meta_plugin_info: &Vec) -> Table { b->"Outputs")); // Sort meta plugin info by plugin name - let mut sorted_meta_plugin_info = meta_plugin_info.clone(); + let mut sorted_meta_plugin_info: Vec<&MetaPluginInfo> = meta_plugin_info.values().collect(); sorted_meta_plugin_info.sort_by(|a, b| a.meta_name.cmp(&b.meta_name)); for info in sorted_meta_plugin_info { diff --git a/src/services/status_service.rs b/src/services/status_service.rs index c878aee..2c61d13 100644 --- a/src/services/status_service.rs +++ b/src/services/status_service.rs @@ -38,21 +38,8 @@ impl StatusService { let mut status_info = generate_status_info(data_path, db_path, &meta_plugin_types, enabled_compression_type); - // Add options to each meta plugin info - for meta_plugin_info in &mut status_info.meta_plugins { - let meta_plugin_type = MetaPluginType::from_str(&meta_plugin_info.meta_name).unwrap(); - let plugin = crate::meta_plugin::get_meta_plugin(meta_plugin_type, None, None); - - // Convert options to a serializable format - let options: std::collections::HashMap = plugin - .options() - .iter() - .map(|(k, v)| (k.clone(), v.clone())) - .collect(); - - // Add options to the meta plugin info - meta_plugin_info.options = options; - } + // The options are now populated directly in generate_status_info + // No need to modify them here status_info } @@ -75,21 +62,8 @@ impl StatusService { let mut status_info = generate_status_info(data_path, db_path, &supported_meta_plugins, enabled_compression_type); - // Add options to each meta plugin info - for meta_plugin_info in &mut status_info.meta_plugins { - let meta_plugin_type = MetaPluginType::from_str(&meta_plugin_info.meta_name).unwrap(); - let plugin = crate::meta_plugin::get_meta_plugin(meta_plugin_type, None, None); - - // Convert options to a serializable format - let options: std::collections::HashMap = plugin - .options() - .iter() - .map(|(k, v)| (k.clone(), v.clone())) - .collect(); - - // Add options to the meta plugin info - meta_plugin_info.options = options; - } + // The options are now populated directly in generate_status_info + // No need to modify them here status_info }