]> git.plutz.net Git - serve0/blob - db_meta.sh
bugfix: typo
[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_META"
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     read -r META_LENGTH META_WIDTH META_HEIGHT META_TAGS META_COMMENT META_NAME <<-EOF
35         $(grep -F "     ${name}${CR}" "$meta_db")
36         EOF
37   fi
38   if [ "$META_NAME" ]; then
39        META_NAME="$(UNSTRING "${META_NAME%${CR}}")"
40     META_COMMENT="$(UNSTRING "${META_COMMENT#comment=}")"
41        META_TAGS="$(UNSTRING "${META_TAGS#tags=}")"
42   else
43     eval "$UNSET_META"
44     return 1
45   fi
46 }
47
48 update_meta(){
49   local name="${1:=${META_NAME}}" tags comment length width height
50   local LENGTH WIDTH HEIGH TAGS COMMENT NAME
51   local arg cnt meta_db="$_DATA/.index/meta"
52
53   [ "${name%%/*}" != "$name" ] \
54   && meta_db="$_DATA/${name%%/*}/.index/meta"
55   name="$(STRING "${name##*/}")"
56
57   for arg in "$@"; do case $arg in
58     comment=*) comment="${arg#*=}";;
59        tags=*)    tags="${arg#*=}";;
60      lenght=*)  lenght="${arg#*=}";;
61       width=*)   width="${arg#*=}";;
62      height=*)  height="${arg#*=}";;
63   esac; done
64
65   if LOCK "$meta_db"; then
66     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
67       if [ "$name" = "${NAME%${CR}}" ]; then
68         printf '%i      %i      %i      tags=%s comment=%s      %s\r\n' \
69                "${length:-${length-${LENGTH}}${length+0}}" \
70                "${width:-${width-${WIDTH}}${width+0}}" \
71                "${height:-${height-${HEIGHT}}${height+0}}" \
72                "$(STRING "${tags-$(UNSTRING "${TAGS#tags=}")}")" \
73                "$(STRING "${comment-$(UNSTRING "${COMMENT#comment=}")}")" \
74                "$(STRING "${name-$(UNSTRING "${NAME%${CR}}")}")"
75       else
76         printf '%i      %i      %i      tags=%s comment=%s      %s\r\n' \
77                "$length" "$width" "$height" "${TAGS#tags=}" \
78                "${COMMENT#comment=}" "${NAME%${CR}}"
79       fi
80     done <"$meta_db" >"${meta_db}.$$"
81     mv -- "${meta_db}.$$" "${meta_db}"
82     RELEASE "$meta_db"
83   else
84     return 1
85   fi
86 }
87
88 new_meta(){
89   local name="$1" meta_db="$_DATA/.index/meta"
90   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
91
92   [ "${name%%/*}" != "$name" ] \
93   && meta_db="$_DATA/${name%%/*}/.index/meta"
94   name="$(STRING "${name##*/}")"
95
96   if LOCK "$meta_db"; then
97     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
98       if [ "$name" = "${NAME%${CR}}" ]; then
99         RELEASE "$vid_db"
100         return 1
101       fi
102     done <"$meta_db"
103     printf '0   0       0       tags=\\ comment=\\      %s\r\n' \
104            "${name}" >>"$meta_db"
105     RELEASE "$meta_db"
106   else
107     return 1
108   fi
109 }
110
111 delete_meta() {
112   local name="$1" meta_db="$_DATA/.index/meta"
113   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
114
115   [ "${name%%/*}" != "$name" ] \
116   && meta_db="$_DATA/${name%%/*}/.index/meta"
117   name="$(STRING "${name##*/}")"
118
119   if LOCK "$meta_db"; then
120     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
121       [ "$name" = "${NAME%${CR}}" ] \
122       || printf '%i     %i      %i      tags=%s comment=%s      %s\r\n' \
123                 "$length" "$width" "$height" "${TAGS#tags=}" \
124                 "${COMMENT#comment=}" "${NAME%${CR}}"
125     done <"$meta_db" >"${meta_db}.$$"
126
127     mv -- "${meta_db}.$$" "$meta_db"
128     RELEASE "$meta_db"
129   else
130     return 1
131   fi
132 }
133
134 list_meta(){
135   local meta pfx
136   local LENGTH WIDTH HEIGHT TAGS COMMENT NAME
137
138   if [ "$#" -eq 0 ]; then
139     find "$_DATA" -path '*/.index/meta'
140   else
141     printf %s\\n "$@"
142   fi \
143   | while read meta; do
144     pfx="${meta#$_DATA}"
145     pfx="${pfx%/.index/meta}"
146     pfx="$(STRING "${pfx#/}")"
147     [ "$pfx" = '\' ] && pfx='' || pfx="${pfx}/"
148
149     while read -r LENGTH WIDTH HEIGHT TAGS COMMENT NAME; do
150       printf '%i        %i      %i      tags=%s comment=%s      %s%s\r\n' \
151              $LENGTH $WIDTH $HEIGHT "${TAGS#tags=}" \
152              "${COMMENT#comment=}" "${pfx}" "${NAME%${CR}}"
153     done <"$meta"
154   done
155 }