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