From 8176078105d3ce0331cf5deb3ff2e564d5221d05 Mon Sep 17 00:00:00 2001 From: frosty Date: Wed, 1 Apr 2026 22:39:22 +0300 Subject: feat: configure search engines in user settings --- src/Routes/Settings.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src/Routes/Settings.c') diff --git a/src/Routes/Settings.c b/src/Routes/Settings.c index cfadd09..1ad85a7 100644 --- a/src/Routes/Settings.c +++ b/src/Routes/Settings.c @@ -1,4 +1,5 @@ #include "Settings.h" +#include "../Scraping/Scraping.h" #include "../Utility/Utility.h" #include #include @@ -29,6 +30,48 @@ int settings_handler(UrlParams *params) { inner_counts[i] = 2; } + char **user_engines = NULL; + int user_engine_count = 0; + int has_user_pref = (get_user_engines(&user_engines, &user_engine_count) == 0); + + int enabled_count = 0; + for (int i = 0; i < ENGINE_COUNT; i++) { + if (ENGINE_REGISTRY[i].enabled) + enabled_count++; + } + + char ***engine_data = NULL; + int *engine_inner = NULL; + + if (enabled_count > 0) { + engine_data = malloc(sizeof(char **) * enabled_count); + engine_inner = malloc(sizeof(int) * enabled_count); + + int idx = 0; + for (int i = 0; i < ENGINE_COUNT; i++) { + if (!ENGINE_REGISTRY[i].enabled) + continue; + + int is_selected = !has_user_pref; + if (has_user_pref) { + for (int j = 0; j < user_engine_count; j++) { + if (strcmp(user_engines[j], ENGINE_REGISTRY[i].id) == 0) { + is_selected = 1; + break; + } + } + } + + engine_data[idx] = malloc(sizeof(char *) * 3); + engine_data[idx][0] = (char *)ENGINE_REGISTRY[i].id; + engine_data[idx][1] = (char *)ENGINE_REGISTRY[i].name; + engine_data[idx][2] = is_selected ? "checked" : ""; + engine_inner[idx] = 3; + + idx++; + } + } + TemplateContext ctx = new_context(); beaker_set_locale(&ctx, locale); context_set(&ctx, "query", query); @@ -36,9 +79,26 @@ int settings_handler(UrlParams *params) { context_set(&ctx, "locale", locale); context_set_array_of_arrays(&ctx, "locales", locale_data, locale_count, inner_counts); + if (enabled_count > 0) { + context_set_array_of_arrays(&ctx, "enabled_engines", engine_data, + enabled_count, engine_inner); + context_set(&ctx, "has_enabled_engines", "1"); + } + for (int i = 0; i < locale_count; i++) { free(locale_data[i]); } + if (engine_data) { + for (int i = 0; i < enabled_count; i++) + free(engine_data[i]); + free(engine_data); + } + free(engine_inner); + if (has_user_pref) { + for (int i = 0; i < user_engine_count; i++) + free(user_engines[i]); + free(user_engines); + } char *rendered_html = render_template("settings.html", &ctx); send_response(rendered_html); -- cgit v1.2.3