aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Main.c8
-rw-r--r--src/Routes/Home.c4
-rw-r--r--src/Routes/Images.c5
-rw-r--r--src/Routes/Search.c4
-rw-r--r--src/Routes/Settings.c24
-rw-r--r--src/Routes/SettingsSave.c6
-rw-r--r--src/Utility/Utility.c9
-rw-r--r--src/Utility/Utility.h3
8 files changed, 62 insertions, 1 deletions
diff --git a/src/Main.c b/src/Main.c
index c3a607a..988d0b0 100644
--- a/src/Main.c
+++ b/src/Main.c
@@ -67,6 +67,13 @@ int main() {
global_config = cfg;
+ int loaded = beaker_load_locales();
+ if (loaded > 0) {
+ fprintf(stderr, "[INFO] Loaded %d locales\n", loaded);
+ } else {
+ fprintf(stderr, "[WARN] No locales loaded (make sure to run from omnisearch directory)\n");
+ }
+
apply_engines_config(cfg.engines);
if (cache_init(cfg.cache_dir) != 0) {
@@ -119,6 +126,7 @@ int main() {
curl_global_cleanup();
xmlCleanupParser();
+ beaker_free_locales();
free_proxy_list();
cache_shutdown();
return EXIT_SUCCESS;
diff --git a/src/Routes/Home.c b/src/Routes/Home.c
index c857663..48edfd9 100644
--- a/src/Routes/Home.c
+++ b/src/Routes/Home.c
@@ -1,19 +1,23 @@
#include "Home.h"
#include "../Utility/Utility.h"
+#include <beaker.h>
#include <stdlib.h>
int home_handler(UrlParams *params) {
(void)params;
char *theme = get_theme("");
+ char *locale = get_locale("en_uk");
TemplateContext ctx = new_context();
context_set(&ctx, "theme", theme);
+ beaker_set_locale(&ctx, locale);
char *rendered_html = render_template("home.html", &ctx);
send_response(rendered_html);
free(rendered_html);
free_context(&ctx);
free(theme);
+ free(locale);
return 0;
}
diff --git a/src/Routes/Images.c b/src/Routes/Images.c
index 98fd3f4..636f071 100644
--- a/src/Routes/Images.c
+++ b/src/Routes/Images.c
@@ -5,6 +5,7 @@
#include "../Utility/Unescape.h"
#include "../Utility/Utility.h"
#include "Config.h"
+#include <beaker.h>
static char *build_images_request_cache_key(const char *query, int page,
const char *client_key) {
@@ -46,6 +47,10 @@ int images_handler(UrlParams *params) {
context_set(&ctx, "theme", theme);
free(theme);
+ char *locale = get_locale("en_uk");
+ beaker_set_locale(&ctx, locale);
+ free(locale);
+
context_set(&ctx, "page", page_str);
context_set(&ctx, "prev_page", prev_str);
context_set(&ctx, "next_page", next_str);
diff --git a/src/Routes/Search.c b/src/Routes/Search.c
index 170b488..c5b3ec0 100644
--- a/src/Routes/Search.c
+++ b/src/Routes/Search.c
@@ -419,6 +419,10 @@ int results_handler(UrlParams *params) {
context_set(&ctx, "theme", theme);
free(theme);
+ char *locale = get_locale("en_uk");
+ beaker_set_locale(&ctx, locale);
+ free(locale);
+
char page_str[16];
snprintf(page_str, sizeof(page_str), "%d", page);
context_set(&ctx, "page", page_str);
diff --git a/src/Routes/Settings.c b/src/Routes/Settings.c
index 05edc56..cfadd09 100644
--- a/src/Routes/Settings.c
+++ b/src/Routes/Settings.c
@@ -1,5 +1,6 @@
#include "Settings.h"
#include "../Utility/Utility.h"
+#include <beaker.h>
#include <stdlib.h>
#include <string.h>
@@ -9,21 +10,42 @@ int settings_handler(UrlParams *params) {
for (int i = 0; i < params->count; i++) {
if (strcmp(params->params[i].key, "q") == 0) {
query = params->params[i].value;
- break;
}
}
}
char *theme = get_theme("system");
+ char *locale = get_locale("en_uk");
+
+ LocaleInfo locales[32];
+ int locale_count = beaker_get_all_locales(locales, 32);
+
+ char **locale_data[32];
+ int inner_counts[32];
+ for (int i = 0; i < locale_count; i++) {
+ locale_data[i] = malloc(sizeof(char *) * 2);
+ locale_data[i][0] = locales[i].meta.id;
+ locale_data[i][1] = locales[i].meta.name;
+ inner_counts[i] = 2;
+ }
TemplateContext ctx = new_context();
+ beaker_set_locale(&ctx, locale);
context_set(&ctx, "query", query);
context_set(&ctx, "theme", theme);
+ context_set(&ctx, "locale", locale);
+ context_set_array_of_arrays(&ctx, "locales", locale_data, locale_count, inner_counts);
+
+ for (int i = 0; i < locale_count; i++) {
+ free(locale_data[i]);
+ }
+
char *rendered_html = render_template("settings.html", &ctx);
send_response(rendered_html);
free(rendered_html);
free(theme);
+ free(locale);
free_context(&ctx);
return 0;
diff --git a/src/Routes/SettingsSave.c b/src/Routes/SettingsSave.c
index d286507..323fe0d 100644
--- a/src/Routes/SettingsSave.c
+++ b/src/Routes/SettingsSave.c
@@ -4,12 +4,15 @@
int settings_save_handler(UrlParams *params) {
const char *theme = "";
+ const char *locale = "";
const char *query = "";
if (params) {
for (int i = 0; i < params->count; i++) {
if (strcmp(params->params[i].key, "theme") == 0) {
theme = params->params[i].value;
+ } else if (strcmp(params->params[i].key, "locale") == 0) {
+ locale = params->params[i].value;
} else if (strcmp(params->params[i].key, "q") == 0) {
query = params->params[i].value;
}
@@ -19,6 +22,9 @@ int settings_save_handler(UrlParams *params) {
if (strlen(theme) > 0) {
set_cookie("theme", theme, "Fri, 31 Dec 2038 23:59:59 GMT", "/", false, false);
}
+ if (strlen(locale) > 0) {
+ set_cookie("locale", locale, "Fri, 31 Dec 2038 23:59:59 GMT", "/", false, false);
+ }
char redirect_url[512];
snprintf(redirect_url, sizeof(redirect_url), "/settings?q=%s", query);
diff --git a/src/Utility/Utility.c b/src/Utility/Utility.c
index b4ad91d..0d7a28e 100644
--- a/src/Utility/Utility.c
+++ b/src/Utility/Utility.c
@@ -23,3 +23,12 @@ char *get_theme(const char *default_theme) {
free(cookie);
return strdup(default_theme);
}
+
+char *get_locale(const char *default_locale) {
+ char *cookie = get_cookie("locale");
+ if (cookie && beaker_get_locale_meta(cookie) != NULL) {
+ return cookie;
+ }
+ free(cookie);
+ return strdup(default_locale);
+}
diff --git a/src/Utility/Utility.h b/src/Utility/Utility.h
index e67282f..387aae0 100644
--- a/src/Utility/Utility.h
+++ b/src/Utility/Utility.h
@@ -1,7 +1,10 @@
#ifndef UTILITY_H
#define UTILITY_H
+#include <beaker.h>
+
int hex_to_int(char c);
char *get_theme(const char *default_theme);
+char *get_locale(const char *default_locale);
#endif