From d5eed6ee7e2ff547dd06023838b6aed031ba8174 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Mon, 23 Jul 2018 21:05:35 +0200 Subject: [PATCH] code cleanup/unification --- indexmeta.sh | 10 ++-- list.sh | 146 +++++++++++++++++++++++++++------------------------ 2 files changed, 81 insertions(+), 75 deletions(-) diff --git a/indexmeta.sh b/indexmeta.sh index f0185fb..8f0c971 100644 --- a/indexmeta.sh +++ b/indexmeta.sh @@ -8,11 +8,8 @@ file_pattern='^.*\.(mov|ts|mpg|mpeg|mp4|m4v|avi|mkv|flv|sfv|wmv|ogm|ogv|webm|iso meta_name() { local fn - fn="$1" - fn="${fn##*/}" - fn="${fn%.*}" - STRING "$fn" - printf '\r' + fn="$1"; fn="${fn##*/}"; fn="${fn%.*}" + STRING "$fn"; printf '\r' } meta_line() { @@ -64,8 +61,7 @@ meta_purge(){ meta_info(){ local file meta - file="$1" - meta="${file%/*}/.index/meta" + file="$1"; meta="${file%/*}/.index/meta" if [ -d "${meta%/meta}" ]; then grep -aF " $(meta_name "$file")" "$meta" \ diff --git a/list.sh b/list.sh index 18799f3..25822e4 100644 --- a/list.sh +++ b/list.sh @@ -4,18 +4,29 @@ . "$_EXEC/widgets.sh" list_item() { - local name link path length width height tags comment n - name="$(HTML "$1")" - link="$(URL "$ITEM/$1")" - path="$(HTML "$ITEM/$1")" - qry=$(HTML "$QUERY_STRING") - - if [ -d "$_DATA/$ITEM/$1" ]; then - printf '[a .list .dir href="%s" %s]' "${path}?${qry}" "$name" - elif [ -f "$_DATA/$ITEM/$1" ]; then - read -r length width height tags comment n <<-EOF - $(meta_info "$_DATA/$ITEM/$1") - EOF + local meta type length width height tags comment name display link + meta="${1}"; type="${meta%% *}"; meta="${meta#* }" + + if [ "$type" = dir ]; then + name="${meta%% *}"; + display="$(HTML "$name")"; link="$(URL "$ITEM/$name")" + printf '[a .list .dir href="%s" %s]' "${link}?${w_reflink#*?}" "$name" + return 0 + fi + + length="${meta%% *}"; meta="${meta#* }" + width="${meta%% *}"; meta="${meta#* }" + height="${meta%% *}"; meta="${meta#* }" + tags="${meta%% *}"; meta="${meta#* }" + comment="${meta%% *}"; meta="${meta#* }" + name="${meta%% *}"; meta="${meta#* }" + + if [ "$type" = metashort ]; then + name="$(list_fullname "$(UNSTRING "${name%${CR}}")")" + fi + if [ -f "$_DATA/$ITEM/$name" ]; then + display="$(HTML "$name")" + link="$(URL "$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 @@ -25,18 +36,13 @@ list_item() { "$((length / 60))" "$((length % 60))" \ "$width" "$height" \ "$(UNSTRING "${tags#tags=}" |tr , '\0' |xargs -r0 printf ' [span .tag %s]')" \ - "$path" "$path" "$path" + "$link" "$link" "$link" else - printf 'Canning record for nonexist file: %s\n' "$1" >&2 - meta_purge "$_DATA/$ITEM/$1" + printf 'Canning record for nonexist file: %s\n' "$name" >&2 + # meta_purge "$_DATA/$ITEM/$name" fi } -list_directories(){ - (cd "$_DATA/$ITEM"; - find ./ -type d \! -name .index -mindepth 1 -maxdepth 1 \ - ) | cut -d/ -f2- | sort -} [ "$FILTER" ] && list_fex="$( fex='p' @@ -61,68 +67,71 @@ list_fullname(){ && printf '%s\n' "${base}/${file}" } -list_filemeta(){ - local meta base f fn file - base="$1" - meta="$_DATA/$ITEM/$base/.index/meta" - meta_dir "$_DATA/$ITEM/$base" - - if [ $ORDER = Name ]; then - sort -k6 "$meta" - elif [ $ORDER = Length ]; then - sort -n -k1 "$meta" - else - cat "$meta" - fi \ - | if [ "$FILTER" ]; then +list_filter(){ + if [ "$FILTER" ]; then sed -nr "$list_fex" elif [ "${SEARCH#!}" != "${SEARCH}" ]; then - grep -aviE "$(STRING "${SEARCH#!}" |sed -r ':x s;((^|[^\\])(\\\\)*)\+;\1\\+;g; tx;')" - else - grep -aiE "$(STRING "${SEARCH}" \ + grep -aviEe "$(STRING "${SEARCH}" \ + | sed -r ':x s;((^|[^\\])(\\\\)*)\+;\1 ;g; tx; + s;((^|[^\\])(\\\\)*)\\\+;\1+;g; + s; ;\\+;g;')" + elif [ "${SEARCH}" ]; then + grep -aiEe "$(STRING "${SEARCH}" \ | sed -r ':x s;((^|[^\\])(\\\\)*)\+;\1 ;g; tx; s;((^|[^\\])(\\\\)*)\\\+;\1+;g; s; ;\\+;g;')" - fi |cut -f6 | UNSTRING \ - | while read -r fn; do - printf '%s\n' "${base}/${fn%${CR}}" - done | tee .index/debug + else + cat + fi } -list_index(){ - local meta - (cd "$_DATA/$ITEM"; - find ./ -path '*/.index/meta' - ) | while read -r meta; do - list_filemeta "${meta%/.index/meta}" - done +list_order(){ + local fm fn fn + + if [ $ORDER = Name ]; then + sort -k6 |sed 's;^;metashort\t;;' + elif [ $ORDER = Length ]; then + sort -n -k1 |sed 's;^;metashort\t;;' + elif [ $ORDER = Date ]; then + while read -r fm; do + sn="${fm##* }" + fn="$(list_fullname "$(UNSTRING "${sn%${CR}}")")" + printf '%i %s %s\n' \ + "$(stat -c %Y "$fn")" "${fm% *}" "$fn" + done \ + | sort -n -k1 |cut -f2- |sed 's;^;metalong\t;;' + fi } -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_filemeta(){ + local meta base cbase fm + 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 } list_items() { - local mode + local mode meta mode="$(COOKIE mode |grep -m1 -axE 'index|browse' || printf browse )" - [ "$mode" = browse -a "$ITEM" ] && printf '..\n' - - if [ "$mode" = browse -a "$ORDER" = Date ]; then - list_directories - list_filemeta . |list_dateorder - elif [ "$mode" = index -a "$ORDER" = Date ]; then - list_index |list_dateorder - elif [ "$mode" = browse ]; then - list_directories + if [ "$mode" = browse ]; then + [ "$ITEM" ] && printf '..\n' + (cd "$_DATA/$ITEM"; + find ./ -type d \! -name .index -mindepth 1 -maxdepth 1 \ + ) | cut -d/ -f2- | sort |sed 's;^;dir\t;;' list_filemeta . elif [ "$mode" = index ]; then - list_index + (cd "$_DATA/$ITEM"; + find ./ -path '*/.index/meta' + ) | while read -r meta; do + list_filemeta "${meta%/.index/meta}" + done fi } @@ -133,9 +142,8 @@ list_paginate() { printf '[div .itemlist ' while read -r i; do - [ $c -ge $page -a $c -lt $end ] \ - && list_item "$(list_fullname "$i")" c=$((c + 1)) + [ $c -gt $page -a $c -le $end ] && list_item "$i" done printf ']' @@ -168,6 +176,8 @@ 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 -- 2.39.2