--- scripts/pgallery/src/pgallery.sh 2012/08/29 11:21:41 1.11 +++ scripts/pgallery/src/pgallery.sh 2017/12/07 14:24:00 1.28 @@ -1,13 +1,16 @@ -#!/bin/sh +#!/usr/local/libexec/pgallerysh # -# THE BEER-WARE LICENSE 2012 +# THE BEER-WARE LICENSE 2012,13 +# # wrote this file. As long as you retain this notice you # can do whatever you want with this stuff. If we meet some day, and you think # this stuff is worth it, you can buy me a beer in return Aron Schlesinger # -# $Paefchen: scripts/pgallery/src/pgallery.sh,v 1.10 2012/08/29 10:52:35 as Exp $ +# $Paefchen: scripts/pgallery/src/pgallery.sh,v 1.27 2013/04/03 08:14:52 as Exp $ # +. /usr/local/libexec/libpgallery + ARG_TITLE="PGallery" ARG_FILES= ARG_FILETYPES="jpg jpeg png gif tif tiff" @@ -24,16 +27,14 @@ ARG_MAILTO="" ARG_MAILFROM="PGallery <${USER}@${HOST}>" ARG_URL= ARG_EXIF="0x920a 0x829d 0x829a ISO 0x8827 / 0x010f - 0x0110" +ARG_INDEXIMG= +ARG_NOINDEX= +ARG_STARTTS= +ARG_ENDTS= +ARG_LINK= +ARG_NAVI=0 -BIN_CONVERT="/usr/local/bin/convert" -BIN_EXIFAUTOTRAN="/usr/local/bin/exifautotran" -BIN_IMGINFO="/usr/local/bin/imginfo" -BIN_SENDMAIL="/usr/sbin/sendmail" -BIN_EXIFTRAN="/usr/local/bin/exiftran" -BIN_EXIF="/usr/local/bin/exif" - MKAKEFILE=".htmakefile" -VERSION="pgallery-1.2" # # usage() @@ -42,10 +43,10 @@ usage() { cat <] | [-s ] ) [-d ] [-n ] - [-t ] [-u ] + [-t ] [-u ] [-H ] [-b ] [-c ] [-l link] [-e ] [-i ] [-C ] [-F ] [-T ] - [-U] | -h | -v + [-U] [-w] | -h | -v Options: -b size size from big images in pixel (default: $ARG_BIGSIZE) -c quality quality from big images 0-100% (default: $ARG_BIGQALITY) @@ -55,7 +56,9 @@ Options: -f files gallery images -h this page -i name index file name (default: $ARG_INDEX) + -x ignore gallery on index -l url gallery link + -m image image for pgalleryindex. default the first image -n name page title (default: $ARG_TITLE) -s suffix list of suffix. if no \`\`-f'' defined, used to find images in \`\`-d'' directoy. case insensitive @@ -63,13 +66,15 @@ Options: -t size size from thumbnail images in pixel (default: $ARG_TNSIZE) -u quality quality from thumbnail images 0-100% (default: $ARG_BIGQALITY) -v print version + -w enable navi width link in the overview -C copyright copyright (html) string (default: $ARG_COPYRIGHT) -F from mail sender (default: $ARG_MAILFROM) + -L link optional home link -I file info text file for pgallery. info file paras prefered. the syntax of the file is MAKE(1) supported variable: TITLE COPYRIGHT INDEX FILETYPES TNSIZE URL TNQALITY BIGSIZE BIGQALITY MAILTO MAILFROM - EXIF + EXIF INDEXIMG LINK NAVI NOINDEX -T mailto send update infos to this address. if not set, no mail delivery -U no update, new calculation of all images. normally only new and modified images will calculated @@ -77,404 +82,25 @@ USAGE exit } -# -# get_my_path() -# -get_my_path() -{ - current=$(pwd) - cd $(dirname $0) - echo $(pwd)/$(basename $0) - cd "$current" -} - -# -# html_header() -# -html_header() -{ - cat < - - - $ARG_TITLE - - - - -HTML -} - -# -# html_footer() -# -html_footer() -{ - cat < -HTML -} - -# -# html_tn() -# -html_tn() -{ - tn=$1 - link=$2 - - info=$($BIN_IMGINFO -f $tn) - width=$(echo $info | awk '{print $3}') - height=$(echo $info | awk '{print $4}') - top=$(($(($ARG_TNSIZE - $height)) / 2)) - - cat < - - $tn - - -HTML -} - -# -# html_img() -# -html_img() -{ - orig=$1 - img=$2 - link=$3 - linkb=$4 - linkn=$5 - - info=$($BIN_IMGINFO -f $img) - width=$(echo $info | awk '{print $3}') - height=$(echo $info | awk '{print $4}') - - desc=$(get_exif_desc $orig) - if [ "$desc" != "" ] +# first find image dir +is_dir=0 +for arg in $* +do + if [ $is_dir -eq 1 ] then - desc="
$desc
" + ARG_DIR="$arg" + break fi + test $arg = -d && is_dir=1 +done - if [ "$linkb" != "" ] - then - hlinkb="zurück" - olinkb="" - fi +# load save args +if [ -f "$ARG_DIR/$ARGFILE" ] +then + echo "load save settings" + . "$ARG_DIR/$ARGFILE" +fi - if [ "$linkn" != "" ] - then - hlinkn="weiter" - olinkn="" - fi - - cat < - -
- $img -
- $desc -
-
$(get_exif_info $orig)
-
$ARG_TITLE $ARG_COPYRIGHT
-
-
- $olinkb - $olinkn -
- -HTML -} - -# -# err -# -err() -{ - echo "$1" >&2 - exit 1 -} - -# -# mysendmail() -# -mysendmail() -{ - subject=$1 - ( - cat < /dev/null | iconv -t ISO-8859-1 -f UTF-8 | while read line - do - echo "$line
" - done -} - -# -# get_exif_value() -# -get_exif_value() -{ - img=$1 - hex=$2 - $BIN_EXIFTRAN -d $img | grep $hex | sed -E 's/^.{45}//' -} - -# -# get_exif_info() -# -get_exif_info() -{ - img=$1 - exifinfo= - for exif in $ARG_EXIF - do - if echo $exif | grep -q -E '0x[[:alnum:]]{4}' - then - exifinfo="$exifinfo$(get_exif_value $img $exif) " - else - exifinfo="$exifinfo$exif " - fi - done - echo $exifinfo | sed -e 's/ mm /mm /' -e 's/ sec./s/' -e 's/ ISO / ISO/' -} - -# -# is_in_list() -# -is_in_list() -{ - list=$1 - value=$2 - for entry in $list - do - test "$entry" = "$value" && return 0 - done - return 1 -} - # parse args while [ "$1" != "" ] do @@ -519,6 +145,9 @@ do -F) ARG_MAILFROM=$1 shift;; + -L) + ARG_LINK=$1 + shift;; -I) ARG_INFOFILE=$1 shift;; @@ -530,18 +159,26 @@ do -v) echo $VERSION exit;; + -w) + ARG_NAVI=1;; + -x) + ARG_NOINDEX=1;; *) echo "unknown argument $arg" exit esac done +# go to gallery directory +MY=$(get_my_path) +cd "$ARG_DIR" || exit 1 + # parese info file if [ "$ARG_INFOFILE" != "" ] then test -f $ARG_INFOFILE || err "info file not found \`\`$ARG_INFOFILE''" for n in TITLE COPYRIGHT INDEX FILETYPES TNSIZE TNQALITY BIGSIZE \ - BIGQALITY MAILTO MAILFROM URL EXIF + BIGQALITY MAILTO MAILFROM URL EXIF INDEXIMG NOINDEX LINK NAVI do v=$(make -f $ARG_INFOFILE -V$n) test "$v" = "" && continue @@ -549,9 +186,12 @@ then done fi -# go to gallery directory -MY=$(get_my_path) -cd "$ARG_DIR" || exit 1 +# paras from iso to utf-8 +for n in $(set | awk -F= '{print $1}') +do + echo "$n" | grep -q '^ARG_' || continue + eval "$n=\"\$(echo \"\$$n\" | $BIN_ICONV -f ISO-8859-1 -t UTF-8)\"" +done # fix url if [ "$ARG_URL" != "" ] @@ -568,22 +208,48 @@ then match="$match *.$(echo $type | tr '[:lower:]' '[:upper:]')" match="$match *.$(echo $type | tr '[:upper:]' '[:lower:]')" done - ARG_FILES=$(cd $ARG_DIR && ls $match 2>/dev/null) + FLIST=$(ls $match 2>/dev/null) +else + FLIST="$ARG_FILES" fi -# Filter big and thumbnails +# Filter big, thumbnails and curipted images echo -n "find images" -FLIST= -for file in $ARG_FILES +FLISTF= +for file in $FLIST do test $(echo $file | grep -E '\.(tn|big)\.jpg$') && continue - FLIST="$FLIST $file" + test $($BIN_JPEGINFO $file | grep -Eq 'WARNING|ERROR') && continue + FLISTF="$FLISTF $file" echo -n " $file" done -echo +echo +FLIST="$FLISTF" test $(echo $FLIST | wc -w) -eq 0 && err "error: no image found in \`\`$ARG_DIR''" +# use exif createtime to order images +FLIST=$( + ( + for file in $FLIST + do + echo "$(get_exif_ts $file) $file" + done + ) | sort -n | awk '{print $2}' +) + +# if no master image, we use the first one +test "$ARG_INDEXIMG" = "" && ARG_INDEXIMG=$(echo $FLIST | awk '{print $1}') + +# find start and end ts +ARG_STARTTS=$(get_exif_ts $(echo $FLIST | awk '{print $1}')) +# XXX: +if [ "$ARG_STARTTS" = "-1" ] +then + ARG_STARTTS=$(get_exif_ts $(echo $FLIST | awk '{print $2}')) +fi +ARG_ENDTS=$(get_exif_ts $(echo $FLIST | awk '{print $NF}')) + # find new and to update images FLIST_NEW= FLIST_UPDATE= @@ -610,6 +276,16 @@ echo "tns: $targets" >> $MKAKEFILE FLIST_UPDATE=$(make -f $MKAKEFILE) rm $MKAKEFILE +# save args +test -f $ARGFILE && rm $ARGFILE +echo "save settings" +set | while read n +do + echo "$n" | grep -q '^ARG_' || continue + echo "$n" | grep -q '^ARG_UPDATE' && continue + echo "$n" >> $ARGFILE +done + # update and no new and update images found if [ $ARG_UPDATE -eq 1 -a "$FLIST_NEW" = "" -a "$FLIST_UPDATE" = "" ] then @@ -656,25 +332,35 @@ make -f $MKAKEFILE rm $MKAKEFILE # create html index -index="" -for file in $FLIST -do - tn="${file}.tn.jpg" - imglink="${file}.html" - index="$index $(html_tn $tn $imglink)" -done echo create html index ( html_header - echo $index + + startdate= + test $ARG_STARTTS -ne -1 && startdate=$(date -r $ARG_STARTTS "+%d.%m.%Y") + enddate= + test $ARG_ENDTS -ne -1 && enddate=$(date -r $ARG_ENDTS "+%d.%m.%Y") + date= + test "$startdate" != "" && date="$startdate" + test "$enddate" != "$startdate" && date="$date - $enddate" + link= + test "$ARG_LINK" != "" && link="overview" + html_title "$ARG_TITLE" "$link" "$date" + + for file in $FLIST + do + tn="${file}.tn.jpg" + imglink="${file}.html" + html_tn $tn $imglink + done echo "
" echo "
$ARG_TITLE $ARG_COPYRIGHT
" html_footer ) > $ARG_INDEX # create single html files -#test $ARG_UPDATE -eq 1 && FLIST="$FLIST_NEW $FLIST_UPDATE" i=0 +all=$(echo $FLIST | wc -w) echo -n "create single html files " for file in $FLIST do @@ -701,11 +387,19 @@ do echo -n . ( html_header - html_img $file $big $ARG_INDEX "$linkb" "$linkn" + html_img $file $i $all $big $ARG_INDEX "$linkb" "$linkn" html_footer ) > $imglink done echo + +# .htaccess +if [ -f .htaccess ] +then + grep -q 'AddCharset UTF-8 .html' < .htaccess || echo "AddCharset UTF-8 .html" >> .htaccess +else + echo "AddCharset UTF-8 .html" > .htaccess +fi test "$ARG_MAILTO" = "" && exit 0