-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathnsxiv-thumb-bsd
executable file
·46 lines (38 loc) · 1.26 KB
/
nsxiv-thumb-bsd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env sh
set -e
OPENER="${OPENER:-"xdg-open"}"
CACHEDIR="${NSXIV_THUMB_CACHE_DIR:-"${XDG_CACHE_HOME:-"$HOME/.cache"}/nsxiv-extra/nsxiv-thumb"}"
# extension of thumbnails. can be jpg or png.
EXT="jpg"
[ "$#" -gt 0 ] && {
cd "$1" || exit 1
}
trap 'rm -rf -- "$tmpdir"' TERM INT EXIT HUP
mkdir -p -- "$CACHEDIR"
! command -v mktemp > /dev/null 2>&1 \
|| ! tmpdir="$(mktemp -d)" \
|| [ -z "$tmpdir" ] \
&& {
tmpdir="${TMPDIR:-/tmp}/nsxiv_$$"
mkdir -p -- "$tmpdir"
}
find '.' \( -type f -o -type l \) -print \
| while IFS= read -r file; do
file="${file##./}"
[ "$file" != "${file##*/}" ] && continue
realpath="$(stat -f "%R" -- "$file")"
case "$(file -b --mime-type -- "$realpath")" in
video/*) :;;
*) exit 0;;
esac
hash="$(stat -f "%T%i%N%z%B%m" -- "$realpath" | md5 | cut -d" " -f1)"
thumbfl="$CACHEDIR/$hash.$EXT"
[ -f "$thumbfl" ] || ffmpegthumbnailer -i "$file" -o "$thumbfl" -m -s 384 2> /dev/null
cp -- "$thumbfl" "$tmpdir/$file.$EXT"
done
{ nsxiv -otp -- "$tmpdir"; rm -rf -- "${tmpdir:?}" > /dev/null; } \
| sed "s|\.$EXT$||;s|^.*/||" \
| sort \
| while IFS= read -r file; do
"$OPENER" ./"$file"
done