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