feat: begin adding settings menu, move theme to settings
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
#include "Routes/ImageProxy.h"
|
||||
#include "Routes/Images.h"
|
||||
#include "Routes/Search.h"
|
||||
#include "Routes/Settings.h"
|
||||
#include "Routes/SettingsSave.h"
|
||||
#include "Scraping/Scraping.h"
|
||||
|
||||
Config global_config;
|
||||
@@ -97,6 +99,8 @@ int main() {
|
||||
set_handler("/search", results_handler);
|
||||
set_handler("/images", images_handler);
|
||||
set_handler("/proxy", image_proxy_handler);
|
||||
set_handler("/settings", settings_handler);
|
||||
set_handler("/save_settings", settings_save_handler);
|
||||
|
||||
fprintf(stderr, "[INFO] Starting Omnisearch on %s:%d\n", cfg.host, cfg.port);
|
||||
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
#include "Home.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
int home_handler(UrlParams *params) {
|
||||
(void)params;
|
||||
char *theme = get_theme("");
|
||||
|
||||
TemplateContext ctx = new_context();
|
||||
context_set(&ctx, "theme", theme);
|
||||
char *rendered_html = render_template("home.html", &ctx);
|
||||
send_response(rendered_html);
|
||||
|
||||
free(rendered_html);
|
||||
free_context(&ctx);
|
||||
free(theme);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "Images.h"
|
||||
#include "../Scraping/ImageScraping.h"
|
||||
#include "../Utility/Unescape.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include "Config.h"
|
||||
|
||||
int images_handler(UrlParams *params) {
|
||||
@@ -29,6 +30,11 @@ int images_handler(UrlParams *params) {
|
||||
snprintf(two_prev_str, sizeof(two_prev_str), "%d", page > 2 ? page - 2 : 0);
|
||||
snprintf(two_next_str, sizeof(two_next_str), "%d", page + 2);
|
||||
context_set(&ctx, "query", raw_query);
|
||||
|
||||
char *theme = get_theme("");
|
||||
context_set(&ctx, "theme", theme);
|
||||
free(theme);
|
||||
|
||||
context_set(&ctx, "page", page_str);
|
||||
context_set(&ctx, "prev_page", prev_str);
|
||||
context_set(&ctx, "next_page", next_str);
|
||||
@@ -39,7 +45,7 @@ int images_handler(UrlParams *params) {
|
||||
context_set(&ctx, "query", display_query);
|
||||
|
||||
if (!raw_query || strlen(raw_query) == 0) {
|
||||
send_response("<h1>No query provided</h1>");
|
||||
send_redirect("/");
|
||||
if (display_query)
|
||||
free(display_query);
|
||||
free_context(&ctx);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "../Scraping/Scraping.h"
|
||||
#include "../Utility/Display.h"
|
||||
#include "../Utility/Unescape.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include "Config.h"
|
||||
#include <ctype.h>
|
||||
#include <pthread.h>
|
||||
@@ -401,12 +402,17 @@ int results_handler(UrlParams *params) {
|
||||
}
|
||||
|
||||
context_set(&ctx, "query", raw_query);
|
||||
|
||||
char *theme = get_theme("");
|
||||
context_set(&ctx, "theme", theme);
|
||||
free(theme);
|
||||
|
||||
char page_str[16];
|
||||
snprintf(page_str, sizeof(page_str), "%d", page);
|
||||
context_set(&ctx, "page", page_str);
|
||||
|
||||
if (!raw_query || strlen(raw_query) == 0) {
|
||||
send_response("<h1>No query provided</h1>");
|
||||
send_redirect("/");
|
||||
free_context(&ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
30
src/Routes/Settings.c
Normal file
30
src/Routes/Settings.c
Normal file
@@ -0,0 +1,30 @@
|
||||
#include "Settings.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int settings_handler(UrlParams *params) {
|
||||
const char *query = "";
|
||||
if (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");
|
||||
|
||||
TemplateContext ctx = new_context();
|
||||
context_set(&ctx, "query", query);
|
||||
context_set(&ctx, "theme", theme);
|
||||
char *rendered_html = render_template("settings.html", &ctx);
|
||||
send_response(rendered_html);
|
||||
|
||||
free(rendered_html);
|
||||
free(theme);
|
||||
free_context(&ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
8
src/Routes/Settings.h
Normal file
8
src/Routes/Settings.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef SETTINGS_H
|
||||
#define SETTINGS_H
|
||||
|
||||
#include <beaker.h>
|
||||
|
||||
int settings_handler(UrlParams *params);
|
||||
|
||||
#endif
|
||||
28
src/Routes/SettingsSave.c
Normal file
28
src/Routes/SettingsSave.c
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "SettingsSave.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int settings_save_handler(UrlParams *params) {
|
||||
const char *theme = "";
|
||||
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, "q") == 0) {
|
||||
query = params->params[i].value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen(theme) > 0) {
|
||||
set_cookie("theme", theme, "Fri, 31 Dec 2038 23:59:59 GMT", "/", false, false);
|
||||
}
|
||||
|
||||
char redirect_url[512];
|
||||
snprintf(redirect_url, sizeof(redirect_url), "/settings?q=%s", query);
|
||||
send_redirect(redirect_url);
|
||||
|
||||
return 0;
|
||||
}
|
||||
8
src/Routes/SettingsSave.h
Normal file
8
src/Routes/SettingsSave.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef SETTINGS_SAVE_H
|
||||
#define SETTINGS_SAVE_H
|
||||
|
||||
#include <beaker.h>
|
||||
|
||||
int settings_save_handler(UrlParams *params);
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,7 @@
|
||||
#include "Utility.h"
|
||||
#include <beaker.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int hex_to_int(char c) {
|
||||
if (c >= '0' && c <= '9')
|
||||
@@ -9,3 +12,14 @@ int hex_to_int(char c) {
|
||||
return c - 'A' + 10;
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *get_theme(const char *default_theme) {
|
||||
char *cookie = get_cookie("theme");
|
||||
if (cookie &&
|
||||
(strcmp(cookie, "light") == 0 ||
|
||||
strcmp(cookie, "dark") == 0)) {
|
||||
return cookie;
|
||||
}
|
||||
free(cookie);
|
||||
return strdup(default_theme);
|
||||
}
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
#define UTILITY_H
|
||||
|
||||
int hex_to_int(char c);
|
||||
char *get_theme(const char *default_theme);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user