]> git.plutz.net Git - serve0/commitdiff
code cleanup/unification
authorPaul Hänsch <paul@plutz.net>
Mon, 23 Jul 2018 19:05:35 +0000 (21:05 +0200)
committerPaul Hänsch <paul@plutz.net>
Mon, 23 Jul 2018 19:05:35 +0000 (21:05 +0200)
indexmeta.sh
list.sh

index f0185fb77fefa4381df607eeaf23af929edfe7f4..8f0c971c81765becddf59d01368bf0680c766263 100644 (file)
@@ -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 18799f3ec3af2f77442224ca7191d62aeca1d88f..25822e48408e32a124405fe65a42378f350b348a 100644 (file)
--- 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