X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=db_meta.sh;h=9f427fc65b38c3b554ca20c0d61ece87181b55af;hb=ccc8de4ebdd18fb52cdb8ce2013573d079186fba;hp=0521ed9d44c6a3f56994fcb2948ece452c582f69;hpb=641a006eda4a3b4fb7cf63f61dfd2c9b6ffa50bc;p=serve0 diff --git a/db_meta.sh b/db_meta.sh index 0521ed9..9f427fc 100755 --- a/db_meta.sh +++ b/db_meta.sh @@ -3,16 +3,18 @@ [ "$include_dbmeta" ] && return 0 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" @@ -26,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 @@ -39,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 @@ -46,8 +51,8 @@ read_meta() { } update_meta(){ - local name="${1:=${META_NAME}}" tags comment length width height - eval 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" ] \ @@ -60,24 +65,28 @@ update_meta(){ lenght=*) lenght="${arg#*=}";; width=*) width="${arg#*=}";; height=*) height="${arg#*=}";; + group=*) group="${arg#*=}";; esac; done if LOCK "$meta_db"; then - while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do - if [ "$name" = "${NAME%${CR}}" ]; then - printf '%i %i %i tags=%s comment=%s %s\r\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=}")}")" \ - "$(STRING "${name-$(UNSTRING "${NAME%${CR}}")}")" - else - printf '%i %i %i tags=%s comment=%s %s\r\n' \ - "$length" "$width" "$height" "${TAGS#tags=}" \ - "${COMMENT#comment=}" "${NAME%${CR}}" - fi - done <"$meta_db" >"${meta_db}.$$" + 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 %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}}" "${group:-${GROUP:-\\}}" \ + >"${meta_db}.$$" + + grep -vF " ${name}${CR}" "$meta_db" >>"${meta_db}.$$" + mv -- "${meta_db}.$$" "${meta_db}" RELEASE "$meta_db" else @@ -87,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 @@ -110,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" @@ -133,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' @@ -146,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 }