feat: implement filter service integration
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
@@ -2,6 +2,7 @@ use crate::common::PIPESIZE;
|
|||||||
use crate::config::Settings;
|
use crate::config::Settings;
|
||||||
use crate::services::compression_service::CompressionService;
|
use crate::services::compression_service::CompressionService;
|
||||||
use crate::services::error::CoreError;
|
use crate::services::error::CoreError;
|
||||||
|
use crate::services::filter_service::FilterService;
|
||||||
use crate::services::meta_service::MetaService;
|
use crate::services::meta_service::MetaService;
|
||||||
use crate::services::types::{ItemWithContent, ItemWithMeta};
|
use crate::services::types::{ItemWithContent, ItemWithMeta};
|
||||||
use crate::db::{self, Meta};
|
use crate::db::{self, Meta};
|
||||||
@@ -19,6 +20,7 @@ pub struct ItemService {
|
|||||||
data_path: PathBuf,
|
data_path: PathBuf,
|
||||||
compression_service: CompressionService,
|
compression_service: CompressionService,
|
||||||
meta_service: MetaService,
|
meta_service: MetaService,
|
||||||
|
filter_service: FilterService,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ItemService {
|
impl ItemService {
|
||||||
@@ -28,6 +30,7 @@ impl ItemService {
|
|||||||
data_path,
|
data_path,
|
||||||
compression_service: CompressionService::new(),
|
compression_service: CompressionService::new(),
|
||||||
meta_service: MetaService::new(),
|
meta_service: MetaService::new(),
|
||||||
|
filter_service: FilterService::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,15 +99,43 @@ impl ItemService {
|
|||||||
/// Helper method to create a filter chain from parameters
|
/// Helper method to create a filter chain from parameters
|
||||||
fn create_filter_chain(
|
fn create_filter_chain(
|
||||||
&self,
|
&self,
|
||||||
_grep: Option<String>,
|
grep: Option<String>,
|
||||||
_head_bytes: Option<usize>,
|
head_bytes: Option<usize>,
|
||||||
_head_lines: Option<usize>,
|
head_lines: Option<usize>,
|
||||||
_tail_bytes: Option<usize>,
|
tail_bytes: Option<usize>,
|
||||||
_tail_lines: Option<usize>,
|
tail_lines: Option<usize>,
|
||||||
_filter: Option<String>,
|
filter: Option<String>,
|
||||||
) -> Result<Option<()>, CoreError> {
|
) -> Result<Option<crate::filter_plugin::FilterChain>, CoreError> {
|
||||||
// For now, just return None since filter_service doesn't exist
|
// Build filter string from individual parameters (for backward compatibility)
|
||||||
Ok(None)
|
let mut filter_parts = Vec::new();
|
||||||
|
if let Some(pattern) = grep {
|
||||||
|
filter_parts.push(format!("grep('{}')", pattern.replace('\'', "\\'")));
|
||||||
|
}
|
||||||
|
if let Some(bytes) = head_bytes {
|
||||||
|
filter_parts.push(format!("head_bytes({})", bytes));
|
||||||
|
}
|
||||||
|
if let Some(lines) = head_lines {
|
||||||
|
filter_parts.push(format!("head_lines({})", lines));
|
||||||
|
}
|
||||||
|
if let Some(bytes) = tail_bytes {
|
||||||
|
filter_parts.push(format!("tail_bytes({})", bytes));
|
||||||
|
}
|
||||||
|
if let Some(lines) = tail_lines {
|
||||||
|
filter_parts.push(format!("tail_lines({})", lines));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the provided filter string if available, otherwise build from parts
|
||||||
|
let filter_str = filter.or_else(|| {
|
||||||
|
if filter_parts.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(filter_parts.join(" | "))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create filter chain
|
||||||
|
self.filter_service.create_filter_chain(filter_str.as_deref())
|
||||||
|
.map_err(|e| CoreError::InvalidInput(format!("Failed to create filter chain: {}", e)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Helper method to determine if content is binary
|
/// Helper method to determine if content is binary
|
||||||
@@ -133,15 +164,15 @@ impl ItemService {
|
|||||||
&self,
|
&self,
|
||||||
conn: &Connection,
|
conn: &Connection,
|
||||||
id: i64,
|
id: i64,
|
||||||
_head_bytes: Option<usize>,
|
head_bytes: Option<usize>,
|
||||||
_head_words: Option<usize>,
|
head_words: Option<usize>,
|
||||||
_head_lines: Option<usize>,
|
head_lines: Option<usize>,
|
||||||
_tail_bytes: Option<usize>,
|
tail_bytes: Option<usize>,
|
||||||
_tail_words: Option<usize>,
|
tail_words: Option<usize>,
|
||||||
_tail_lines: Option<usize>,
|
tail_lines: Option<usize>,
|
||||||
_line_start: Option<usize>,
|
line_start: Option<usize>,
|
||||||
_line_end: Option<usize>,
|
line_end: Option<usize>,
|
||||||
_grep: Option<String>,
|
grep: Option<String>,
|
||||||
) -> Result<(Box<dyn Read + Send>, String, bool), CoreError> {
|
) -> Result<(Box<dyn Read + Send>, String, bool), CoreError> {
|
||||||
let item_with_meta = self.get_item(conn, id)?;
|
let item_with_meta = self.get_item(conn, id)?;
|
||||||
let item_id = item_with_meta.item.id.ok_or_else(|| CoreError::InvalidInput("Item missing ID".to_string()))?;
|
let item_id = item_with_meta.item.id.ok_or_else(|| CoreError::InvalidInput("Item missing ID".to_string()))?;
|
||||||
@@ -159,12 +190,12 @@ impl ItemService {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Create filter chain
|
// Create filter chain
|
||||||
let _filter_chain = self.create_filter_chain(
|
let filter_chain = self.create_filter_chain(
|
||||||
grep, head_bytes, head_lines, tail_bytes, tail_lines, None
|
grep, head_bytes, head_lines, tail_bytes, tail_lines, None
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// For now, just use the original reader since filtering isn't implemented
|
// Wrap the reader with filtering
|
||||||
let filtered_reader = Box::new(reader);
|
let filtered_reader = Box::new(FilteringReader::new(reader, filter_chain));
|
||||||
|
|
||||||
let metadata = item_with_meta.meta_as_map();
|
let metadata = item_with_meta.meta_as_map();
|
||||||
let mime_type = metadata
|
let mime_type = metadata
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
pub mod async_item_service;
|
pub mod async_item_service;
|
||||||
pub mod compression_service;
|
pub mod compression_service;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
pub mod filter_service;
|
||||||
pub mod item_service;
|
pub mod item_service;
|
||||||
pub mod meta_service;
|
pub mod meta_service;
|
||||||
pub mod status_service;
|
pub mod status_service;
|
||||||
|
|||||||
Reference in New Issue
Block a user