From e6f798224430d0ecb16835c58c7ea1610a65d0a4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Wed, 6 Oct 2021 23:45:36 +0200 Subject: [PATCH] rudimentary upload progress --- page_video.sh | 89 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 74 insertions(+), 15 deletions(-) diff --git a/page_video.sh b/page_video.sh index 9f21409..2961484 100644 --- a/page_video.sh +++ b/page_video.sh @@ -71,7 +71,7 @@ update_video(){ "$(printf %s "${description-$(UNSTRING "$DESCRIPTION")}" |markdown |STRING)" \ "${FUTUREUSE:-\\}" else - printf '%s %s %s %i %i %i %s %s %s %i %s %s\n' \ + printf '%s %s %s %i %i %f %s %s %s %i %s %s\n' \ "$ID" "$NAME" "$DESCRIPTION" "$RESX" "$RESY" "$LENGTH" \ "$COVER" "$STATUS" "$UPLOADER" "$HITS" "$DESCR_CACHE" \ "$FUTUREUSE" @@ -87,7 +87,6 @@ update_video(){ UPLOAD(){ local file="$1" local boundary line last - local CONTENT_TYPE="$(HEADER Content-Type)" [ ! "${CONTENT_TYPE}" -o "${CONTENT_TYPE##multipart/form-data;*}" ] && return 1 @@ -96,15 +95,15 @@ UPLOAD(){ head -c "$CONTENT_LENGTH" \ | sed -nE ' + # discard lines prior to boundary /^--'"${boundary}"'\r?$/!b; - :A; n; - /^\r?$/!bA; - n; - :FILE - p; n; + # discard lines until first blank + :A; n; /^\r?$/!bA; n; + # print lines until boundary ( = actual file upload) + :FILE; p; n; /^--'"${boundary}"'(--)?\r?$/!bFILE; - :END - $q; n; bEND; + # discard remaining lines + :END; $q; n; bEND; ' >"$file" truncate -s $(( $(stat -c %s -- "$file") -2 )) -- "$file" } @@ -137,9 +136,8 @@ if [ "$REQUEST_METHOD" = POST -a "$channel" -a "$video" ]; then head -c "$CONTENT_LENGTH" >/dev/null REDIRECT "${_BASE}/channel/${channel}/${video}/#ERROR_UPLOAD_NOCLOBBER" elif UPLOAD "$_DATA/$channel/$video.mp4"; then - update_video "$video" "$VIDEO_NAME" "$VIDEO_DESCRIPTION" 0 0 0 \ - "$VIDEO_COVER" private "$VIDEO_UPOADER" "$VIDEO_HITS" \ - "" "" + update_video "$video" status=private + VIDEO_STATUS=private fi fi @@ -162,6 +160,61 @@ if [ "$channel" -a "$video" -a "$action" = edit ]; then [submit "action" "update_video_cancel" . Cancel] ] EOF + +elif [ "$channel" -a "$video" -a "$action" = frameuploadprogress ]; then + AUTHOR || REDIRECT "$_BASE/$channel/$video/#ERROR_EDIT_NOTALLOWED" + printf '%s\r\n' 'Content-Type: text/html' 'Connection: close' '' + printf ' + + Upload Progress + + + ' + while [ "$VIDEO_STATUS" = void ]; do + printf '%i\n' "$(stat -c %s "$_DATA/$channel/$video.mp4" 2>&-)" + sleep 1 + 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 <<-EOF + $(grep "^${video} " "${vid_db}") + EOF + done + printf 'Ready!\n' + printf '' + +elif [ "$channel" -a "$video" -a "$action" = frameupload ]; then + AUTHOR || REDIRECT "$_BASE/$channel/$video/#ERROR_EDIT_NOTALLOWED" + printf '%s\r\n' 'Content-Type: text/html' '' + [ "$VIDEO_STATUS" = void ] && "$_EXEC"/cgilite/html-sh.sed <<-EOF + [!DOCTYPE HTML] + [html [head + [title Upload Form] + ][body + [form .upload method=POST enctype="multipart/form-data" + [input type=file name=upload] + [submit "action" "video_upload" Upload] + ] + ]] + EOF + [ "$VIDEO_STATUS" != void ] && "$_EXEC"/cgilite/html-sh.sed <<-EOF + [!DOCTYPE HTML] + [html [head + [title Upload Form] + ][body + [a href="./" target="_parent" . Reload Page!] + ]] + EOF + elif [ "$channel" -a "$video" ]; then [ $VIDEO_STATUS = public -o $VIDEO_STATUS = hidden ] || AUTHOR || { . ${_EXEC}/page_404.sh; exit 0; } @@ -170,9 +223,14 @@ elif [ "$channel" -a "$video" ]; then $(AUTHOR && printf ' - [a href="edit" edit]') ] $( AUTHOR && [ $VIDEO_STATUS = void ] && printf ' - [form .upload method=POST enctype="multipart/form-data" - [input type=file name=upload] - [submit "action" "video_upload" Upload] + [iframe src="frameuploadprogress" width="100%%" height="50" + [a href="freameuploadprogress" Iframe: Upload progress] + ] + [iframe src="frameupload" width="100%%" height="50" + [form .upload method=POST enctype="multipart/form-data" + [input type=file name=upload] + [submit "action" "video_upload" Upload] + ] ]') $( [ $VIDEO_STATUS != void ] && printf ' [video @@ -182,6 +240,7 @@ elif [ "$channel" -a "$video" ]; then [h1 .name $(HTML "$VIDEO_NAME")] [div .description . ${VIDEO_DESCR_CACHE}] EOF + else . "$_EXEC/page_404.sh" fi -- 2.39.2