]> git.plutz.net Git - rawnet/blobdiff - page_channel.sh
For progress frame use chunked encoding instead of long poll
[rawnet] / page_channel.sh
index 09fae095baf1aae17471098c916047303e1d2283..111b6f95241b1a1151845bf8410b9b3c57836be5 100755 (executable)
@@ -1,35 +1,12 @@
 #!/bin/sh
 
-. "$_EXEC/db_channel.sh"
-. "$_EXEC/db_video.sh"
-
-channel='' video='' action=''
-path_info="$PATH_INFO"
-path_info="${path_info#/channel/}"
-if [ "$(checkid "${path_info%%/*}")" ]; then
-  channel="${path_info%%/*}"
-  path_info="${path_info#*/}"
-fi
-if [ "$(checkid "${path_info%%/*}")" ]; then
-  video="${path_info%%/*}"
-  path_info="${path_info#*/}"
-fi
-action="${path_info}"
-unset path_info
-
-read_channel "$channel" \
-&& vid_db="${_DATA}/${CHANNEL_ID}/videos.db"
+["$includepage_channel" ] && return 0
+includepage_channel="$0"
 
-AUTHOR(){
-  if [ "$CHANNEL_ID" -a "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then
-    return 0
-  else
-    return 1
-  fi
-}
+. "$_EXEC/db_channel.sh"
+. "$_EXEC/widgets.sh"
 
-# Video
-# ID   NAME    DESCRIPTION     RESX    RESY    LENGTH  COVER   STATUS  UPLOADER        HITS
+read_channel "$channel"
 
 [ "$REQUEST_METHOD" = POST ] && case "$(POST action)" in
   newchannel)
@@ -37,142 +14,125 @@ AUTHOR(){
     if [ ! "$USER_ID" ]; then
       REDIRECT "${_BASE}/channel/#ERROR_NEWCHANNEL_NOTALLOWED"
     elif new_channel "$channel"; then
-      REDIRECT "${_BASE}/channel/${channel}/edit"
+      REDIRECT "${_BASE}/channel/$channel/edit"
     else
       REDIRECT "${_BASE}/channel/#ERROR_NEWCHANNEL_NOLOCK"
     fi
     ;;
   update_channel)
-    if [ ! "$channel" ]; then
+    authors="${USER_ID}"
+    n="$(POST_COUNT author)"
+    while [ $n -gt 0 ]; do
+      newauthor="$(POST author $n |checkid)"
+      user_idmap "$newauthor" && authors="${authors}${BR}${newauthor}" >&-
+      n=$((n - 1))
+    done
+    n="$(POST_COUNT newauthor)"
+    while [ $n -gt 0 ]; do
+      newauthor="$(POST newauthor $n)"
+      newauthor="$(user_idof "$newauthor")" \
+      && authors="${authors}${BR}${newauthor}"
+      n=$((n - 1))
+    done
+
+    if [ ! "$CHANNEL_ID" ]; then
       REDIRECT "${_BASE}/channel/#ERROR_NOCHANNEL"
     elif [ ! "$USER_ID" ]; then
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_NOTLOGGEDIN"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_NOTLOGGEDIN"
     elif ! AUTHOR; then
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOTALLOWED"
-    elif update_channel "$channel" "name=$(POST name)" \
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_UPDATE_NOTALLOWED"
+    elif update_channel "$CHANNEL_ID" "name=$(POST name)" \
                         "description=$(POST description)" \
-                        "authors=$USER_ID"; then
-      REDIRECT "${_BASE}/channel/${channel}/"
+                        "authors=${authors}"; then
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/"
     else
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOLOCK"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_UPDATE_NOLOCK"
     fi
     ;;
   update_channel_cancel)
-    REDIRECT "${_BASE}/channel/${channel}/"
+    REDIRECT "${_BASE}/channel/$CHANNEL_ID/"
     ;;
   newvideo)
+    . "$_EXEC/db_video.sh"
     video="$(POST video |checkid)"
 
     AUTHOR \
-    && mkdir -p -- "${_DATA}/${channel}/"
+    && mkdir -p -- "${_DATA}/$CHANNEL_ID/"
 
     if [ ! "$video" ]; then
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_INVALID_ID"
-    elif [ ! "$channel" ]; then
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_INVALID_ID"
+    elif [ ! "$CHANNEL_ID" ]; then
       REDIRECT "${_BASE}/channel/#ERROR_NOCHANNEL"
     elif [ ! "$USER_ID" ]; then
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_NOTLOGGEDIN"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_NOTLOGGEDIN"
     elif ! AUTHOR; then
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOTALLOWED"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_UPDATE_NOTALLOWED"
     elif new_video "$video"; then
-      REDIRECT "${_BASE}/channel/${channel}/${video}/edit"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/$video/"
     else
-      REDIRECT "${_BASE}/channel/${channel}/#ERROR_NEWVIDEO_NOLOCK"
+      REDIRECT "${_BASE}/channel/$CHANNEL_ID/#ERROR_NEWVIDEO_NOLOCK"
     fi
     ;;
 esac
 
