Mountain/IPC/WindAirCommands/
SearchFiles.rs1
2use crate::{
6 IPC::WindAirCommands::{FileResultDTO, GetAirAddress, GetOrCreateAirClient, SearchResultsDTO},
7 dev_log,
8};
9
10#[tauri::command]
11pub async fn SearchFiles(
12 query:String,
13
14 file_patterns:Vec<String>,
15
16 max_results:Option<u32>,
17) -> Result<SearchResultsDTO::Struct, String> {
18 dev_log!(
19 "grpc",
20 "[WindAirCommands] SearchFiles called: query={}, patterns={:?}",
21 query,
22 file_patterns
23 );
24
25 let air_address = GetAirAddress::Fn()?;
26
27 let client = GetOrCreateAirClient::Fn(air_address).await?;
28
29 let request_id = uuid::Uuid::new_v4().to_string();
30
31 let max_results_count = max_results.unwrap_or(100);
32
33 let search_results = client
34 .search_files(
35 request_id,
36 query,
37 file_patterns.first().map(|s| s.as_str()).unwrap_or("").to_string(),
38 max_results_count,
39 )
40 .await
41 .map_err(|e| format!("File search failed: {:?}", e))?;
42
43 let results:Vec<FileResultDTO::Struct> = search_results
44 .into_iter()
45 .map(|r| {
46 FileResultDTO::Struct {
47 path:r.path,
48 size:r.size,
49 line:Some(r.line_number),
50 content:Some(r.match_preview),
51 }
52 })
53 .collect();
54
55 let total_results = results.len() as u32;
56
57 let result = SearchResultsDTO::Struct { results, total_results };
58
59 dev_log!(
60 "grpc",
61 "[WindAirCommands] File search completed: {} results",
62 result.total_results
63 );
64
65 Ok(result)
66}