@@ -5,12 +5,11 @@ use crate::common::search::{QueryHits, QueryResponse, QuerySource, SearchQuery,
55use crate :: common:: server:: Server ;
66use crate :: common:: traits:: SearchSource ;
77use crate :: server:: http_client:: HttpClient ;
8- use crate :: server:: servers:: get_server_token;
98use async_trait:: async_trait;
109// use futures::stream::StreamExt;
1110use ordered_float:: OrderedFloat ;
12- use reqwest:: { Client , Method , RequestBuilder } ;
1311use std:: collections:: HashMap ;
12+ use tauri_plugin_store:: JsonValue ;
1413// use std::hash::Hash;
1514
1615#[ allow( dead_code) ]
@@ -74,45 +73,11 @@ const COCO_SERVERS: &str = "coco-servers";
7473
7574pub struct CocoSearchSource {
7675 server : Server ,
77- client : Client ,
7876}
7977
8078impl CocoSearchSource {
81- pub fn new ( server : Server , client : Client ) -> Self {
82- CocoSearchSource { server, client }
83- }
84-
85- async fn build_request_from_query (
86- & self ,
87- query : & SearchQuery ,
88- ) -> Result < RequestBuilder , String > {
89- self . build_request ( query. from , query. size , & query. query_strings )
90- . await
91- }
92-
93- async fn build_request (
94- & self ,
95- from : u64 ,
96- size : u64 ,
97- query_strings : & HashMap < String , String > ,
98- ) -> Result < RequestBuilder , String > {
99- let url = HttpClient :: join_url ( & self . server . endpoint , "/query/_search" ) ;
100- let mut request_builder = self . client . request ( Method :: GET , url) ;
101-
102- if !self . server . public {
103- if let Some ( token) = get_server_token ( & self . server . id )
104- . await ?
105- . map ( |t| t. access_token )
106- {
107- request_builder = request_builder. header ( "X-API-TOKEN" , token) ;
108- }
109- }
110-
111- let result = request_builder
112- . query ( & [ ( "from" , & from. to_string ( ) ) , ( "size" , & size. to_string ( ) ) ] )
113- . query ( query_strings) ;
114-
115- Ok ( result)
79+ pub fn new ( server : Server ) -> Self {
80+ CocoSearchSource { server }
11681 }
11782}
11883
@@ -127,17 +92,22 @@ impl SearchSource for CocoSearchSource {
12792 }
12893
12994 async fn search ( & self , query : SearchQuery ) -> Result < QueryResponse , SearchError > {
130- // Build the request from the provided query
131- let request_builder = self
132- . build_request_from_query ( & query)
133- . await
134- . map_err ( |e| SearchError :: InternalError ( e. to_string ( ) ) ) ?;
95+ let url = "/query/_search" ;
96+
97+ let mut query_args: HashMap < String , JsonValue > = HashMap :: new ( ) ;
98+ query_args. insert ( "from" . into ( ) , JsonValue :: Number ( query. from . into ( ) ) ) ;
99+ query_args. insert ( "size" . into ( ) , JsonValue :: Number ( query. size . into ( ) ) ) ;
100+ for ( key, value) in query. query_strings {
101+ query_args. insert ( key, JsonValue :: String ( value) ) ;
102+ }
135103
136- // Send the HTTP request and handle errors
137- let response = request_builder
138- . send ( )
104+ let response = HttpClient :: get (
105+ & self . server . id ,
106+ & url,
107+ Some ( query_args) ,
108+ )
139109 . await
140- . map_err ( |e| SearchError :: HttpError ( format ! ( "Failed to send search request: {}" , e) ) ) ?;
110+ . map_err ( |e| SearchError :: HttpError ( format ! ( "Error to send search request: {}" , e) ) ) ?;
141111
142112 // Use the helper function to parse the response body
143113 let response_body = get_response_body_text ( response)
0 commit comments