@ -453,6 +453,26 @@ static struct MHD_Response* handle_search(RequestContext* request_context)
std : : string patternString
= kiwix : : urlDecode ( pattern = = NULL ? " " : string ( pattern ) ) ;
/* Retrive geo search */
bool has_geo_query = false ;
const char * latitude = MHD_lookup_connection_value (
request_context - > connection , MHD_GET_ARGUMENT_KIND , " latitude " ) ;
const char * longitude = MHD_lookup_connection_value (
request_context - > connection , MHD_GET_ARGUMENT_KIND , " longitude " ) ;
const char * distance = MHD_lookup_connection_value (
request_context - > connection , MHD_GET_ARGUMENT_KIND , " distance " ) ;
float latitudeFloat ( 0 ) , longitudeFloat ( 0 ) , distanceFloat ( 0 ) ;
if ( latitude ! = nullptr & & longitude ! = nullptr & & distance ! = nullptr ) {
try {
latitudeFloat = stof ( string ( latitude ) ) ;
longitudeFloat = stof ( string ( longitude ) ) ;
distanceFloat = stof ( string ( distance ) ) ;
has_geo_query = true ;
} catch ( . . . ) { }
}
/* Search results for searches from the welcome page should not
be cached
*/
@ -491,7 +511,13 @@ static struct MHD_Response* handle_search(RequestContext* request_context)
/* Get the results */
pthread_mutex_lock ( & searchLock ) ;
try {
request_context - > searcher - > search ( patternString , startNumber , endNumber , isVerbose . load ( ) ) ;
if ( patternString . empty ( ) & & has_geo_query ) {
request_context - > searcher - > geo_search ( latitudeFloat , longitudeFloat , distanceFloat ,
startNumber , endNumber , isVerbose . load ( ) ) ;
} else {
request_context - > searcher - > search ( patternString ,
startNumber , endNumber , isVerbose . load ( ) ) ;
}
content = request_context - > searcher - > getHtml ( ) ;
} catch ( const std : : exception & e ) {
std : : cerr < < e . what ( ) < < std : : endl ;