parsing and processing of aggregated values, split values, vcard escapes
[confetti] / actions / update_categories.sh
1 #!/bin/zsh
2
3 # Copyright 2016 Paul Hänsch
4 #
5 # This file is part of Confetti.
6
7 # Confetti is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU Affero General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11
12 # Confetti is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU Affero General Public License for more details.
16
17 # You should have received a copy of the GNU Affero General Public License
18 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
19
20 . "$_EXEC"/pages/categories.sh
21
22 catfile="${_DATA}/mappings/categories"
23
24 set_categories(){
25   card="${_DATA}/vcard/$1"
26   cats="$2"
27   cardcats="$(sed -nr 's;^CATEGORIES(\;[^":]+|\;"[^"]+")*:([^\r]+)\r?$;\2;p' "$card")"
28
29   debug "CARD: $card"
30   debug "CATS: $cardcats"
31   debug "NEW:  $cats"
32   if [ "$cats" != "$cardcats" ]; then
33     sed -ri '
34       /^CATEGORIES[;:]/d
35       /^END:VCARD *\r?$/iCATEGORIES:'"$cats"'\r
36     ' "${card}"
37   fi
38 }
39
40 listcards |while read card; do
41   cardcats=''
42   for n in "$card" "$card"{0..100}; do
43     if [ -z "${_POST[$n]}" ]; then
44       set_categories "$card" "$cardcats"
45       break
46     fi
47     cardcats="${cardcats}${cardcats:+,}${_POST[$n]}"
48   done
49 done
50
51 redirect "?p=categories"