X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=page_channel.sh;h=8d1d1837fc2018d4765cc748c730746ad9745d32;hb=5a849c082b99a7189b34c432df969dc83df4ff5d;hp=d12f41719f3a70cd262ed532c4ccecadcf128494;hpb=3820e27ad1d4e9c9407c7cc316a016c80ee79902;p=rawnet diff --git a/page_channel.sh b/page_channel.sh index d12f417..8d1d183 100755 --- a/page_channel.sh +++ b/page_channel.sh @@ -37,19 +37,33 @@ if [ "$channel" -a -f "$chan_db" -a -r "$chan_db" ]; then fi update_channel(){ - local id="${1}" name="${2}" description="${3}" logo="${4}" theme="${5}" \ - authors="${6}" descr_cache="${7}" futureuse="${8}" - local ID INFO + local id="${1}" name description logo theme authors descr_cache futureuse + local ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE + local arg + + for arg in "$@"; do case $arg in + name=*) name="${arg#*=}";; + description=*) description="${arg#*=}";; + logo=*) logo="${arg#*=}";; + theme=*) theme="${arg#*=}";; + authors=*) authors="${arg#*=}";; + esac; done + if LOCK "$chan_db"; then - while read -r ID INFO; do + while read -r ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE; do if [ "$id" = "$ID" ]; then printf '%s %s %s %s %s %s %s %s\n' \ - "$id" "$(STRING "$name")" "$(STRING "$description")" \ - "${logo:-\\}" "${theme:-\\}" "$(STRING "$authors")" \ - "$(printf %s "$description" |markdown |STRING)" \ - "${futureuse:-\\}" + "$id" "$(STRING "${name-$(UNSTRING "$NAME")}")" \ + "$(STRING "${description-$(UNSTRING "$DESCRIPTION")}")" \ + "${logo:-${logo-${LOGO}}${logo+\\}}" \ + "${theme:-${theme-${THEME}}${theme+\\}}" \ + "$(STRING "${authors-$(UNSTRING "${AUTHORS}")}")" \ + "$(printf %s "${description-$(UNSTRING "$DESCRIPTION")}" |markdown |STRING)" \ + "${FUTUREUSE:-\\}" else - printf '%s %s\n' "$ID" "$INFO" + printf '%s %s %s %s %s %s %s %s\n' \ + "$ID" "$NAME" "$DESCRIPTION" "$LOGO" "$THEME" "$AUTHORS" \ + "$DESCR_CACHE" "$FUTUREUSE" fi done <"$chan_db" >"${chan_db}.$$" mv -- "${chan_db}.$$" "${chan_db}" @@ -59,6 +73,14 @@ update_channel(){ fi } +AUTHOR(){ + if [ "$CHANNEL_ID" -a "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then + return 0 + else + return 1 + fi +} + # Video # ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS @@ -87,33 +109,78 @@ update_channel(){ REDIRECT "${_BASE}/channel/#ERROR_NOCHANNEL" elif [ ! "$USER_ID" ]; then REDIRECT "${_BASE}/channel/${channel}/#ERROR_NOTLOGGEDIN" - elif [ "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then + elif ! AUTHOR; then REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOTALLOWED" - elif update_channel "$channel" "$(POST name)" "$(POST description)" \ - "" "" "$USER_ID" "" ""; then + elif update_channel "$channel" "name=$(POST name)" \ + "description=$(POST description)" \ + "authors=$USER_ID"; then REDIRECT "${_BASE}/channel/${channel}/" else REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOLOCK" fi ;; + update_channel_cancel) + REDIRECT "${_BASE}/channel/${channel}/" + ;; newvideo) video="$(POST video |checkid)" - # database video create - REDIRECT "${_BASE}/channel/${channel}/${video}/" + + AUTHOR \ + && mkdir -p -- "${_DATA}/${channel}/" + + if [ ! "$video" ]; then + REDIRECT "${_BASE}/channel/${channel}/#ERROR_INVALID_ID" + elif [ ! "$channel" ]; then + REDIRECT "${_BASE}/channel/#ERROR_NOCHANNEL" + elif [ ! "$USER_ID" ]; then + REDIRECT "${_BASE}/channel/${channel}/#ERROR_NOTLOGGEDIN" + elif ! AUTHOR; then + REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOTALLOWED" + elif LOCK "$vid_db"; then + if grep -q '^${video} ' "$vid_db"; then + RELEASE "$vid_db" + REDIRECT "${_BASE}/channel/${channel}/#ERROR_NEWVIDEO_EXISTS" + else + # ID NAME DESC RESX RESY LENGTH COVER STATUS UPLOADER HITS FUTUREUSE + printf '%s \\ \\ \\ \\ \\ \\ void %s \\ \\\n' \ + "$video" "$(STRING "$USER_ID")" \ + >>"$vid_db" + RELEASE "$vid_db" + REDIRECT "${_BASE}/channel/${channel}/${video}/edit" + fi + else + REDIRECT "${_BASE}/channel/${channel}/#ERROR_NEWVIDEO_NOLOCK" + fi ;; esac w_video(){ - local CID="$1" thumb - local ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS FUTUREUSE - if read -r ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS FUTUREUSE; then - thumb="${_BASE}/${CID}/thumb_${ID}.jpg" - cat <<-EOF - [div .video - [h3 . $(UNSTRING "$NAME" |HTML)] - [img href="${thumb}" alt="$(UNSTRING "$DESCRIPTION" |HTML)"] - ] - EOF + 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 -r 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; then + VIDEO_NAME="$(UNSTRING "$VIDEO_NAME")" + VIDEO_DESCRIPTION="$(UNSTRING "$VIDEO_DESCRIPTION")" + VIDEO_DESCR_CACHE="$(UNSTRING "$VIDEO_DESCR_CACHE")" + + [ "${VIDEO_STATUS}" = public ] || AUTHOR || return 0 + + thumb="${_BASE}/video/${CHANNEL_ID}/${VIDEO_ID}_thumb.jpg" + [ "$NAME" = \\ ] && NAME="(Unnamed Video)" + printf '[div .video .thumb + [h3 [a href="%s/channel/%s/%s/" . %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 @@ -121,16 +188,26 @@ w_video(){ w_channel(){ local vid_db - local ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE - if read -r ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE; then - vid_db="${_DATA}/${ID}/videos.db" - [ "$NAME" = \\ ] && NAME="(UNNAMED CHANNEL)" + local CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \ + CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE CHANNEL_FUTUREUSE + + if read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \ + CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \ + CHANNEL_FUTUREUSE; then + CHANNEL_NAME="$(UNSTRING "$CHANNEL_NAME")" + CHANNEL_DESCRIPTION="$(UNSTRING "$CHANNEL_DESCRIPTION")" + CHANNEL_AUTHORS="$(UNSTRING "$CHANNEL_AUTHORS")" + CHANNEL_DESCR_CACHE="$(UNSTRING "$CHANNEL_DESCR_CACHE")" + + vid_db="${_DATA}/${CHANNEL_ID}/videos.db" cat <<-EOF [div .channel - [h2 [a href="${_BASE}/channel/${ID}/" $(UNSTRING "${NAME}" |HTML)]] - [div .description . $(UNSTRING "$DESCR_CACHE")] - $( [ -f "$vid_db" -a -r "$vid_db" ] \ - && while w_video "$ID"; do :; done <"$vid_db" + [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 @@ -154,27 +231,32 @@ w_channel_list(){ if [ "$channel" -a "$video" ]; then . ${_EXEC}/page_video.sh elif [ "$channel" -a "$action" = edit ]; then - [ "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ] \ - || REDIRECT "${_BASE}/${channel}/#ERROR_EDIT_NOTALLOWED" + AUTHOR || REDIRECT "${_BASE}/${channel}/#ERROR_EDIT_NOTALLOWED" yield_page "$CHANNEL_NAME - Edit" "channel edit" <<-EOF [form .channel .edit method=POST [input name="name" value="$(HTML "$CHANNEL_NAME")" placeholder="Channel Name"] [textarea name="description" placeholder="Description" . $(HTML "$CHANNEL_DESCRIPTION")] [submit "action" "update_channel" . Update] + [submit "action" "update_channel_cancel" . Cancel] ] EOF elif [ "$channel" ]; then yield_page "$CHANNEL_NAME" "channel" <<-EOF + [nav [a href="../" Channels] - [span $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")] + $(AUTHOR && printf ' - [a href="edit" edit]') + ] [h1 .name $(HTML "$CHANNEL_NAME")] - $( [ "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ] \ - && printf '[a href="edit" edit]' - ) [div .description . ${CHANNEL_DESCR_CACHE}] - [div .videos - $( [ -f "$vid_db" -a -r "$vid_db" ] \ - && while w_video "$ID"; do :; done <"$vid_db" - ) - ] + [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" + )] EOF else yield_page "Channels" "channels" <<-EOF