X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=list.sh;h=55fe33176901c1c5b207b16f28e81a31f2f25edc;hb=fa328da5585a0bfa0b6c08b3c79d529af06aada8;hp=25822e48408e32a124405fe65a42378f350b348a;hpb=d5eed6ee7e2ff547dd06023838b6aed031ba8174;p=serve0 diff --git a/list.sh b/list.sh index 25822e4..55fe331 100644 --- a/list.sh +++ b/list.sh @@ -10,7 +10,7 @@ list_item() { if [ "$type" = dir ]; then name="${meta%% *}"; display="$(HTML "$name")"; link="$(URL "$ITEM/$name")" - printf '[a .list .dir href="%s" %s]' "${link}?${w_reflink#*?}" "$name" + printf '[a .list .dir href="%s" %s]' "${link}?${w_refuri#*\?}" "$name" return 0 fi @@ -25,18 +25,20 @@ list_item() { name="$(list_fullname "$(UNSTRING "${name%${CR}}")")" fi if [ -f "$_DATA/$ITEM/$name" ]; then - display="$(HTML "$name")" link="$(URL "$ITEM/$name")" + name="$(HTML "$ITEM/$name")" printf '[div .list .file [a href="%s" [img src="%s?a=thumbnail"]][label %s] [span .time %i:%imin] [span .dim %ix%i] %s [checkbox "select" "%s" id="select_%s"][label for="select_%s" +] ]' \ - "$link" "$link" "$name" \ + "$link" "$link" "${name##*/}" \ "$((length / 60))" "$((length % 60))" \ "$width" "$height" \ - "$(UNSTRING "${tags#tags=}" |tr , '\0' |xargs -r0 printf ' [span .tag %s]')" \ - "$link" "$link" "$link" + "$(printf '%s\n' "${tags#tags=}" \ + | sed -r "$UNSTRING"' s;^;,;; s;,+;,;g; s;,$;;; + :X s;,([^,]+)(,|$); [span .tag \1]\2;; tX;' + )" "$name" "$link" "$link" else printf 'Canning record for nonexist file: %s\n' "$name" >&2 # meta_purge "$_DATA/$ITEM/$name" @@ -99,29 +101,39 @@ list_order(){ printf '%i %s %s\n' \ "$(stat -c %Y "$fn")" "${fm% *}" "$fn" done \ - | sort -n -k1 |cut -f2- |sed 's;^;metalong\t;;' + | sort -rn -k1 |cut -f2- |sed 's;^;metalong\t;;' fi } list_filemeta(){ - local meta base cbase fm + local meta base cbase fm cachename base="$1" meta="$_DATA/$ITEM/$base/.index/meta" - cbase="$(STRING "$base")" meta_dir "$_DATA/$ITEM/$base" - grep -axE '[0-9]+ [0-9]+ [0-9]+ tags=[^ ]* comment=[^ ]* .+' "$meta" \ - | while read -r fm; do - printf '%s %s/%s\n' "${fm% *}" "$cbase" "${fm##* }" - done + cachename="$(printf '%s\n' "$mode" "$FILTER" "$SEARCH" "$ORDER" |sha1sum)" + cachename="$_DATA/$ITEM/.index/${cachename% -}.cache" + + if [ "$cachename" -nt "$meta" ] 2>&-; then + cat "$cachename" + else + cbase="$(STRING "$base")" + grep -axE '[0-9]+ [0-9]+ [0-9]+ tags=[^ ]* comment=[^ ]* .+' "$meta" \ + | while read -r fm; do + printf '%s %s/%s\n' "${fm% *}" "$cbase" "${fm##* }" + done \ + | list_filter \ + | list_order \ + | { [ -d "${meta%meta}" ] && tee "$cachename" || cat; } + fi } list_items() { local mode meta mode="$(COOKIE mode |grep -m1 -axE 'index|browse' || printf browse )" - + if [ "$mode" = browse ]; then - [ "$ITEM" ] && printf '..\n' + [ "$ITEM" ] && printf 'dir\t..\n' (cd "$_DATA/$ITEM"; find ./ -type d \! -name .index -mindepth 1 -maxdepth 1 \ ) | cut -d/ -f2- | sort |sed 's;^;dir\t;;' @@ -136,9 +148,10 @@ list_items() { } list_paginate() { - local page i c n end + local page i c n end qry page="$(GET p |grep -axE '[0-9]+' || printf 1)"; c=1 end=$((page + LISTSIZE)) + qry="${w_refuri#*\?}"; qry="${qry#p=*&}" printf '[div .itemlist ' while read -r i; do @@ -150,7 +163,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))&$qry" "$n" + "?p=$(( (n - 1) * LISTSIZE + 1))&${qry}" "$n" done printf ']' } @@ -176,8 +189,6 @@ printf 'Content-Type: text/html;charset=utf-8\r\n\r\n' printf ' [form method=POST action="?a=multitag"' list_items \ - | list_filter \ - | list_order \ | list_paginate printf ' [div #editing