]> git.plutz.net Git - serve0/commitdiff
allow manual grouping
authorPaul Hänsch <paul@plutz.net>
Mon, 20 Dec 2021 15:45:53 +0000 (16:45 +0100)
committerPaul Hänsch <paul@plutz.net>
Mon, 20 Dec 2021 15:45:53 +0000 (16:45 +0100)
db_meta.sh
list.sh
multitag.sh
style.css
widgets.sh

index f1eec4d237db1c97ab890b7f71c92a4564c70f71..9f427fc65b38c3b554ca20c0d61ece87181b55af 100755 (executable)
@@ -6,15 +6,15 @@ include_dbmeta="$0"
 . "$_EXEC/cgilite/storage.sh"
 
 # == FILE FORMAT ==
-# LENGTH       WIDTH   HEIGHT  TAGS    COMMENT NAME
+# LENGTH       WIDTH   HEIGHT  TAGS    COMMENT NAME    GROUP
 
 # == GLOBALS ==
 UNSET_META='unset \
-  META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
+  META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME META_GROUP
 '
 
 LOCAL_META='local \
-  META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
+  META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME META_GROUP
 '
 
 eval "$UNSET_META"
@@ -28,12 +28,14 @@ read_meta() {
 
   # Global exports
   META_LENGTH='' META_WIDTH='' META_HEIGHT='' META_TAGS=''
-  META_COMMENT='' META_NAME=''
+  META_COMMENT='' META_NAME='' META_GROUP=''
 
   if [ $# -eq 0 ]; then
-    read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
+    read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT \
+            META_NAME META_GROUP
   elif [ "$name" -a -f "$meta_db" -a -r "$meta_db" ]; then
-    read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME <<-EOF
+    read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT \
+            META_NAME META_GROUP <<-EOF
        $(grep -F "     ${name}${CR}" "$meta_db")
        EOF
   fi
@@ -41,6 +43,7 @@ read_meta() {
        META_NAME="$(UNSTRING "${META_NAME%${CR}}")"
     META_COMMENT="$(UNSTRING "${META_COMMENT#comment=}")"
        META_TAGS="$(UNSTRING "${META_TAGS#tags=}")"
+      META_GROUP="${META_GROUP#\\}"
   else
     eval "$UNSET_META"
     return 1
@@ -48,8 +51,8 @@ read_meta() {
 }
 
 update_meta(){
-  local name="${1:=${META_NAME}}" tags comment length width height
-  local LENGTH WIDTH HEIGH TAGS COMMENT NAME
+  local name="${1:=${META_NAME}}" tags comment length width height group
+  local LENGTH WIDTH HEIGH TAGS COMMENT NAME GROUP
   local arg cnt meta_db="$_DATA/.index/meta"
 
   [ "${name%%/*}" != "$name" ] \
@@ -62,23 +65,24 @@ update_meta(){
      lenght=*)  lenght="${arg#*=}";;
       width=*)   width="${arg#*=}";;
      height=*)  height="${arg#*=}";;
+      group=*)   group="${arg#*=}";;
   esac; done
 
   if LOCK "$meta_db"; then
-    read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME <<-EOF
+    read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP <<-EOF
        $(grep -F "     ${name}${CR}" "$meta_db")
        EOF
     if [ ! "$NAME" ]; then
       RELEASE "$meta_db"
       return 1
     fi
-    printf '%i %i      %i      tags=%s comment=%s      %s\r\n' \
+    printf '%i %i      %i      tags=%s comment=%s      %s\r    %s\n' \
            "${length:-${length-${LENGTH}}${length+0}}" \
            "${width:-${width-${WIDTH}}${width+0}}" \
            "${height:-${height-${HEIGHT}}${height+0}}" \
            "$(STRING "${tags-$(UNSTRING "${TAGS#tags=}")}")" \
            "$(STRING "${comment-$(UNSTRING "${COMMENT#comment=}")}")" \
-           "${NAME%${CR}}" \
+           "${NAME%${CR}}" "${group:-${GROUP:-\\}}" \
     >"${meta_db}.$$"
 
     grep -vF " ${name}${CR}" "$meta_db" >>"${meta_db}.$$"
@@ -92,20 +96,20 @@ update_meta(){
 
 new_meta(){
   local name="$1" meta_db="$_DATA/.index/meta"
-  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
+  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP
 
   [ "${name%%/*}" != "$name" ] \
   && meta_db="$_DATA/${name%%/*}/.index/meta"
   name="$(STRING "${name##*/}")"
 
   if LOCK "$meta_db"; then
-    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
+    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP; do
       if [ "$name" = "${NAME%${CR}}" ]; then
         RELEASE "$vid_db"
         return 1
       fi
     done <"$meta_db"
-    printf '0  0       0       tags=\\ comment=\\      %s\r\n' \
+    printf '0  0       0       tags=\\ comment=\\      %s\r    \\\n' \
            "${name}" >>"$meta_db"
     RELEASE "$meta_db"
   else
@@ -115,18 +119,18 @@ new_meta(){
 
 delete_meta() {
   local name="$1" meta_db="$_DATA/.index/meta"
-  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
+  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP
 
   [ "${name%%/*}" != "$name" ] \
   && meta_db="$_DATA/${name%%/*}/.index/meta"
   name="$(STRING "${name##*/}")"
 
   if LOCK "$meta_db"; then
-    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
+    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP; do
       [ "$name" = "${NAME%${CR}}" ] \
-      || printf '%i    %i      %i      tags=%s comment=%s      %s\r\n' \
+      || printf '%i    %i      %i      tags=%s comment=%s      %s\r    %s\n' \
                 "$length" "$width" "$height" "${TAGS#tags=}" \
-                "${COMMENT#comment=}" "${NAME%${CR}}"
+                "${COMMENT#comment=}" "${NAME%${CR}}" "${GROUP:-\\}"
     done <"$meta_db" >"${meta_db}.$$"
 
     mv -- "${meta_db}.$$" "$meta_db"
@@ -138,7 +142,7 @@ delete_meta() {
 
 list_meta(){
   local meta pfx
-  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
+  local LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP
 
   if [ "$#" -eq 0 ]; then
     find "$_DATA" -path '*/.index/meta'
@@ -151,10 +155,10 @@ list_meta(){
     pfx="$(STRING "${pfx#/}")"
     [ "$pfx" = '\' ] && pfx='' || pfx="${pfx}/"
 
-    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
-      printf '%i       %i      %i      tags=%s comment=%s      %s%s\r\n' \
+    while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME GROUP; do
+      printf '%i       %i      %i      tags=%s comment=%s      %s%s\r  %s\n' \
              $LENGTH $WIDTH $HEIGHT "${TAGS#tags=}" \
-             "${COMMENT#comment=}" "${pfx}" "${NAME%${CR}}"
+             "${COMMENT#comment=}" "${pfx}" "${NAME%${CR}}" "${GROUP:-\\}"
     done <"$meta"
   done
 }
diff --git a/list.sh b/list.sh
index 2384da842185b41cc40d2aa6029055de801ad0ae..65d929a3204bd15967215b0729a9b2e8c6582a52 100755 (executable)
--- a/list.sh
+++ b/list.sh
@@ -93,8 +93,12 @@ list_order(){
     sort -k6
   elif [ $ORDER = Group ]; then
     sed -E '
+      /^[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\r]*\r$/bX;
+      /^[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\r]*\r\t\\$/bX;
+      s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t)([^\r]*)\r\t(.*)$;\1\r\3 \2\r\t;;
+      t;
       :X
-      s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^ 0-9]*)-([0-9a-zA-Z_-]{11}\r|ph[0-9a-f]{13}\r|[0-9]{8}\r)(.*)$;\1-\r\3 \2\n;;
+      s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^ 0-9]*)-([0-9a-zA-Z_-]{11}\r|ph[0-9a-f]{13}\r|[0-9]{8}\r)(.*)$;\1-\r\3 \2;;
       t;
       s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^ 0-9]*)([0-9]+)(.*)$;\1\r\3 \2;;
       tX;' \
@@ -113,12 +117,16 @@ list_order(){
       ln="$name"
     done \
     | sort -s -n -k1,1 |sed -E 's;^[0-9]+\t;;;' \
-    | sed -E ':X s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\r]*)\r([^ ]*) ([^ ]+)( .*)?$;\1\3\2\4;; tX'
+    | sed -E '
+      s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t)\r([0-9A-Za-z:=]{16}) ([^ ]+)$;\1\3\r\t\2;; t;
+      :X s;^([^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\t]+\t[^\r]*)\r([^ ]*) ([^ ]+)( .*)?$;\1\3\2\4;; tX
+    '
   elif [ $ORDER = Length ]; then
     sort -sn -k1
   elif [ $ORDER = Date ]; then
     while read -r fm; do
-      fn="$(list_fullname "${fm##*     }")"
+      fn="${fm%${CR}   *}"
+      fn="$(list_fullname "${fn##*     }")"
       printf '%i       %s\n' \
              "$(stat -c %Y "$fn")" "${fm}"
     done \
index bbbf946425d28419fb90c7d83099acde73b0825c..674983ad626431746700d091655fa305ce7dfc68 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh
 
 . "$_EXEC/db_meta.sh"
+. "$_EXEC/cgilite/session.sh" nocookie
 
 newtags=''
 for tn in $(seq 1 $(POST_COUNT tag)); do
@@ -8,6 +9,10 @@ for tn in $(seq 1 $(POST_COUNT tag)); do
 done
 newtags="$(POST newtagn |tr -d '\r' |tr , '\n')${BR}${newtags}"
 
+if [ "$(POST makegroup)" = true ]; then
+  group="$(timeid)"
+fi
+
 while [ "${newtags#${BR}}" != "${newtags}" ]; do newtags="${newtags#${BR}}"; done
 while [ "${newtags%${BR}}" != "${newtags}" ]; do newtags="${newtags%${BR}}"; done
 
@@ -36,5 +41,9 @@ for select in $(seq 1 $(POST_COUNT select)); do
   fi
   tags="${tags#,}"; tags="${tags%,}"
 
-  update_meta "$META_NAME" tags="${tags}"
+  if [ "$group" ]; then
+    update_meta "$META_NAME" tags="${tags}" group="${group}"
+  else
+    update_meta "$META_NAME" tags="${tags}"
+  fi
 done
index dd67361b51d8d14d09e9bb3ecdb6cd21e3c50368..391a6da809032322ba5786167043b0ce22920190 100644 (file)
--- a/style.css
+++ b/style.css
@@ -255,6 +255,9 @@ body {
   display: block;
   white-space: pre;
 }
+#multitag fieldset [name=newtagn] + label {
+  display: block;
+}
 
 
 /* ====== VIEW PAGE ====== */
index 287db5febd26d51c21446f8ebbe21d6666404ba6..4d42c41d0bc73a0cd65f164033f5d295e10cddcd 100755 (executable)
@@ -247,6 +247,7 @@ w_tagging(){
 
   cat <<-EOF
          [fieldset [legend New:][textarea name=newtag\n]
+         [label [checkbox "makegroup" "true"] Join selected into group]
          [submit "op" "del" Remove Tags][submit "op" "add" Add Tags]
        ]]
        EOF