mirror of
https://github.com/simon987/sist2.git
synced 2025-12-12 15:08:53 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ea4fb7fa0d | |||
| b0a868bb73 | |||
| d761a3b595 | |||
| 2d7a8a2fdc |
@@ -79,7 +79,7 @@ binaries.
|
||||
apt install git cmake pkg-config libglib2.0-dev\
|
||||
libssl-dev uuid-dev libavformat-dev libswscale-dev \
|
||||
python3 libmagic-dev libfreetype6-dev libcurl-dev \
|
||||
libbz2-dev yasm libharfbuzz-dev
|
||||
libbz2-dev yasm libharfbuzz-dev ragel
|
||||
```
|
||||
*(FreeBSD)*
|
||||
```bash
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0"
|
||||
|
||||
|
||||
static const char *const Version = "1.1.1";
|
||||
static const char *const Version = "1.1.2";
|
||||
static const char *const usage[] = {
|
||||
"sist2 scan [OPTION]... PATH",
|
||||
"sist2 index [OPTION]... INDEX",
|
||||
|
||||
@@ -142,6 +142,9 @@ void parse_font(const char *buf, size_t buf_len, document_t *doc) {
|
||||
if (library == NULL) {
|
||||
FT_Init_FreeType(&library);
|
||||
}
|
||||
if (buf == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
FT_Face face;
|
||||
FT_Error err = FT_New_Memory_Face(library, (unsigned char *) buf, buf_len, 0, &face);
|
||||
|
||||
@@ -16,7 +16,6 @@ void *read_all(parse_job_t *job, const char *buf, int bytes_read, int *fd) {
|
||||
if (*fd == -1) {
|
||||
perror("open");
|
||||
printf("%s\n", job->filepath);
|
||||
free(job);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -25,6 +24,7 @@ void *read_all(parse_job_t *job, const char *buf, int bytes_read, int *fd) {
|
||||
int ret = read(*fd, full_buf + bytes_read, job->info.st_size - bytes_read);
|
||||
if (ret == -1) {
|
||||
perror("read");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ void parse(void *arg) {
|
||||
void *pdf_buf = read_all(job, (char *) buf, bytes_read, &fd);
|
||||
parse_pdf(pdf_buf, doc.size, &doc);
|
||||
|
||||
if (pdf_buf != buf) {
|
||||
if (pdf_buf != buf && pdf_buf != NULL) {
|
||||
free(pdf_buf);
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ void parse(void *arg) {
|
||||
void *font_buf = read_all(job, (char *) buf, bytes_read, &fd);
|
||||
parse_font(font_buf, doc.size, &doc);
|
||||
|
||||
if (font_buf != buf) {
|
||||
if (font_buf != buf && font_buf != NULL) {
|
||||
free(font_buf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,6 +114,10 @@ int read_stext_block(fz_stext_block *block, text_buffer_t *tex) {
|
||||
|
||||
void parse_pdf(void *buf, size_t buf_len, document_t *doc) {
|
||||
|
||||
if (buf == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
static int mu_is_initialized = 0;
|
||||
if (!mu_is_initialized) {
|
||||
pthread_mutex_init(&ScanCtx.mupdf_mu, NULL);
|
||||
|
||||
10
src/util.c
10
src/util.c
@@ -140,12 +140,22 @@ int utf8_validchr(const char* s) {
|
||||
int text_buffer_append_string(text_buffer_t *buf, char *str, size_t len) {
|
||||
|
||||
utf8_int32_t c;
|
||||
if (str == NULL || len < 1 ||
|
||||
(0xf0 == (0xf8 & str[0]) && len < 4) ||
|
||||
(0xe0 == (0xf0 & str[0]) && len < 3) ||
|
||||
(0xc0 == (0xe0 & str[0]) && len == 1) ||
|
||||
*(str) == 0) {
|
||||
text_buffer_terminate_string(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (void *v = utf8codepoint(str, &c); c != '\0' && ((char *) v - str + 4) < len; v = utf8codepoint(v, &c)) {
|
||||
if (utf8_validchr(v)) {
|
||||
text_buffer_append_char(buf, c);
|
||||
}
|
||||
}
|
||||
text_buffer_terminate_string(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int text_buffer_append_string0(text_buffer_t *buf, char *str) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -32,7 +32,7 @@ window.onload = () => {
|
||||
})
|
||||
};
|
||||
|
||||
function toggleSearchBar() {
|
||||
function toggleFuzzy() {
|
||||
searchDebounced();
|
||||
}
|
||||
|
||||
@@ -218,11 +218,22 @@ function search() {
|
||||
|
||||
let query = searchBar.value;
|
||||
let empty = query === "";
|
||||
let condition = $("#barToggle").prop("checked") && !empty ? "must" : "should";
|
||||
let condition = empty ? "should" : "must";
|
||||
let filters = [
|
||||
{range: {size: {gte: size_min, lte: size_max}}},
|
||||
{terms: {index: selectedIndices}}
|
||||
];
|
||||
let fields = [
|
||||
"name^8",
|
||||
"content^3",
|
||||
"album^8", "artist^8", "title^8", "genre^2", "album_artist^8",
|
||||
"font_name^6"
|
||||
];
|
||||
|
||||
if ($("#fuzzyToggle").prop("checked")) {
|
||||
fields.push("content.nGram");
|
||||
fields.push("name.nGram^3");
|
||||
}
|
||||
|
||||
let path = pathBar.value.replace(/\/$/, "").toLowerCase(); //remove trailing slashes
|
||||
if (path !== "") {
|
||||
@@ -243,12 +254,7 @@ function search() {
|
||||
multi_match: {
|
||||
query: query,
|
||||
type: "most_fields",
|
||||
fields: [
|
||||
"name^8", "name.nGram^3", "content^3",
|
||||
"content.nGram",
|
||||
"album^8", "artist^8", "title^8", "genre^2", "album_artist^8",
|
||||
"font_name^6"
|
||||
],
|
||||
fields: fields,
|
||||
operator: "and"
|
||||
}
|
||||
},
|
||||
@@ -265,7 +271,7 @@ function search() {
|
||||
content: {},
|
||||
name: {},
|
||||
"name.nGram": {},
|
||||
// font_name: {},
|
||||
font_name: {},
|
||||
}
|
||||
},
|
||||
aggs: {
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
<span onclick="document.getElementById('barToggle').click()">Must match </span>
|
||||
<input title="Toggle between 'Should' and 'Must' match mode" type="checkbox" id="barToggle"
|
||||
onclick="toggleSearchBar()" checked>
|
||||
<span onclick="document.getElementById('fuzzyToggle').click()">Fuzzy </span>
|
||||
<input title="Toggle fuzzy searching" type="checkbox" id="fuzzyToggle"
|
||||
onclick="toggleFuzzy()" checked>
|
||||
</div>
|
||||
</div>
|
||||
<input id="searchBar" type="search" class="form-control" placeholder="Search">
|
||||
|
||||
Reference in New Issue
Block a user