aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmkgen89
-rwxr-xr-xtngen109
-rwxr-xr-xwatchdir57
3 files changed, 176 insertions, 79 deletions
diff --git a/mkgen b/mkgen
new file mode 100755
index 0000000..fd7870a
--- /dev/null
+++ b/mkgen
@@ -0,0 +1,89 @@
+#! /bin/sh
+
+usage()
+{
+ echo "$0 [-s <size>] [-j <jobs>] [-h] -d <root> <path>"
+}
+
+SIZE=96
+
+while getopts d:s:h arg
+do
+ case $arg in
+ d) ROOT="$OPTARG"
+ ;;
+ s) SIZE="$OPTARG"
+ ;;
+ h) usage
+ exit 0
+ ;;
+ ?) usage >&2
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z "$ROOT" ]; then
+ usage >&2
+ exit 1
+fi
+
+shift $(($OPTIND - 1))
+
+if [ $# != 1 ]; then
+ usage >&2
+ exit 1
+fi
+
+TDIR="$(echo "$1" | sed "s,$ROOT/user,$ROOT/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,$ROOT/user/,$ROOT/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,$ROOT/user/,$ROOT/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"
diff --git a/tngen b/tngen
index 6b871de..086a0b3 100755
--- a/tngen
+++ b/tngen
@@ -4,73 +4,80 @@ set -e
usage()
{
- echo "$0 [-s <size>] [-h] -d <dir> <path>"
+ echo "$0 [-s <size>] [-j <jobs>] [-h] -d <root> <path>"
}
SIZE=96
-while getopts s:d:h arg
+while getopts d: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
+ d) ROOT="$OPTARG"
+ ;;
+ j) JOBS="$OPTARG"
+ ;;
+ s) SIZE="$OPTARG"
+ ;;
+ h) usage
+ exit 0
+ ;;
+ ?) usage >&2
+ exit 1
+ ;;
+ esac
done
-if [ -z "$DIR" ]
-then
- usage >&2
- exit 1
+if [ -z "$ROOT" ]; 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
+}
+
+scan()
+{
+ while read d
+ do
+ if [ -n "$d" ]
+ then
+ scan "$d"
+ fi
+
+ "$(dirname "$0")"/mkgen -d "$ROOT" "$1"
+ done <<-EOF
+ $(eval find \"$1\"/* -prune -type d || return 0)
+ EOF
}
-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
+echo Generating Makefiles...
+scan "$DIR"
+
+cd "$ROOT/thumbnails" && make ${JOBS:+-j$JOBS}
diff --git a/watchdir b/watchdir
index fe215b2..61eb715 100755
--- a/watchdir
+++ b/watchdir
@@ -2,51 +2,52 @@
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} \
+ -d "$DIR" \
+ "$DIR/user"
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} \
+ -d "$DIR" \
+ "$(dirname "$F")"
done