]> git.plutz.net Git - rawnet/blob - db_channel.sh
refactoring: fewer global variables, manage all url parsing in index.cgi, split some...
[rawnet] / db_channel.sh
1 #!/bin/sh
2
3 [ "$include_dbchannel" ] && return 0
4 include_dbchannel="$0"
5
6 # == FILE FORMAT ==
7 # ID    NAME    DESCRIPTION     LOGO    THEME   AUTHORS DESCR_CACHE FUTUREUSE
8
9 # == GLOBALS ==
10 unset CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO CHANNEL_THEME \
11       CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE
12
13 LOCAL_CHANNEL='local \
14   CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO CHANNEL_THEME \
15   CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE
16 '
17
18 chan_db="$_DATA/channels.db"
19
20 read_channel() {
21   local channel="$1"
22
23   # Global exports
24   CHANNEL_ID='' CHANNEL_NAME='' CHANNEL_DESCRIPTION='' CHANNEL_LOGO=''
25   CHANNEL_THEME='' CHANNEL_AUTHORS='' CHANNEL_DESCR_CACHE=''
26   CHANNEL_FUTUREUSE=''
27
28   if [ $# -eq 0 ]; then
29     read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
30             CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
31             CHANNEL_FUTUREUSE
32   elif [ "$channel" -a -f "$chan_db" -a -r "$chan_db" ]; then
33     read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
34             CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
35             CHANNEL_FUTUREUSE <<-EOF
36         $(grep "^${channel}     " "${chan_db}")
37         EOF
38   fi
39   if [ "$CHANNEL_ID" ]; then
40            CHANNEL_NAME="$(UNSTRING "${CHANNEL_NAME}")"
41     CHANNEL_DESCRIPTION="$(UNSTRING "$CHANNEL_DESCRIPTION")"
42         CHANNEL_AUTHORS="$(UNSTRING "$CHANNEL_AUTHORS")"
43     CHANNEL_DESCR_CACHE="$(UNSTRING "$CHANNEL_DESCR_CACHE")"
44   else
45     unset CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
46           CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
47           CHANNEL_FUTUREUSE
48     return 1
49   fi
50 }
51
52 update_channel(){
53   local id="${1}" name description logo theme authors descr_cache futureuse
54   local ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE
55   local arg
56
57   for arg in "$@"; do case $arg in
58     name=*) name="${arg#*=}";;
59     description=*) description="${arg#*=}";;
60     logo=*) logo="${arg#*=}";;
61     theme=*) theme="${arg#*=}";;
62     authors=*) authors="${arg#*=}";;
63   esac; done
64
65   if LOCK "$chan_db"; then
66     while read -r ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE; do
67       if [ "$id" = "$ID" ]; then
68         printf '%s      %s      %s      %s      %s      %s      %s      %s\n' \
69                "$id" "$(STRING "${name-$(UNSTRING "$NAME")}")" \
70                "$(STRING "${description-$(UNSTRING "$DESCRIPTION")}")" \
71                "${logo:-${logo-${LOGO}}${logo+\\}}" \
72                "${theme:-${theme-${THEME}}${theme+\\}}" \
73                "$(STRING "${authors-$(UNSTRING "${AUTHORS}")}")" \
74                "$(printf %s "${description-$(UNSTRING "$DESCRIPTION")}" |markdown |STRING)" \
75                "${FUTUREUSE:-\\}"
76       else
77         printf '%s      %s      %s      %s      %s      %s      %s      %s\n' \
78                "$ID" "$NAME" "$DESCRIPTION" "$LOGO" "$THEME" "$AUTHORS" \
79                "$DESCR_CACHE" "$FUTUREUSE"
80       fi
81     done <"$chan_db" >"${chan_db}.$$"
82     mv -- "${chan_db}.$$" "${chan_db}"
83     RELEASE "$chan_db"
84   else
85     return 1
86   fi
87 }
88
89 new_channel(){
90   local channel="${1:-$(randomid)}"
91
92   if LOCK "$chan_db"; then
93     if grep -q "^${channel}     " "$chan_db"; then
94       RELEASE "$chan_db"
95       return 1
96     fi
97     printf '%s  \\      \\      \\      \\      %s      \\      \\\n' \
98            "$channel" "$(STRING "$USER_ID")" >>"$chan_db"
99     RELEASE "$chan_db"
100   else
101     return 1
102   fi
103 }