diff options
Diffstat (limited to 'src/Routes/Search.c')
| -rw-r--r-- | src/Routes/Search.c | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/src/Routes/Search.c b/src/Routes/Search.c index ad167fb..bc35fb6 100644 --- a/src/Routes/Search.c +++ b/src/Routes/Search.c @@ -273,26 +273,39 @@ int results_handler(UrlParams *params) { } } + int enabled_engine_count = 0; + for (int i = 0; i < ENGINE_COUNT; i++) { + if (ENGINE_REGISTRY[i].enabled) { + enabled_engine_count++; + } + } + ScrapeJob jobs[ENGINE_COUNT]; SearchResult *all_results[ENGINE_COUNT]; + int engine_idx = 0; for (int i = 0; i < ENGINE_COUNT; i++) { - all_results[i] = NULL; - jobs[i].engine = &ENGINE_REGISTRY[i]; - jobs[i].query = raw_query; - jobs[i].out_results = &all_results[i]; - jobs[i].max_results = MAX_RESULTS_PER_ENGINE; - jobs[i].results_count = 0; - jobs[i].page = page; - jobs[i].handle = NULL; - jobs[i].response.memory = NULL; - jobs[i].response.size = 0; - jobs[i].response.capacity = 0; - jobs[i].http_status = 0; - jobs[i].status = SCRAPE_STATUS_PENDING; + if (ENGINE_REGISTRY[i].enabled) { + all_results[engine_idx] = NULL; + jobs[engine_idx].engine = &ENGINE_REGISTRY[i]; + jobs[engine_idx].query = raw_query; + jobs[engine_idx].out_results = &all_results[engine_idx]; + jobs[engine_idx].max_results = MAX_RESULTS_PER_ENGINE; + jobs[engine_idx].results_count = 0; + jobs[engine_idx].page = page; + jobs[engine_idx].handle = NULL; + jobs[engine_idx].response.memory = NULL; + jobs[engine_idx].response.size = 0; + jobs[engine_idx].response.capacity = 0; + jobs[engine_idx].http_status = 0; + jobs[engine_idx].status = SCRAPE_STATUS_PENDING; + engine_idx++; + } } - scrape_engines_parallel(jobs, ENGINE_COUNT); + if (enabled_engine_count > 0) { + scrape_engines_parallel(jobs, enabled_engine_count); + } if (page == 1) { for (int i = 0; i < HANDLER_COUNT; i++) { @@ -301,10 +314,10 @@ int results_handler(UrlParams *params) { } if (btnI) { - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { if (jobs[i].results_count > 0 && all_results[i][0].url) { char *redirect_url = strdup(all_results[i][0].url); - for (int j = 0; j < ENGINE_COUNT; j++) { + for (int j = 0; j < enabled_engine_count; j++) { for (int k = 0; k < jobs[j].results_count; k++) { free(all_results[j][k].url); free(all_results[j][k].title); @@ -327,7 +340,7 @@ int results_handler(UrlParams *params) { return 0; } } - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { free(all_results[i]); } if (page == 1) { @@ -369,7 +382,7 @@ int results_handler(UrlParams *params) { } int warning_count = 0; - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { if (warning_message_for_job(&jobs[i])) warning_count++; } @@ -379,7 +392,7 @@ int results_handler(UrlParams *params) { int *warning_inner_counts = NULL; int warning_index = 0; - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { const char *warning_message = warning_message_for_job(&jobs[i]); if (!warning_message) continue; @@ -407,7 +420,7 @@ int results_handler(UrlParams *params) { } int total_results = 0; - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { total_results += jobs[i].results_count; } @@ -427,7 +440,7 @@ int results_handler(UrlParams *params) { send_response(html); free(html); } - for (int i = 0; i < ENGINE_COUNT; i++) + for (int i = 0; i < enabled_engine_count; i++) free(all_results[i]); if (page == 1) { for (int i = 0; i < HANDLER_COUNT; i++) { @@ -441,7 +454,7 @@ int results_handler(UrlParams *params) { } int unique_count = 0; - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { for (int j = 0; j < jobs[i].results_count; j++) { char *display_url = all_results[i][j].url; @@ -524,7 +537,7 @@ int results_handler(UrlParams *params) { free(html); } - for (int i = 0; i < ENGINE_COUNT; i++) { + for (int i = 0; i < enabled_engine_count; i++) { free(all_results[i]); } } |