-w_video(){
-  local thumb
-  local VIDEO_ID VIDEO_NAME VIDEO_DESCRIPTION VIDEO_RESX VIDEO_RESY \
-        VIDEO_LENGTH VIDEO_COVER VIDEO_STATUS VIDEO_UPLOADER VIDEO_HITS \
-        VIDEO_DESCR_CACHE VIDEO_FUTUREUSE
-
-  if read_video; then
-    VIDEO_LENGTH="${VIDEO_LENGTH%.*}"
-    [ "${VIDEO_STATUS}" = public ] || AUTHOR || return 0
-
-    thumb="${_BASE}/video/${CHANNEL_ID}/${VIDEO_ID}_thumb.jpg"
-    [ "$NAME" = \\ ] && NAME="(Unnamed Video)"
-    printf '[div .video .thumb
-              [a href="%s/channel/%s/%s/"
-                [h3 . %s]
-                [figure [img src="%s" alt=""]]
-                [span .duration . %i:%02i]
-                [div .description . %s]
-              ]
-            ]' "$_BASE" "$CHANNEL_ID" "$VIDEO_ID" \
-               "$(HTML "${VIDEO_NAME:-(Unnamed Video)}")" \
-               "$thumb" \
-               "$((VIDEO_LENGTH / 60))" "$((VIDEO_LENGTH % 60))" \
-               "$(UNSTRING "$DESCR_CACHE")"
-  else
-    return 1
-  fi
-}
-
-w_channel_list(){
-  local vid_db
-  local CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
-        CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE
-
-  [ "$USER_ID" ] && cat <<-EOF
-       [form .channel .newchannel method=POST
-         [hidden "channel" "$(timeid)"]
-         [submit "action" "newchannel" New Channel]
-       ]
-       EOF
-
-  [ -f "$chan_db" -a -r "$chan_db" ] \
-  && while read_channel; do
-    vid_db="${_DATA}/${CHANNEL_ID}/videos.db"
-
-    cat <<-EOF
-       [div .channel
-         [div .description
-           [h2 [a href="${_BASE}/channel/${CHANNEL_ID}/" $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")]]
-           ${CHANNEL_DESCR_CACHE}
-         ]$(
-            [ -f "$vid_db" -a -r "$vid_db" ] \
-           && while w_video; do :; done <"$vid_db"
-         )
-       ]
-       EOF
-  done <"$chan_db"
-}
-
-if [ "$channel" -a "$video" ]; then
-  . ${_EXEC}/page_video.sh
-elif [ "$channel" -a "$action" = edit ]; then
-  AUTHOR || REDIRECT "${_BASE}/${channel}/#ERROR_EDIT_NOTALLOWED"
+if [ "$CHANNEL_ID" -a "$action" = edit ]; then
+  AUTHOR || REDIRECT "${_BASE}/$CHANNEL_ID/#ERROR_EDIT_NOTALLOWED"
   yield_page "$CHANNEL_NAME - Edit" "channel edit" <<-EOF
+       [datalist #list_authors
+       $(user_idmap |cut -f2 |UNSTRING |while read name; do
+         printf '[option value="%s"]' "$(HTML "$name")"
+       done)
+       ]
        [form .channel .edit method=POST
-         [input name="name" value="$(HTML "$CHANNEL_NAME")" placeholder="Channel Name"]
+         [input name="name" value="$(HTML "$CHANNEL_NAME")" placeholder="Channel Name" autocomplete=off]
          [textarea name="description" placeholder="Description" . $(HTML "$CHANNEL_DESCRIPTION")]
+         [div .authors [h3 Authors:]
+           $(for each in $CHANNEL_AUTHORS; do
+             printf '[checkbox "author" "%s" id="author_%s" %s %s][label for="author_%s" . %s]\n' \
+                    "$each" "$each" "checked=checked" "$([ "$each" = "$USER_ID" ] && printf 'disabled=disabled')" \
+                    "$each" "$(user_idmap "$each" |UNSTRING |HTML)"
+           done
+           for n in 0 1 2 3 4 5 6 7 8 9; do
+             printf '[checkbox "" "" #newauthor%i][label for=newauthor%i . +]
+                     [input name=newauthor value="" placeholder="Author" list=list_authors]' \
+                     $n $n
+           done)
+         ]
          [submit "action" "update_channel" . Update]
          [submit "action" "update_channel_cancel" . Cancel]
        ]
        EOF
-elif [ "$channel" ]; then
+elif [ "$CHANNEL_ID" ]; then
   yield_page "$CHANNEL_NAME" "channel" <<-EOF
-       [nav [a href="../" Channels] - [span $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")]
-         $(AUTHOR && printf ' - [a href="edit" edit]')
-       ]
+       [nav [a href="../" Channels] - [span $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")]]
        [h1 .name $(HTML "$CHANNEL_NAME")]
        [div .description . ${CHANNEL_DESCR_CACHE}]
+       [div .authors [h3 Authors:]
+         $(for each in $CHANNEL_AUTHORS; do
+           printf '[span .author . %s]\n' "$(user_idmap "$each" |UNSTRING |HTML)"
+         done |sort)
+       ]
+       $(AUTHOR && printf '[a .button href="edit" edit]')
        [h1 .videos Videos]
        [div .videos . $(
          AUTHOR && printf '
-             [form .video .newvideo method=POST
-               [hidden "video" "%s"]
-               [submit "action" "newvideo" New Video]
-             ]' "$(timeid)"
-         [ -f "$vid_db" -a -r "$vid_db" ] \
-         && while w_video "$ID"; do :; done <"$vid_db"
+            [form .video .newvideo method=POST
+              [hidden "video" "%s"]
+              [submit "action" "newvideo" New Video]
+            ]' "$(timeid)"
+         list_videos |while w_video; do :; done
        )]
        EOF
 else
   yield_page "Channels" "channels" <<-EOF
-       $(w_channel_list)
+       $([ "$USER_ID" ] && printf '
+         [form .channel .newchannel method=POST
+           [hidden "channel" "%s"]
+           [submit "action" "newchannel" New Channel]
+         ]' "$(timeid)"
+       )
+       $([ -f "$chan_db" -a -r "$chan_db" ] \
+         && while w_channel; do :; done <"$chan_db"
+       )
        EOF
 fi