X-Git-Url: http://git.plutz.net/?p=serve0;a=blobdiff_plain;f=list.sh;h=d729c6c34a8c35c11a590752bc35378c62b3b8ba;hp=248027fb71a10b0134508d55b301d6d0ae8c4a0c;hb=e141ec4a5b7d0ec0da9fd9e3860bd003ad2d758e;hpb=7965f9cf6aee17c0c0dc0c948171ce9e125f7a46 diff --git a/list.sh b/list.sh index 248027f..d729c6c 100644 --- a/list.sh +++ b/list.sh @@ -11,7 +11,7 @@ list_item() { if [ -d "$_DATA/$ITEM/$1" ]; then printf '[a .list .dir href="%s" %s]' "${path}?${qry}" "$name" - else + elif [ -f "$_DATA/$ITEM/$1" ]; then read -r length width height tags comment n <<-EOF $(meta_info "$_DATA/$ITEM/$1") EOF @@ -25,6 +25,9 @@ list_item() { "$width" "$height" \ "$(UNSTRING "${tags#tags=}" |tr , '\0' |xargs -r0 printf ' [span .tag %s]')" \ "$path" "$path" "$path" + else + printf 'Canning record for nonexist file: %s\n' "$1" >&2 + meta_purge "$_DATA/$ITEM/$1" fi } @@ -48,6 +51,15 @@ list_directories(){ | tail -n1 )" +list_fullname(){ + sn="$1" + [ ! "${sn%%*/*}" ] && base="${sn%/*}" || base=. + file="$(printf '%s' "$_DATA/$ITEM/$sn".*)" + file="${file##*/}" + [ -e "$_DATA/$ITEM/$base/${file}" ] \ + && printf '%s\n' "${base}/${file}" +} + list_filemeta(){ local meta base f fn file base="$1" @@ -67,13 +79,9 @@ list_filemeta(){ grep -viE "$(STRING "${SEARCH#!}")" else grep -iE "$(STRING "${SEARCH}")" - fi |cut -f6 \ - | UNSTRING \ + fi |cut -f6 | UNSTRING \ | while read -r fn; do - file="$(printf '%s' "$_DATA/$ITEM/$base/${fn%${CR}}".*)" - file="${file##*/}" - [ -e "$_DATA/$ITEM/$base/${file}" ] \ - && printf '%s\n' "${base}/${file}" + printf '%s\n' "${base}/${fn%${CR}}" done } @@ -86,6 +94,15 @@ list_index(){ done } +list_dateorder(){ + while read -r sn; do + list_fullname "$sn" + done \ + | xargs -rd'\n' stat -c '%Y %n' \ + | sort -rn |cut -d/ -f2- \ + | sed -r 's;\.[^\.]*$;;;' +} + list_items() { local mode mode="$(COOKIE mode |grep -m1 -xE 'index|browse' || printf browse )" @@ -94,16 +111,12 @@ list_items() { if [ "$mode" = browse -a "$ORDER" = Date ]; then list_directories - list_filemeta . \ - | xargs -rd'\n' stat -c '%Y %n' \ - | sort -rn |cut -d/ -f2- + list_filemeta . |list_dateorder + elif [ "$mode" = index -a "$ORDER" = Date ]; then + list_index |list_dateorder elif [ "$mode" = browse ]; then list_directories list_filemeta . - elif [ "$mode" = index -a "$ORDER" = Date ]; then - list_index \ - | xargs -rd'\n' stat -c '%Y %n' \ - | sort -rn | cut -d/ -f2- elif [ "$mode" = index ]; then list_index fi @@ -117,7 +130,7 @@ list_paginate() { printf '[div .itemlist ' while read -r i; do [ $c -ge $page -a $c -lt $end ] \ - && list_item "$i" + && list_item "$(list_fullname "$i")" c=$((c + 1)) done printf ']' @@ -125,7 +138,7 @@ list_paginate() { printf '[div .pagination' for n in $( seq 1 $((c / LISTSIZE + 1)) ); do printf '[a .page href="%s" %s]' \ - "?p=$(( (n - 1) * LISTSIZE + 1))" "$n" + "?p=$(( (n - 1) * LISTSIZE + 1))&$qry" "$n" done printf ']' }