]> git.plutz.net Git - rawnet/blob - db_channel.sh
For progress frame use chunked encoding instead of long poll
[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='unset \
11   CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO CHANNEL_THEME \
12   CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE
13 '
14
15 LOCAL_CHANNEL='local \
16   CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO CHANNEL_THEME \
17   CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE
18 '
19
20 eval "$UNSET_CHANNEL"
21
22 chan_db="$_DATA/channels.db"
23
24 read_channel() {
25   local channel="$1"
26
27   # Global exports
28   CHANNEL_ID='' CHANNEL_NAME='' CHANNEL_DESCRIPTION='' CHANNEL_LOGO=''
29   CHANNEL_THEME='' CHANNEL_AUTHORS='' CHANNEL_DESCR_CACHE=''
30   CHANNEL_FUTUREUSE=''
31
32   if [ $# -eq 0 ]; then
33     read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
34             CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
35             CHANNEL_FUTUREUSE
36   elif [ "$channel" -a -f "$chan_db" -a -r "$chan_db" ]; then
37     read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
38             CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
39             CHANNEL_FUTUREUSE <<-EOF
40         $(grep "^${channel}     " "${chan_db}")
41         EOF
42   fi
43   if [ "$CHANNEL_ID" ]; then
44            CHANNEL_NAME="$(UNSTRING "${CHANNEL_NAME}")"
45     CHANNEL_DESCRIPTION="$(UNSTRING "$CHANNEL_DESCRIPTION")"
46         CHANNEL_AUTHORS="$(UNSTRING "$CHANNEL_AUTHORS")"
47     CHANNEL_DESCR_CACHE="$(UNSTRING "$CHANNEL_DESCR_CACHE")"
48   else
49     eval "$UNSET_CHANNEL"
50     return 1
51   fi
52 }
53
54 update_channel(){
55   local id="${1}" name description logo theme authors descr_cache futureuse
56   local ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE
57   local arg
58
59   for arg in "$@"; do case $arg in
60     name=*) name="${arg#*=}";;
61     description=*) description="${arg#*=}";;
62     logo=*) logo="${arg#*=}";;
63     theme=*) theme="${arg#*=}";;
64     authors=*) authors="${arg#*=}";;
65   esac; done
66
67   if LOCK "$chan_db"; then
68     while read -r ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE; do
69       if [ "$id" = "$ID" ]; then
70         printf '%s      %s      %s      %s      %s      %s      %s      %s\n' \
71                "$id" "$(STRING "${name-$(UNSTRING "$NAME")}")" \
72                "$(STRING "${description-$(UNSTRING "$DESCRIPTION")}")" \
73                "${logo:-${logo-${LOGO}}${logo+\\}}" \
74                "${theme:-${theme-${THEME}}${theme+\\}}" \
75                "$(STRING "${authors-$(UNSTRING "${AUTHORS}")}")" \
76                "$(printf %s "${description-$(UNSTRING "$DESCRIPTION")}" |markdown |STRING)" \
77                "${FUTUREUSE:-\\}"
78       else
79         printf '%s      %s      %s      %s      %s      %s      %s      %s\n' \
80                "$ID" "$NAME" "$DESCRIPTION" "$LOGO" "$THEME" "$AUTHORS" \
81                "$DESCR_CACHE" "$FUTUREUSE"
82       fi
83     done <"$chan_db" >"${chan_db}.$$"
84     mv -- "${chan_db}.$$" "${chan_db}"
85     RELEASE "$chan_db"
86   else
87     return 1
88   fi
89 }
90
91 new_channel(){
92   local channel="${1:-$(randomid)}"
93
94   if LOCK "$chan_db"; then
95     if grep -q "^${channel}     " "$chan_db"; then
96       RELEASE "$chan_db"
97       return 1
98     fi
99     printf '%s  \\      \\      \\      \\      %s      \\      \\\n' \
100            "$channel" "$(STRING "$USER_ID")" >>"$chan_db"
101     RELEASE "$chan_db"
102   else
103     return 1
104   fi
105 }
106
107 AUTHOR(){
108   if [ "$CHANNEL_ID" -a "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then
109     return 0
110   else
111     return 1
112   fi
113 }