From 7965f9cf6aee17c0c0dc0c948171ce9e125f7a46 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Wed, 18 Jul 2018 01:06:37 +0200 Subject: [PATCH] speed and pipelining improvements --- list.sh | 103 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/list.sh b/list.sh index d622834..248027f 100644 --- a/list.sh +++ b/list.sh @@ -6,11 +6,11 @@ list_item() { local name path length width height tags comment n name="$(HTML "$1")" - path="$(URL "${ITEM}/${1}")" + path="$(URL "$ITEM/$1")" + qry=$(HTML "$QUERY_STRING") if [ -d "$_DATA/$ITEM/$1" ]; then - printf '[a .list .dir href="%s?%s" %s]' \ - "$path" "$(HTML "$QUERY_STRING")" "$name" + printf '[a .list .dir href="%s" %s]' "${path}?${qry}" "$name" else read -r length width height tags comment n <<-EOF $(meta_info "$_DATA/$ITEM/$1") @@ -51,22 +51,29 @@ list_directories(){ list_filemeta(){ local meta base f fn file base="$1" - meta="$1/.index/meta" + meta="$_DATA/$ITEM/$base/.index/meta" meta_dir "$_DATA/$ITEM/$base" - if [ "$FILTER" ]; then - sed -nr "$list_fex" "$_DATA/$ITEM/$meta" + if [ $ORDER = Name ]; then + sort -k6 "$meta" + elif [ $ORDER = Length ]; then + sort -n "$meta" + else + cat "$meta" + fi \ + | if [ "$FILTER" ]; then + sed -nr "$list_fex" elif [ "${SEARCH#!}" != "${SEARCH}" ]; then - grep -viE "$(STRING "${SEARCH#!}")" "$_DATA/$ITEM/$meta" + grep -viE "$(STRING "${SEARCH#!}")" else - grep -iE "$(STRING "${SEARCH}")" "$_DATA/$ITEM/$meta" - fi |cut -f1,6- \ - | while f="$(line)"; do - fn="$(UNSTRING "${f#* }")"; fn="${fn%${CR}}"; - file="$(printf '%s\n' "$_DATA/$ITEM/$base/${fn}".*)" + grep -iE "$(STRING "${SEARCH}")" + 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 %s\n' "${f%% *}" "${base}/${file}" + && printf '%s\n' "${base}/${file}" done } @@ -87,46 +94,36 @@ list_items() { if [ "$mode" = browse -a "$ORDER" = Date ]; then list_directories - list_filemeta . |cut -f2- \ + list_filemeta . \ | xargs -rd'\n' stat -c '%Y %n' \ | sort -rn |cut -d/ -f2- - elif [ "$mode" = browse -a "$ORDER" = Name ]; then + elif [ "$mode" = browse ]; then list_directories - list_filemeta . \ - | sort -k 2 |cut -d/ -f2- + list_filemeta . elif [ "$mode" = index -a "$ORDER" = Date ]; then - list_index |cut -f2- \ + list_index \ | xargs -rd'\n' stat -c '%Y %n' \ | sort -rn | cut -d/ -f2- - elif [ "$mode" = index -a "$ORDER" = Name ]; then - list_index | sort -k 2 | cut -d/ -f2- - elif [ "$mode" = browse -a "$ORDER" = Length ]; then - list_directories - list_filemeta . \ - | sort -n |cut -d/ -f2- - elif [ "$mode" = index -a "$ORDER" = Length ]; then - list_index \ - | sort -n |cut -d/ -f2- + elif [ "$mode" = index ]; then + list_index fi } list_paginate() { - local page i c n - page="$(GET p |grep -xE '[0-9]+' || printf 1)" + local page i c n end + page="$(GET p |grep -xE '[0-9]+' || printf 1)"; c=1 + end=$((page + LISTSIZE)) printf '[div .itemlist ' - while i="$(line)"; do - c=$((${c-0} + 1)) - if [ $c -lt $page ]; then - true - elif [ $c -lt $((LISTSIZE + page)) ]; then - list_item "$i" - fi + while read -r i; do + [ $c -ge $page -a $c -lt $end ] \ + && list_item "$i" + c=$((c + 1)) done printf ']' printf '[div .pagination' - for n in $(seq 1 $((c / LISTSIZE + 1)) ); do + for n in $( seq 1 $((c / LISTSIZE + 1)) ); do printf '[a .page href="%s" %s]' \ "?p=$(( (n - 1) * LISTSIZE + 1))" "$n" done @@ -135,30 +132,32 @@ list_paginate() { printf 'Content-Type: text/html;charset=utf-8\r\n\r\n' -"$_EXEC/cgilite/html-sh.sed" <<-EOF +{ printf ' [!DOCTYPE HTML] [html [head [title Listing] [meta name="viewport" content="width=device-width"] [link rel=stylesheet href="/style.css" ] ] [body [div #navigation - [a #t_bookmarks href="#bookmarks" ★] - $(w_search) + [a #t_bookmarks href="#bookmarks" ★]' + w_search + printf ' [a #t_avsearch href="#advsearch" Advanced] [a #t_prefs href="#prefs" ⚙] - ] - $(w_prefs) - $(w_advsearch) - - [form method=POST action="?a=multitag" - $(list_items \ - | list_paginate - ) + ]' + w_prefs + w_advsearch + printf ' + [form method=POST action="?a=multitag"' + list_items \ + | list_paginate + printf ' [div #editing - [a href="#multitag" Add Tags] $(w_tagging) - $(w_index) + [a href="#multitag" Add Tags]' + w_tagging + w_index + printf ' ] ] ] ] -EOF - +'; } | "$_EXEC/cgilite/html-sh.sed" -- 2.39.2