feat: add unified status service implementation

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-28 16:57:04 -03:00
parent c10782c549
commit d5c36155e3
3 changed files with 72 additions and 35 deletions

View File

@@ -0,0 +1,64 @@
use crate::common::status::{generate_status_info, StatusInfo};
use crate::config::Settings;
use crate::meta_plugin::MetaPluginType;
use crate::compression_engine::CompressionType;
use clap::Command;
use std::path::PathBuf;
pub struct StatusService;
impl StatusService {
pub fn new() -> Self {
Self
}
pub fn generate_status(
&self,
cmd: &mut Command,
settings: &Settings,
data_path: PathBuf,
db_path: PathBuf,
) -> StatusInfo {
// Determine which meta plugins would be enabled for a save operation
let mut meta_plugin_types: Vec<MetaPluginType> = crate::modes::common::settings_meta_plugin_types(cmd, settings);
// Always add the Digest plugin if not present
if !meta_plugin_types.contains(&MetaPluginType::Digest) {
meta_plugin_types.push(MetaPluginType::Digest);
}
// Determine which compression type would be enabled for a save operation
let enabled_compression_type = if let Some(compression_name) = &settings.compression() {
CompressionType::from_str(compression_name).ok()
} else {
Some(crate::compression_engine::default_compression_type())
};
generate_status_info(data_path, db_path, &meta_plugin_types, enabled_compression_type)
}
pub fn generate_supported_status(
&self,
data_path: PathBuf,
db_path: PathBuf,
) -> StatusInfo {
// Get all meta plugin types that are supported
let supported_meta_plugins: Vec<MetaPluginType> = MetaPluginType::iter()
.filter(|mpt| {
let plugin = crate::meta_plugin::get_meta_plugin((*mpt).clone(), None, None);
plugin.is_supported()
})
.collect();
// Default to LZ4 compression for the API status endpoint
let enabled_compression_type = Some(CompressionType::LZ4);
generate_status_info(data_path, db_path, &supported_meta_plugins, enabled_compression_type)
}
}
impl Default for StatusService {
fn default() -> Self {
Self::new()
}
}