aboutsummaryrefslogtreecommitdiff
path: root/src/Routes/Search.c
diff options
context:
space:
mode:
authorfrosty <gabriel@bwaaa.monster>2026-03-13 13:33:30 -0400
committerfrosty <gabriel@bwaaa.monster>2026-03-13 13:33:30 -0400
commit4539593e6ad442dc2547ccab38a3c642ccd635e1 (patch)
treef291a5f603e0468650167f8aaba82d8c8135028e /src/Routes/Search.c
parentef1cd7cc6060df0f5dcfada136dd99a695e8a0fc (diff)
downloadomnisearch-4539593e6ad442dc2547ccab38a3c642ccd635e1.tar.gz
feature: added currency conversion infobox
Diffstat (limited to 'src/Routes/Search.c')
-rw-r--r--src/Routes/Search.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/Routes/Search.c b/src/Routes/Search.c
index dcfdf42..7d62f08 100644
--- a/src/Routes/Search.c
+++ b/src/Routes/Search.c
@@ -1,5 +1,6 @@
#include "Search.h"
#include "../Infobox/Calculator.h"
+#include "../Infobox/CurrencyConversion.h"
#include "../Infobox/Dictionary.h"
#include "../Infobox/UnitConversion.h"
#include "../Infobox/Wikipedia.h"
@@ -129,6 +130,20 @@ static void *unit_thread_func(void *arg) {
return NULL;
}
+static void *currency_thread_func(void *arg) {
+ InfoBoxThreadData *data = (InfoBoxThreadData *)arg;
+
+ if (is_currency_query(data->query)) {
+ data->result = fetch_currency_data(data->query);
+ data->success =
+ (data->result.title != NULL && data->result.extract != NULL);
+ } else {
+ data->success = 0;
+ }
+
+ return NULL;
+}
+
static int add_infobox_to_collection(InfoBox *infobox, char ****collection,
int **inner_counts, int current_count) {
*collection =
@@ -182,17 +197,19 @@ int results_handler(UrlParams *params) {
return -1;
}
- pthread_t wiki_tid, calc_tid, dict_tid, unit_tid;
+ pthread_t wiki_tid, calc_tid, dict_tid, unit_tid, currency_tid;
InfoBoxThreadData wiki_data = {.query = raw_query, .success = 0};
InfoBoxThreadData calc_data = {.query = raw_query, .success = 0};
InfoBoxThreadData dict_data = {.query = raw_query, .success = 0};
InfoBoxThreadData unit_data = {.query = raw_query, .success = 0};
+ InfoBoxThreadData currency_data = {.query = raw_query, .success = 0};
if (page == 1) {
pthread_create(&wiki_tid, NULL, wiki_thread_func, &wiki_data);
pthread_create(&calc_tid, NULL, calc_thread_func, &calc_data);
pthread_create(&dict_tid, NULL, dict_thread_func, &dict_data);
pthread_create(&unit_tid, NULL, unit_thread_func, &unit_data);
+ pthread_create(&currency_tid, NULL, currency_thread_func, &currency_data);
}
ScrapeJob jobs[ENGINE_COUNT];
@@ -219,6 +236,7 @@ int results_handler(UrlParams *params) {
pthread_join(calc_tid, NULL);
pthread_join(dict_tid, NULL);
pthread_join(unit_tid, NULL);
+ pthread_join(currency_tid, NULL);
}
char ***infobox_matrix = NULL;
@@ -244,6 +262,12 @@ int results_handler(UrlParams *params) {
&infobox_inner_counts, infobox_count);
}
+ if (currency_data.success) {
+ infobox_count =
+ add_infobox_to_collection(&currency_data.result, &infobox_matrix,
+ &infobox_inner_counts, infobox_count);
+ }
+
if (wiki_data.success) {
infobox_count =
add_infobox_to_collection(&wiki_data.result, &infobox_matrix,
@@ -353,6 +377,8 @@ int results_handler(UrlParams *params) {
free_infobox(&dict_data.result);
if (unit_data.success)
free_infobox(&unit_data.result);
+ if (currency_data.success)
+ free_infobox(&currency_data.result);
}
free_context(&ctx);