diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-03-17 12:07:07 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-03-17 12:07:07 -0400 |
| commit | 8c6632502ff992e80051910451421c55894ed9d8 (patch) | |
| tree | e4a03e8ae45e020627781ff21141626fb0ebedeb /src/Utility | |
| parent | 5a6ad269745fe8cc8bc874eac4fac2479903028e (diff) | |
| download | omnisearch-8c6632502ff992e80051910451421c55894ed9d8.tar.gz | |
fix: general readability improvements
Diffstat (limited to 'src/Utility')
| -rw-r--r-- | src/Utility/Display.c | 3 | ||||
| -rw-r--r-- | src/Utility/HttpClient.c | 53 | ||||
| -rw-r--r-- | src/Utility/HttpClient.h | 16 |
3 files changed, 68 insertions, 4 deletions
diff --git a/src/Utility/Display.c b/src/Utility/Display.c index d313383..1322391 100644 --- a/src/Utility/Display.c +++ b/src/Utility/Display.c @@ -1,4 +1,5 @@ #include "Display.h" +#include "Config.h" #include <ctype.h> #include <stdlib.h> #include <string.h> @@ -20,7 +21,7 @@ char *pretty_display_url(const char *input) { } size_t input_len = strlen(start); - char temp[512]; + char temp[BUFFER_SIZE_MEDIUM]; strncpy(temp, start, sizeof(temp) - 1); temp[sizeof(temp) - 1] = '\0'; diff --git a/src/Utility/HttpClient.c b/src/Utility/HttpClient.c index 150b228..bdd2f4d 100644 --- a/src/Utility/HttpClient.c +++ b/src/Utility/HttpClient.c @@ -1,5 +1,7 @@ #include "HttpClient.h" +#include "../Cache/Cache.h" #include "../Proxy/Proxy.h" +#include "Config.h" #include <stdlib.h> #include <string.h> @@ -9,7 +11,8 @@ static size_t write_callback(void *contents, size_t size, size_t nmemb, HttpResponse *mem = (HttpResponse *)userp; if (mem->size + realsize + 1 > mem->capacity) { - size_t new_cap = mem->capacity == 0 ? 16384 : mem->capacity * 2; + size_t new_cap = + mem->capacity == 0 ? INITIAL_BUFFER_SIZE : mem->capacity * 2; while (new_cap < mem->size + realsize + 1) new_cap *= 2; @@ -35,11 +38,11 @@ HttpResponse http_get(const char *url, const char *user_agent) { return resp; } - resp.memory = malloc(16384); + resp.memory = malloc(INITIAL_BUFFER_SIZE); if (!resp.memory) { return resp; } - resp.capacity = 16384; + resp.capacity = INITIAL_BUFFER_SIZE; CURL *curl = curl_easy_init(); if (!curl) { @@ -79,3 +82,47 @@ void http_response_free(HttpResponse *resp) { resp->size = 0; resp->capacity = 0; } + +CachedHttpResponse cached_http_get(const char *url, const char *user_agent, + const char *cache_key, time_t cache_ttl, + XmlParserFn parser) { + CachedHttpResponse result = { + .memory = NULL, .size = 0, .parsed_result = NULL, .success = 0}; + + if (!url || !parser) { + return result; + } + + if (cache_key && cache_ttl > 0) { + char *cached_data = NULL; + size_t cached_size = 0; + if (cache_get(cache_key, cache_ttl, &cached_data, &cached_size) == 0 && + cached_data && cached_size > 0) { + xmlDocPtr doc = parser(cached_data, cached_size, url); + if (doc) { + result.parsed_result = doc; + result.success = 1; + } + free(cached_data); + return result; + } + free(cached_data); + } + + HttpResponse resp = http_get(url, user_agent); + if (resp.memory && resp.size > 0) { + if (cache_key && cache_ttl > 0) { + cache_set(cache_key, resp.memory, resp.size); + } + + xmlDocPtr doc = parser(resp.memory, resp.size, url); + if (doc) { + result.parsed_result = doc; + result.success = 1; + } + } + + result.memory = resp.memory; + result.size = resp.size; + return result; +} diff --git a/src/Utility/HttpClient.h b/src/Utility/HttpClient.h index 6eb002c..5eceb83 100644 --- a/src/Utility/HttpClient.h +++ b/src/Utility/HttpClient.h @@ -2,7 +2,9 @@ #define HTTPCLIENT_H #include <curl/curl.h> +#include <libxml/parser.h> #include <stddef.h> +#include <time.h> typedef struct { char *memory; @@ -13,4 +15,18 @@ typedef struct { HttpResponse http_get(const char *url, const char *user_agent); void http_response_free(HttpResponse *resp); +typedef xmlDocPtr (*XmlParserFn)(const char *data, size_t size, + const char *url); + +typedef struct { + char *memory; + size_t size; + void *parsed_result; + int success; +} CachedHttpResponse; + +CachedHttpResponse cached_http_get(const char *url, const char *user_agent, + const char *cache_key, time_t cache_ttl, + XmlParserFn parser); + #endif |
