aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-06-19 15:23:09 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-07-06 02:45:35 +0200
commit2da827c9f8c2f75f58c6e3f2e0d746b752ae2114 (patch)
treed82fbb72bfbee7c5323e1628954530ce2f97b406
parent9cc9d80008ab9398c62e54c4d80794074fa45163 (diff)
Rely on make(1)thumbnail-entr
-rwxr-xr-xtngen165
-rwxr-xr-xwatchdir55
2 files changed, 139 insertions, 81 deletions
diff --git a/tngen b/tngen
index 6b871de..c2626e7 100755
--- a/tngen
+++ b/tngen
@@ -4,73 +4,132 @@ set -e
usage()
{
- echo "$0 [-s <size>] [-h] -d <dir> <path>"
+ echo "$0 [-s <size>] [-j <jobs>] [-h] <path>"
}
SIZE=96
-while getopts s:d:h arg
+while getopts j:s:h arg
do
- case $arg in
- d) DIR="$OPTARG"
- ;;
- s) SIZE="$OPTARG"
- ;;
- h) usage
- exit 0
- ;;
- ?) usage >&2
- exit 1
- ;;
- esac
+ case $arg in
+ j) JOBS="$OPTARG"
+ ;;
+ s) SIZE="$OPTARG"
+ ;;
+ h) usage
+ exit 0
+ ;;
+ ?) usage >&2
+ exit 1
+ ;;
+ esac
done
-if [ -z "$DIR" ]
-then
- usage >&2
- exit 1
-fi
-
shift $(($OPTIND - 1))
if [ $# != 1 ]; then
- usage >&2
- exit 1
+ usage >&2
+ exit 1
fi
-F="$1"
+DIR="$1"
gen()
{
- IN="$1"
- OUT="$2"
-
- if [ -z "$OUT" ]
- then
- echo Expected output filename >&2
- return 1
- fi
-
- mkdir -p "$(dirname "$OUT")"
-
- if convert -thumbnail x$SIZE "$IN" "$OUT"
- then
- echo Created $OUT
- else
- echo Failed to create $OUT >&2
- fi
+ IN="$1"
+ OUT="$2"
+
+ if [ -z "$OUT" ]
+ then
+ echo Expected output filename >&2
+ return 1
+ fi
+
+ mkdir -p "$(dirname "$OUT")"
+
+ if convert -thumbnail x$SIZE "$IN" "$OUT"
+ then
+ echo Created $OUT
+ else
+ echo Failed to create $OUT >&2
+ fi
}
-while read f; do
- if [ "$f" != "" ]
- then
- THUMBNAIL=$(echo "$f" | sed "s,$DIR/user/,$DIR/thumbnails/,")
- gen "$f" "$THUMBNAIL"
- fi
-done <<-EOF
- $(find "$F" -type f \
- -a -iname '*.jpeg' \
- -o -iname '*.jpg' \
- -o -iname '*.png' \
- -o -iname '*.jpeg')
-EOF
+scan()
+{
+ while read d
+ do
+ if [ -n "$d" ]
+ then
+ scan "$d"
+ fi
+
+ TDIR="$(echo "$1" | sed "s,$DIR/user,$DIR/thumbnails,")"
+
+ eval find \"$1\"/* -prune >/dev/null || return 0
+
+ mkdir -p "$TDIR"
+
+ MK="$(echo "$TDIR/Makefile")"
+
+ cat <<-"EOF" > "$MK"
+ .POSIX:
+ EOF
+
+ echo "DIRS=\\" >> "$MK"
+
+ eval find \"$TDIR\"/* -prune -type d > "$TDIR/.dirs"
+
+ while read dir
+ do
+ D="$(echo "$dir" | sed "s, ,\\\\ ,g")"
+ echo "$D \\" >> "$MK"
+ done < "$TDIR/.dirs"
+
+ echo >> "$MK"
+
+ echo "DEPS=\\" >> "$MK"
+
+ eval find \"$1\"/* -prune -type f \
+ -a -iname '*.jpeg' \
+ -o -iname '*.jpg' \
+ -o -iname '*.png' \
+ -o -iname '*.jpeg' > "$TDIR/.files"
+
+ while read f
+ do
+ THUMBNAIL="$(echo "$f" | sed "s,$DIR/user/,$DIR/thumbnails/," \
+ | sed "s, ,\\\\ ,g")"
+ echo "$THUMBNAIL \\" >> "$MK"
+ done < "$TDIR/.files"
+
+ echo >> "$MK"
+ echo 'all: $(DEPS) $(DIRS)' >> "$MK"
+ echo 'FORCE:' >> "$MK"
+
+ while read dir
+ do
+ D="$(echo "$dir" | sed "s, ,\\\\ ,g")"
+ echo "$D: FORCE" >> "$MK"
+ printf '\t+cd $@ && $(MAKE)\n' >> "$MK"
+ done < "$TDIR/.dirs"
+
+ while read f
+ do
+ THUMBNAIL="$(echo "$f" | sed "s,$DIR/user/,$DIR/thumbnails/," \
+ | sed "s, ,\\\\ ,g")"
+ EF=$(echo "$f" | sed "s, ,\\\\ ,g")
+ echo $THUMBNAIL: $EF >> "$MK"
+ printf '\tconvert -thumbnail x%d "$<" "$@" || :\n' $SIZE >> "$MK"
+ done < "$TDIR/.files"
+
+ echo "Successfully generated $MK"
+ done <<-EOF
+ $(eval find \"$1\"/* -prune -type d || return 0)
+ EOF
+}
+
+echo Generating Makefiles...
+scan "$DIR/user"
+
+cd "$DIR/thumbnails" && make ${JOBS:+-j$JOBS}
diff --git a/watchdir b/watchdir
index fe215b2..701ed33 100755
--- a/watchdir
+++ b/watchdir
@@ -2,51 +2,50 @@
usage()
{
- echo "$0 [-s <size>] [-r] [-h] [-d <subdir>] <dir>"
+ echo "$0 [-s <size>] [-r] [-h] [-j <jobs>] <dir>"
}
REGEN=0
SIZE=96
-while getopts rs:d:h arg
+while getopts rj:s:h arg
do
- case $arg in
- r) REGEN=1
- ;;
- s) SIZE="$OPTARG"
- ;;
- h) usage
- exit 0
- ;;
- d) SUBDIR="$OPTARG"
- ;;
- ?) usage >&2
- exit 1
- ;;
- esac
+ case $arg in
+ j) JOBS="$OPTARG"
+ ;;
+ r) REGEN=1
+ ;;
+ s) SIZE="$OPTARG"
+ ;;
+ h) usage
+ exit 0
+ ;;
+ ?) usage >&2
+ exit 1
+ ;;
+ esac
done
shift $(($OPTIND - 1))
if [ $# != 1 ]; then
- usage >&2
- exit 1
+ usage >&2
+ exit 1
fi
DIR="$1"
[ "$REGEN" -eq 1 ] && "$(dirname $0)/tngen" \
- ${SIZE:+-s$SIZE} \
- -d "$DIR" \
- "$DIR/user"
+ ${SIZE:+-s$SIZE} \
+ ${JOBS:+-j$JOBS} \
+ "$DIR"
while :
do
- F="$(inotifywait -e modify,move,create,delete \
- --format "%w%f" -qr "$DIR/user/")"
- sleep 1 # TODO: revisit this
- "$(dirname $0)/tngen" \
- ${SIZE:+-s$SIZE} \
- -d "$DIR" \
- "$F"
+ F="$(inotifywait -e modify,move,create,delete \
+ --format "%w%f" -qr "$DIR/user/")"
+ "$(dirname $0)/tngen" \
+ ${SIZE:+-s$SIZE} \
+ ${JOBS:+-j$JOBS} \
+ "$DIR"
done