mirror of
https://github.com/simon987/sist2.git
synced 2025-04-21 03:06:47 +00:00
Compare commits
3 Commits
d0a1deca30
...
0a7e59b646
Author | SHA1 | Date | |
---|---|---|---|
0a7e59b646 | |||
43a566fe2f | |||
b2631a86c8 |
12
README.md
12
README.md
@ -50,7 +50,8 @@ sist2 (Simple incremental search tool)
|
|||||||
```
|
```
|
||||||
1. Download sist2 executable
|
1. Download sist2 executable
|
||||||
1. Download the [latest sist2 release](https://github.com/simon987/sist2/releases) *
|
1. Download the [latest sist2 release](https://github.com/simon987/sist2/releases) *
|
||||||
1. *(or)* Download a [development snapshot](https://files.simon987.net/.gate/sist2/simon987_sist2/) *(Not recommended!)*
|
1. *(or)* Download a [development snapshot](https://files.simon987.net/.gate/sist2/simon987_sist2/) *(Not
|
||||||
|
recommended!)*
|
||||||
1. *(or)* `docker pull simon987/sist2:2.11.2-x64-linux`
|
1. *(or)* `docker pull simon987/sist2:2.11.2-x64-linux`
|
||||||
|
|
||||||
1. See [Usage guide](docs/USAGE.md)
|
1. See [Usage guide](docs/USAGE.md)
|
||||||
@ -70,19 +71,20 @@ See [Usage guide](docs/USAGE.md) for more details
|
|||||||
File type | Library | Content | Thumbnail | Metadata
|
File type | Library | Content | Thumbnail | Metadata
|
||||||
:---|:---|:---|:---|:---
|
:---|:---|:---|:---|:---
|
||||||
pdf,xps,fb2,epub | MuPDF | text+ocr | yes | author, title |
|
pdf,xps,fb2,epub | MuPDF | text+ocr | yes | author, title |
|
||||||
cbz,cbr | *(none)* | - | yes | - |
|
cbz,cbr | [libscan](https://github.com/simon987/libscan) | - | yes | - |
|
||||||
`audio/*` | ffmpeg | - | yes | ID3 tags |
|
`audio/*` | ffmpeg | - | yes | ID3 tags |
|
||||||
`video/*` | ffmpeg | - | yes | title, comment, artist |
|
`video/*` | ffmpeg | - | yes | title, comment, artist |
|
||||||
`image/*` | ffmpeg | - | yes | [Common EXIF tags](https://github.com/simon987/sist2/blob/efdde2734eca9b14a54f84568863b7ffd59bdba3/src/parsing/media.c#L190), GPS tags |
|
`image/*` | ffmpeg | - | yes | [Common EXIF tags](https://github.com/simon987/sist2/blob/efdde2734eca9b14a54f84568863b7ffd59bdba3/src/parsing/media.c#L190), GPS tags |
|
||||||
raw, rw2, dng, cr2, crw, dcr, k25, kdc, mrw, pef, xf3, arw, sr2, srf, erf | LibRaw | - | yes | Common EXIF tags, GPS tags |
|
raw, rw2, dng, cr2, crw, dcr, k25, kdc, mrw, pef, xf3, arw, sr2, srf, erf | LibRaw | - | yes | Common EXIF tags, GPS tags |
|
||||||
ttf,ttc,cff,woff,fnt,otf | Freetype2 | - | yes, `bmp` | Name & style |
|
ttf,ttc,cff,woff,fnt,otf | Freetype2 | - | yes, `bmp` | Name & style |
|
||||||
`text/plain` | *(none)* | yes | no | - |
|
`text/plain` | [libscan](https://github.com/simon987/libscan) | yes | no | - |
|
||||||
html, xml | *(none)* | yes | no | - |
|
html, xml | [libscan](https://github.com/simon987/libscan) | yes | no | - |
|
||||||
tar, zip, rar, 7z, ar ... | Libarchive | yes\* | - | no |
|
tar, zip, rar, 7z, ar ... | Libarchive | yes\* | - | no |
|
||||||
docx, xlsx, pptx | *(none)* | yes | if embedded | creator, modified_by, title |
|
docx, xlsx, pptx | [libscan](https://github.com/simon987/libscan) | yes | if embedded | creator, modified_by, title |
|
||||||
doc (MS Word 97-2003) | antiword | yes | yes | author, title |
|
doc (MS Word 97-2003) | antiword | yes | yes | author, title |
|
||||||
mobi, azw, azw3 | libmobi | yes | no | author, title |
|
mobi, azw, azw3 | libmobi | yes | no | author, title |
|
||||||
wpd (WordPerfect) | libwpd | yes | no | *planned* |
|
wpd (WordPerfect) | libwpd | yes | no | *planned* |
|
||||||
|
json, jsonl, ndjson | [libscan](https://github.com/simon987/libscan) | yes | - | - |
|
||||||
|
|
||||||
\* *See [Archive files](#archive-files)*
|
\* *See [Archive files](#archive-files)*
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ Scan options
|
|||||||
--mem-buffer=<int> Maximum memory buffer size per thread in MB for files inside archives (see USAGE.md). DEFAULT: 2000
|
--mem-buffer=<int> Maximum memory buffer size per thread in MB for files inside archives (see USAGE.md). DEFAULT: 2000
|
||||||
--read-subtitles Read subtitles from media files.
|
--read-subtitles Read subtitles from media files.
|
||||||
--fast-epub Faster but less accurate EPUB parsing (no thumbnails, metadata)
|
--fast-epub Faster but less accurate EPUB parsing (no thumbnails, metadata)
|
||||||
|
--checksums Calculate file checksums when scanning.
|
||||||
|
|
||||||
Index options
|
Index options
|
||||||
-t, --threads=<int> Number of threads. DEFAULT=1
|
-t, --threads=<int> Number of threads. DEFAULT=1
|
||||||
@ -129,6 +130,9 @@ Exec-script options
|
|||||||
To check if a media file can be parsed without *seek*, execute `cat file.mp4 | ffprobe -`
|
To check if a media file can be parsed without *seek*, execute `cat file.mp4 | ffprobe -`
|
||||||
* `--read-subtitles` When enabled, will attempt to read the subtitles stream from media files.
|
* `--read-subtitles` When enabled, will attempt to read the subtitles stream from media files.
|
||||||
* `--fast-epub` Much faster but less accurate EPUB parsing. When enabled, sist2 will use a simple HTML parser to read epub files instead of the MuPDF library. No thumbnails are generated and author/title metadata are not parsed.
|
* `--fast-epub` Much faster but less accurate EPUB parsing. When enabled, sist2 will use a simple HTML parser to read epub files instead of the MuPDF library. No thumbnails are generated and author/title metadata are not parsed.
|
||||||
|
* `--checksums` Calculate file checksums (sha1) when scanning files. This option does not cause any additional read
|
||||||
|
operations. Checksums are not calculated for all file types, unless the file is inside an archive. When enabled, duplicate
|
||||||
|
files are hidden in the web UI (this behaviour can be toggled in the Configuration page).
|
||||||
|
|
||||||
### Scan examples
|
### Scan examples
|
||||||
|
|
||||||
|
2
sist2-vue/dist/css/chunk-vendors.css
vendored
2
sist2-vue/dist/css/chunk-vendors.css
vendored
File diff suppressed because one or more lines are too long
2
sist2-vue/dist/css/index.css
vendored
2
sist2-vue/dist/css/index.css
vendored
File diff suppressed because one or more lines are too long
6
sist2-vue/dist/js/chunk-vendors.js
vendored
6
sist2-vue/dist/js/chunk-vendors.js
vendored
File diff suppressed because one or more lines are too long
2
sist2-vue/dist/js/index.js
vendored
2
sist2-vue/dist/js/index.js
vendored
File diff suppressed because one or more lines are too long
15
sist2-vue/package-lock.json
generated
15
sist2-vue/package-lock.json
generated
@ -23,7 +23,6 @@
|
|||||||
"vue-color": "^2.8.1",
|
"vue-color": "^2.8.1",
|
||||||
"vue-i18n": "^8.24.4",
|
"vue-i18n": "^8.24.4",
|
||||||
"vue-masonry-wall": "^0.3.2",
|
"vue-masonry-wall": "^0.3.2",
|
||||||
"vue-multiselect": "^2.1.6",
|
|
||||||
"vue-router": "^3.2.0",
|
"vue-router": "^3.2.0",
|
||||||
"vue-simple-suggest": "^1.11.1",
|
"vue-simple-suggest": "^1.11.1",
|
||||||
"vuex": "^3.4.0"
|
"vuex": "^3.4.0"
|
||||||
@ -13604,15 +13603,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-multiselect": {
|
|
||||||
"version": "2.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.6.tgz",
|
|
||||||
"integrity": "sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 4.0.0",
|
|
||||||
"npm": ">= 3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vue-observe-visibility": {
|
"node_modules/vue-observe-visibility": {
|
||||||
"version": "0.4.6",
|
"version": "0.4.6",
|
||||||
"resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz",
|
||||||
@ -26376,11 +26366,6 @@
|
|||||||
"vue-observe-visibility": "^0.4.6"
|
"vue-observe-visibility": "^0.4.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vue-multiselect": {
|
|
||||||
"version": "2.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.6.tgz",
|
|
||||||
"integrity": "sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w=="
|
|
||||||
},
|
|
||||||
"vue-observe-visibility": {
|
"vue-observe-visibility": {
|
||||||
"version": "0.4.6",
|
"version": "0.4.6",
|
||||||
"resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz",
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
"vue-color": "^2.8.1",
|
"vue-color": "^2.8.1",
|
||||||
"vue-i18n": "^8.24.4",
|
"vue-i18n": "^8.24.4",
|
||||||
"vue-masonry-wall": "^0.3.2",
|
"vue-masonry-wall": "^0.3.2",
|
||||||
"vue-multiselect": "^2.1.6",
|
|
||||||
"vue-router": "^3.2.0",
|
"vue-router": "^3.2.0",
|
||||||
"vue-simple-suggest": "^1.11.1",
|
"vue-simple-suggest": "^1.11.1",
|
||||||
"vuex": "^3.4.0"
|
"vuex": "^3.4.0"
|
||||||
|
@ -1,93 +1,95 @@
|
|||||||
<template>
|
<template>
|
||||||
<VueMultiselect
|
<div v-if="isMobile">
|
||||||
multiple
|
<b-form-select
|
||||||
label="name"
|
:value="selectedIndicesIds"
|
||||||
:value="selectedIndices"
|
@change="onSelect($event)"
|
||||||
:options="indices"
|
:options="indices" multiple :select-size="6" text-field="name"
|
||||||
:close-on-select="indices.length <= 1"
|
value-field="id"></b-form-select>
|
||||||
:placeholder="$t('indexPickerPlaceholder')"
|
</div>
|
||||||
@select="addItem"
|
<div v-else>
|
||||||
@remove="removeItem">
|
<b-list-group id="index-picker-desktop">
|
||||||
|
<b-list-group-item
|
||||||
<template slot="option" slot-scope="idx">
|
v-for="idx in indices"
|
||||||
<b-row>
|
@click="toggleIndex(idx)"
|
||||||
<b-col>
|
class="d-flex justify-content-between align-items-center list-group-item-action pointer">
|
||||||
<span class="mr-1">{{ idx.option.name }}</span>
|
<div class="d-flex">
|
||||||
<SmallBadge pill :text="idx.option.version"></SmallBadge>
|
<b-checkbox @change="toggleIndex(idx)" :checked="isSelected(idx)"></b-checkbox>
|
||||||
</b-col>
|
{{ idx.name }}
|
||||||
</b-row>
|
<span class="text-muted timestamp-text ml-2">{{ formatIdxDate(idx.timestamp) }}</span>
|
||||||
<b-row class="mt-1">
|
</div>
|
||||||
<b-col>
|
<b-badge class="version-badge">v{{ idx.version }}</b-badge>
|
||||||
<span>{{ formatIdxDate(idx.option.timestamp) }}</span>
|
</b-list-group-item>
|
||||||
</b-col>
|
</b-list-group>
|
||||||
</b-row>
|
</div>
|
||||||
</template>
|
|
||||||
|
|
||||||
</VueMultiselect>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import VueMultiselect from "vue-multiselect"
|
|
||||||
import SmallBadge from "./SmallBadge.vue"
|
import SmallBadge from "./SmallBadge.vue"
|
||||||
import {mapActions, mapGetters} from "vuex";
|
import {mapActions, mapGetters} from "vuex";
|
||||||
import {Index} from "@/Sist2Api";
|
|
||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
import {format} from "date-fns";
|
import {format} from "date-fns";
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
VueMultiselect,
|
|
||||||
SmallBadge
|
SmallBadge
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: true
|
loading: true,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
"indices", "selectedIndices"
|
"indices", "selectedIndices"
|
||||||
]),
|
]),
|
||||||
|
selectedIndicesIds() {
|
||||||
|
return this.selectedIndices.map(idx => idx.id)
|
||||||
|
},
|
||||||
|
isMobile() {
|
||||||
|
return window.innerWidth <= 650;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions({
|
...mapActions({
|
||||||
setSelectedIndices: "setSelectedIndices"
|
setSelectedIndices: "setSelectedIndices"
|
||||||
}),
|
}),
|
||||||
removeItem(val: Index): void {
|
onSelect(value) {
|
||||||
this.setSelectedIndices(this.selectedIndices.filter((item: Index) => item !== val))
|
this.setSelectedIndices(this.indices.filter(idx => value.includes(idx.id)));
|
||||||
},
|
|
||||||
addItem(val: Index): void {
|
|
||||||
this.setSelectedIndices([...this.selectedIndices, val])
|
|
||||||
},
|
},
|
||||||
formatIdxDate(timestamp: number): string {
|
formatIdxDate(timestamp: number): string {
|
||||||
return format(new Date(timestamp * 1000), "yyyy-MM-dd");
|
return format(new Date(timestamp * 1000), "yyyy-MM-dd");
|
||||||
|
},
|
||||||
|
toggleIndex(index) {
|
||||||
|
if (this.isSelected(index)) {
|
||||||
|
this.setSelectedIndices(this.selectedIndices.filter(idx => idx.id != index.id));
|
||||||
|
} else {
|
||||||
|
this.setSelectedIndices([index, ...this.selectedIndices]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isSelected(index) {
|
||||||
|
return this.selectedIndices.find(idx => idx.id == index.id) != null;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style src="vue-multiselect/dist/vue-multiselect.min.css"></style>
|
<style scoped>
|
||||||
|
.timestamp-text {
|
||||||
<style>
|
line-height: 24px;
|
||||||
.multiselect__option {
|
font-size: 80%;
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.multiselect__content-wrapper {
|
.version-badge {
|
||||||
overflow: hidden;
|
color: #222 !important;
|
||||||
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-black .multiselect__tags {
|
.list-group-item {
|
||||||
background: #37474F;
|
padding: 0.2em 0.4em;
|
||||||
border: 1px solid #616161 !important
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-black .multiselect__input {
|
#index-picker-desktop {
|
||||||
color: #dbdbdb;
|
overflow-y: auto;
|
||||||
background: #37474F;
|
max-height: 132px;
|
||||||
}
|
|
||||||
|
|
||||||
.theme-black .multiselect__content-wrapper {
|
|
||||||
border: none
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
@ -51,7 +51,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "git_hash.h"
|
#include "git_hash.h"
|
||||||
|
|
||||||
#define VERSION "2.11.2"
|
#define VERSION "2.11.3"
|
||||||
static const char *const Version = VERSION;
|
static const char *const Version = VERSION;
|
||||||
|
|
||||||
#ifndef SIST_PLATFORM
|
#ifndef SIST_PLATFORM
|
||||||
|
5
src/web/static_generated.c
vendored
5
src/web/static_generated.c
vendored
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user