]> git.plutz.net Git - serve0/blob - db_meta.sh
switch to db_meta
[serve0] / db_meta.sh
1 #!/bin/sh
2
3 [ "$include_dbmeta" ] && return 0
4 include_dbmeta="$0"
5
6 # == FILE FORMAT ==
7 # LENGTH        WIDTH   HEIGHT  TAGS    COMMENT NAME
8
9 # == GLOBALS ==
10 UNSET_META='unset \
11   META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
12 '
13
14 LOCAL_META='local \
15   META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
16 '
17
18 eval "$UNSET_VIDEO"
19
20 read_meta() {
21   local name="$1" meta_db="$_DATA/.index/meta"
22
23   [ "${name%%/*}" != "$name" ] \
24   && meta_db="$_DATA/${name%%/*}/.index/meta"
25   name="$(STRING "${name##*/}")"
26
27   # Global exports
28   META_LENGTH='' META_WIDTH='' META_HEIGHT='' META_TAGS=''
29   META_COMMENT='' META_NAME=''
30
31   if [ $# -eq 0 ]; then
32     read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME
33   elif [ "$name" -a -f "$meta_db" -a -r "$meta_db" ]; then
34     while read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME; do
35       [ "${META_NAME%${CR}}" = "$name" ] && break
36     done <"${meta_db}"
37     [ "${META_NAME%${CR}}" = "$name" ] || eval "$UNSET_META"
38   fi
39   if [ "$META_NAME" ]; then
40        META_NAME="$(UNSTRING "${META_NAME%${CR}}")"
41     META_COMMENT="$(UNSTRING "${META_COMMENT#comment=}")"
42        META_TAGS="$(UNSTRING "${META_TAGS#tags=}")"
43   else
44     eval "$UNSET_META"
45     return 1
46   fi
47 }
48
49 update_meta(){
50   local name="${1:=${META_NAME}}" tags comment length width height
51   eval LENGTH WIDTH HEIGH TAGS COMMENT NAME
52   local arg cnt meta_db="$_DATA/.index/meta"
53
54   [ "${name%%/*}" != "$name" ] \
55   && meta_db="$_DATA/${name%%/*}/.index/meta"
56   name="$(STRING "${name##*/}")"
57
58   for arg in "$@"; do case $arg in
59     comment=*) comment="${arg#*=}";;
60        tags=*)    tags="${arg#*=}";;
61      lenght=*)  lenght="${arg#*=}";;
62       width=*)   width="${arg#*=}";;
63      height=*)  height="${arg#*=}";;
64   esac; done
65
66   if LOCK "$meta_db"; then
67     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
68       if [ "$name" = "${NAME%${CR}}" ]; then
69         printf '%i      %i      %i      tags=%s comment=%s      %s\r\n' \
70                "${length:-${length-${LENGTH}}${length+0}}" \
71                "${width:-${width-${WIDTH}}${width+0}}" \
72                "${height:-${height-${HEIGHT}}${height+0}}" \
73                "$(STRING "${tags-$(UNSTRING "${TAGS#tags=}")}")" \
74                "$(STRING "${comment-$(UNSTRING "${COMMENT#comment=}")}")" \
75                "$(STRING "${name-$(UNSTRING "${NAME%${CR}}")}")"
76       else
77         printf '%i      %i      %i      tags=%s comment=%s      %s\r\n' \
78                "$length" "$width" "$height" "${TAGS#tags=}" \
79                "${COMMENT#comment=}" "${NAME%${CR}}"
80       fi
81     done <"$meta_db" >"${meta_db}.$$"
82     mv -- "${meta_db}.$$" "${meta_db}"
83     RELEASE "$meta_db"
84   else
85     return 1
86   fi
87 }
88
89 new_meta(){
90   local name="$1" meta_db="$_DATA/.index/meta"
91   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
92
93   [ "${name%%/*}" != "$name" ] \
94   && meta_db="$_DATA/${name%%/*}/.index/meta"
95   name="$(STRING "${name##*/}")"
96
97   if LOCK "$meta_db"; then
98     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
99       if [ "$name" = "${NAME%${CR}}" ]; then
100         RELEASE "$vid_db"
101         return 1
102       fi
103     done <"$meta_db"
104     printf '0   0       0       tags=\\ comment=\\      %s\r\n' \
105            "${name}" >>"$meta_db"
106     RELEASE "$meta_db"
107   else
108     return 1
109   fi
110 }
111
112 delete_meta() {
113   local name="$1" meta_db="$_DATA/.index/meta"
114   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
115
116   [ "${name%%/*}" != "$name" ] \
117   && meta_db="$_DATA/${name%%/*}/.index/meta"
118   name="$(STRING "${name##*/}")"
119
120   if LOCK "$meta_db"; then
121     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
122       [ "$name" = "${NAME%${CR}}" ] \
123       || printf '%i     %i      %i      tags=%s comment=%s      %s\r\n' \
124                 "$length" "$width" "$height" "${TAGS#tags=}" \
125                 "${COMMENT#comment=}" "${NAME%${CR}}"
126     done <"$meta_db" >"${meta_db}.$$"
127
128     mv -- "${meta_db}.$$" "$meta_db"
129     RELEASE "$meta_db"
130   else
131     return 1
132   fi
133 }
134
135 list_meta(){
136   local meta pfx
137   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
138
139   if [ "$#" -eq 0 ]; then
140     find "$_DATA" -path '*/.index/meta'
141   else
142     printf %s\\n "$@"
143   fi \
144   | while read meta; do
145     pfx="${meta#$_DATA}"
146     pfx="${pfx%/.index/meta}"
147     pfx="$(STRING "${pfx#/}")"
148     [ "$pfx" = '\' ] && pfx='' || pfx="${pfx}/"
149
150     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
151       printf '%i        %i      %i      tags=%s comment=%s      %s%s\r\n' \
152              $LENGTH $WIDTH $HEIGHT "${TAGS#tags=}" \
153              "${COMMENT#comment=}" "${pfx}" "${NAME%${CR}}"
154     done <"$meta"
155   done
156 }