mirror of
https://git.bwaaa.monster/omnisearch
synced 2026-03-25 17:19:02 +02:00
Added favicon to search results
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
#define MD5_HASH_LEN 32
|
#define MD5_HASH_LEN 32
|
||||||
#define HEX_CHARS "0123456789abcdef"
|
#define HEX_CHARS "0123456789abcdef"
|
||||||
|
|
||||||
#define INFOBOX_FIELD_COUNT 4
|
#define INFOBOX_FIELD_COUNT 5
|
||||||
#define MAX_RESULTS_PER_ENGINE 10
|
#define MAX_RESULTS_PER_ENGINE 10
|
||||||
|
|
||||||
#define CURL_TIMEOUT_SECS 15L
|
#define CURL_TIMEOUT_SECS 15L
|
||||||
|
|||||||
@@ -53,7 +53,31 @@ static InfoBox fetch_unit_wrapper(char *query) {
|
|||||||
static InfoBox fetch_currency_wrapper(char *query) {
|
static InfoBox fetch_currency_wrapper(char *query) {
|
||||||
return fetch_currency_data(query);
|
return fetch_currency_data(query);
|
||||||
}
|
}
|
||||||
|
char *get_base_url(const char *input) {
|
||||||
|
if (!input) return NULL;
|
||||||
|
|
||||||
|
const char *start = input;
|
||||||
|
|
||||||
|
const char *protocol_pos = strstr(input, "://");
|
||||||
|
if (protocol_pos) {
|
||||||
|
start = protocol_pos + 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *end = start;
|
||||||
|
while (*end && *end != '/' && *end != '?' && *end != '#') {
|
||||||
|
end++;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t len = end - start;
|
||||||
|
|
||||||
|
char *domain = (char *)malloc(len + 1);
|
||||||
|
if (!domain) return NULL;
|
||||||
|
|
||||||
|
strncpy(domain, start, len);
|
||||||
|
domain[len] = '\0';
|
||||||
|
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
static int is_calculator_query(const char *query) {
|
static int is_calculator_query(const char *query) {
|
||||||
if (!query)
|
if (!query)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -150,6 +174,7 @@ static int add_infobox_to_collection(InfoBox *infobox, char ****collection,
|
|||||||
(*collection)[current_count][2] =
|
(*collection)[current_count][2] =
|
||||||
infobox->extract ? strdup(infobox->extract) : NULL;
|
infobox->extract ? strdup(infobox->extract) : NULL;
|
||||||
(*collection)[current_count][3] = infobox->url ? strdup(infobox->url) : NULL;
|
(*collection)[current_count][3] = infobox->url ? strdup(infobox->url) : NULL;
|
||||||
|
(*collection)[current_count][4] = infobox->url ? strdup(infobox->url) : NULL;
|
||||||
(*inner_counts)[current_count] = INFOBOX_FIELD_COUNT;
|
(*inner_counts)[current_count] = INFOBOX_FIELD_COUNT;
|
||||||
|
|
||||||
return current_count + 1;
|
return current_count + 1;
|
||||||
@@ -490,6 +515,7 @@ int results_handler(UrlParams *params) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
char *pretty_url = pretty_display_url(display_url);
|
char *pretty_url = pretty_display_url(display_url);
|
||||||
|
char *base_url = get_base_url(display_url);
|
||||||
|
|
||||||
results_matrix[unique_count][0] = strdup(display_url);
|
results_matrix[unique_count][0] = strdup(display_url);
|
||||||
results_matrix[unique_count][1] = strdup(pretty_url);
|
results_matrix[unique_count][1] = strdup(pretty_url);
|
||||||
@@ -499,10 +525,12 @@ int results_handler(UrlParams *params) {
|
|||||||
results_matrix[unique_count][3] =
|
results_matrix[unique_count][3] =
|
||||||
all_results[i][j].snippet ? strdup(all_results[i][j].snippet)
|
all_results[i][j].snippet ? strdup(all_results[i][j].snippet)
|
||||||
: strdup("");
|
: strdup("");
|
||||||
|
results_matrix[unique_count][4] = strdup(base_url);
|
||||||
|
|
||||||
results_inner_counts[unique_count] = INFOBOX_FIELD_COUNT;
|
results_inner_counts[unique_count] = INFOBOX_FIELD_COUNT;
|
||||||
|
|
||||||
free(pretty_url);
|
free(pretty_url);
|
||||||
|
free(base_url);
|
||||||
free(all_results[i][j].url);
|
free(all_results[i][j].url);
|
||||||
free(all_results[i][j].title);
|
free(all_results[i][j].title);
|
||||||
free(all_results[i][j].snippet);
|
free(all_results[i][j].snippet);
|
||||||
|
|||||||
@@ -272,6 +272,18 @@ h1 span {
|
|||||||
gap:60px;
|
gap:60px;
|
||||||
padding:30px 60px;
|
padding:30px 60px;
|
||||||
}
|
}
|
||||||
|
.result-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
.result-favicon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
.results-container {
|
.results-container {
|
||||||
grid-column:2;
|
grid-column:2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,9 +55,14 @@
|
|||||||
|
|
||||||
{{for result in results}}
|
{{for result in results}}
|
||||||
<div class="result">
|
<div class="result">
|
||||||
<span class="url">
|
<div class="result-header">
|
||||||
{{result[1]}}
|
<div class="result-favicon"
|
||||||
</span>
|
style="background-image: url('https://{{result[4]}}/favicon.ico');">
|
||||||
|
</div>
|
||||||
|
<span class="url">
|
||||||
|
{{result[1]}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
<a href="{{result[0]}}">
|
<a href="{{result[0]}}">
|
||||||
{{result[2]}}
|
{{result[2]}}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user