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