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 ] [-j ] [-h] -d " +} + +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 ] [-h] -d " + echo "$0 [-s ] [-j ] [-h] -d " } 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" + IN="$1" + OUT="$2" - if [ -z "$OUT" ] - then - echo Expected output filename >&2 - return 1 - fi + if [ -z "$OUT" ] + then + echo Expected output filename >&2 + return 1 + fi - mkdir -p "$(dirname "$OUT")" + mkdir -p "$(dirname "$OUT")" - if convert -thumbnail x$SIZE "$IN" "$OUT" - then - echo Created $OUT - else - echo Failed to create $OUT >&2 - fi + 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 + + "$(dirname "$0")"/mkgen -d "$ROOT" "$1" + done <<-EOF + $(eval find \"$1\"/* -prune -type d || return 0) + 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 ] [-r] [-h] [-d ] " + echo "$0 [-s ] [-r] [-h] [-j ] " } 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