diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-04-01 22:39:22 +0300 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-04-01 22:39:22 +0300 |
| commit | 8176078105d3ce0331cf5deb3ff2e564d5221d05 (patch) | |
| tree | da0a33cf66b7c76c276e0cc3c2511f61b3558435 /src/Routes/Settings.c | |
| parent | 614bd26cb34b9b340e327d4b80927353bb5a5d0a (diff) | |
| download | omnisearch-8176078105d3ce0331cf5deb3ff2e564d5221d05.tar.gz | |
feat: configure search engines in user settings
Diffstat (limited to 'src/Routes/Settings.c')
| -rw-r--r-- | src/Routes/Settings.c | 60 |
1 files changed, 60 insertions, 0 deletions
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 <beaker.h> #include <stdlib.h> @@ -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); |
