mirror of
https://github.com/simon987/sist2.git
synced 2025-04-10 05:56:46 +00:00
Fix #351
This commit is contained in:
parent
9813646c11
commit
75b66b5982
@ -104,14 +104,14 @@ database_iterator_t *database_create_document_iterator(database_t *db);
|
||||
cJSON *database_document_iter(database_iterator_t *);
|
||||
|
||||
#define database_document_iter_foreach(element, iter) \
|
||||
for (cJSON *element = database_document_iter(iter); element != NULL; element = database_document_iter(iter))
|
||||
for (cJSON *(element) = database_document_iter(iter); (element) != NULL; (element) = database_document_iter(iter))
|
||||
|
||||
database_iterator_t *database_create_delete_list_iterator(database_t *db);
|
||||
|
||||
char * database_delete_list_iter(database_iterator_t *iter);
|
||||
|
||||
#define database_delete_list_iter_foreach(element, iter) \
|
||||
for (char *element = database_delete_list_iter(iter); element != NULL; element = database_delete_list_iter(iter))
|
||||
for (char *(element) = database_delete_list_iter(iter); (element) != NULL; (element) = database_delete_list_iter(iter))
|
||||
|
||||
|
||||
cJSON *database_incremental_scan_begin(database_t *db);
|
||||
|
@ -195,6 +195,10 @@ void initialize_scan_context(scan_args_t *args) {
|
||||
ScanCtx.mobi_ctx.content_size = args->content_size;
|
||||
ScanCtx.mobi_ctx.log = log_callback;
|
||||
ScanCtx.mobi_ctx.logf = logf_callback;
|
||||
ScanCtx.mobi_ctx.store = write_thumbnail_callback;
|
||||
ScanCtx.mobi_ctx.enable_tn = args->tn_count > 0;
|
||||
ScanCtx.mobi_ctx.tn_size = args->tn_size;
|
||||
ScanCtx.mobi_ctx.tn_qscale = args->tn_quality;
|
||||
|
||||
// TEXT
|
||||
ScanCtx.text_ctx.content_size = args->content_size;
|
||||
@ -322,6 +326,7 @@ void sist2_index(index_args_t *args) {
|
||||
index_json(json, doc_id);
|
||||
cnt += 1;
|
||||
}
|
||||
cJSON_Delete(json);
|
||||
}
|
||||
|
||||
free(iterator);
|
||||
|
39
third-party/libscan/libscan/mobi/scan_mobi.c
vendored
39
third-party/libscan/libscan/mobi/scan_mobi.c
vendored
@ -1,9 +1,44 @@
|
||||
#include "scan_mobi.h"
|
||||
|
||||
#include "../../third-party/libmobi/src/mobi.h"
|
||||
#include "../media/media.h"
|
||||
#include <errno.h>
|
||||
#include "stdlib.h"
|
||||
|
||||
int store_cover(scan_mobi_ctx_t *ctx, document_t *doc, MOBIData *m) {
|
||||
MOBIExthHeader *exth = mobi_get_exthrecord_by_tag(m, EXTH_COVEROFFSET);
|
||||
|
||||
if (exth == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uint32_t offset = mobi_decode_exthvalue(exth->data, exth->size);
|
||||
size_t first_resource = mobi_get_first_resource_record(m);
|
||||
size_t uid = first_resource + offset;
|
||||
MOBIPdbRecord *record = mobi_get_record_by_seqnumber(m, uid);
|
||||
|
||||
if (record == NULL || record->size < 4) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
scan_media_ctx_t media_ctx = {
|
||||
.tn_count = TRUE,
|
||||
.tn_size = ctx->tn_size,
|
||||
.tn_qscale = ctx->tn_qscale,
|
||||
.tesseract_lang = NULL,
|
||||
.tesseract_path = NULL,
|
||||
.read_subtitles = FALSE,
|
||||
.max_media_buffer = 0,
|
||||
.log = ctx->log,
|
||||
.logf = ctx->logf,
|
||||
.store = ctx->store,
|
||||
};
|
||||
|
||||
store_image_thumbnail(&media_ctx, record->data, record->size, doc, "img.jpg");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void parse_mobi(scan_mobi_ctx_t *ctx, vfile_t *f, document_t *doc) {
|
||||
|
||||
MOBIData *m = mobi_init();
|
||||
@ -72,6 +107,10 @@ void parse_mobi(scan_mobi_ctx_t *ctx, vfile_t *f, document_t *doc) {
|
||||
|
||||
APPEND_STR_META(doc, MetaContent, tex.dyn_buffer.buf);
|
||||
|
||||
if (ctx->enable_tn) {
|
||||
store_cover(ctx, doc, m);
|
||||
}
|
||||
|
||||
free(content_str);
|
||||
free(buf);
|
||||
text_buffer_destroy(&tex);
|
||||
|
5
third-party/libscan/libscan/mobi/scan_mobi.h
vendored
5
third-party/libscan/libscan/mobi/scan_mobi.h
vendored
@ -7,6 +7,11 @@ typedef struct {
|
||||
long content_size;
|
||||
log_callback_t log;
|
||||
logf_callback_t logf;
|
||||
store_callback_t store;
|
||||
|
||||
int tn_qscale;
|
||||
int tn_size;
|
||||
int enable_tn;
|
||||
} scan_mobi_ctx_t;
|
||||
|
||||
void parse_mobi(scan_mobi_ctx_t *ctx, vfile_t *f, document_t *doc);
|
||||
|
Loading…
x
Reference in New Issue
Block a user