#!/bin/sh
. "$_EXEC/db_video.sh"
+. "$_EXEC/upload.sh"
read_video "$video"
-UPLOAD(){
- local file="$1"
- local boundary line length=0
-
- [ ! "${CONTENT_TYPE}" -o "${CONTENT_TYPE##multipart/form-data;*}" ] && return 1
-
- boundary="${CONTENT_TYPE#*; boundary=}"
- boundary="${boundary%%;*}"
-
- while read -r line; do
- length="$(( length + ${#line} + 1))"
- [ "${line%${CR}}" = "--$boundary" ] && break
- done
- while read -r line; do
- length="$(( length + ${#line} + 1))"
- [ ! "${line%${CR}}" ] && break \
- || debug "$line"
- done
-
- printf "%i\n" "$(( CONTENT_LENGTH - length ))" >"${file}.upload"
- head -c "$(( CONTENT_LENGTH - length ))" \
- | sed -nE '
- # print lines until boundary ( = actual file upload)
- :FILE; p; n;
- /^--'"${boundary}"'(--)?\r?$/!bFILE;
- # discard remaining lines
- :END; $q; n; bEND;
- ' >"$file"
- truncate -s $(( $(stat -c %s -- "$file") -2 )) -- "$file"
- rm -- "${file}.upload"
-}
-
[ "$REQUEST_METHOD" = POST ] && case "$(POST action)" in
update_video)
if [ ! "$USER_ID" ]; then
elif UPLOAD "$_DATA/$channel/$video.mp4"; then
update_video "$video" status=private
VIDEO_STATUS=private
+ REDIRECT "${_BASE}/channel/${channel}/${video}/edit"
fi
fi
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 '<!DOCTYPE HTML>
- <html><head>
- <title>Upload Progress</title>
- <style type="text/css"><!--
- body {
- text-align: center;
- }
- .progress {
- display: block;
- position: absolute;
- width: 20em;
- background-color: #FFF;
- border: 1pt solid;
- border-radius: 4pt;
- height: 1.25em;
- }
- .progress .bar {
- display: block;
- position: absolute;
- left: 0; top: 0; bottom: 0;
- background-color: #666;
- }
- .progress .count {
- display: block;
- position: absolute;
- left: 0; top: 0; right: 0; bottom: 0;
- line-height: 1.375em;
- }
- --></style>
- </head><body>
- '
- printf '<div class=progress><div class=bar style="width: 0%%;"></div><div class=count>%i / %i</div></div>\n' 0 0
- while [ ! -f "$_DATA/$channel/$video.mp4" -a \
- ! -f "$_DATA/$channel/$video.mp4.upload" ]; do sleep 1; done
- read size <"$_DATA/$channel/$video.mp4.upload"
- while [ -f "$_DATA/$channel/$video.mp4.upload" ]; do
- stat="$(stat -c %s "$_DATA/$channel/$video.mp4" 2>&-)"
- printf '<div class=progress><div class=bar style="width:%i%%;"></div><div class=count>%iMB / %iMB</div></div>\n' \
- "$(( stat * 100 / size ))" "$((stat / 1048576))" "$((size / 1048576))"
- sleep 1
- done
- printf '<span class=progress><div class=bar style="width:100%%;"></div><div class=count>Ready!</div></span>\n'
- printf '</body></html>'
-
-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
+ frame_uploadprogress
elif [ "$channel" -a "$video" ]; then
[ $VIDEO_STATUS = public -o $VIDEO_STATUS = hidden ] || AUTHOR || { . ${_EXEC}/page_404.sh; exit 0; }
[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]
- ]
+ [form .upload method=POST enctype="multipart/form-data"
+ [input type=file name=upload]
+ [submit "action" "video_upload" Upload]
]')
$( [ $VIDEO_STATUS != void ] && printf '
[video preload=none controls=controls width=%i height=%i
--- /dev/null
+#!/bin/sh
+
+UPLOAD(){
+ local file="$1"
+ local boundary line length=0
+
+ [ ! "${CONTENT_TYPE}" -o "${CONTENT_TYPE##multipart/form-data;*}" ] && return 1
+
+ boundary="${CONTENT_TYPE#*; boundary=}"
+ boundary="${boundary%%;*}"
+
+ while read -r line; do
+ length="$(( length + ${#line} + 1))"
+ [ "${line%${CR}}" = "--$boundary" ] && break
+ done
+ while read -r line; do
+ length="$(( length + ${#line} + 1))"
+ [ ! "${line%${CR}}" ] && break \
+ || debug "$line"
+ done
+
+ printf "%i\n" "$(( CONTENT_LENGTH - length ))" >"${file}.upload"
+ head -c "$(( CONTENT_LENGTH - length ))" \
+ | sed -nE '
+ # print lines until boundary ( = actual file upload)
+ :FILE; p; n;
+ /^--'"${boundary}"'(--)?\r?$/!bFILE;
+ # discard remaining lines
+ :END; $q; n; bEND;
+ ' >"$file"
+ truncate -s $(( $(stat -c %s -- "$file") -2 )) -- "$file"
+ rm -- "${file}.upload"
+}
+
+frame_uploadprogress() {
+ printf '<!DOCTYPE HTML>
+ <html><head>
+ <title>Upload Progress</title>
+ <link rel="stylesheet" type="text/css" href="%s/rawnet.css" />
+ </head><body id=uploadprogress>
+ ' "$_BASE"
+ printf '<div class=progress><div class=bar style="width: 0%%;"></div><div class=count>%i / %i</div></div>\n' 0 0
+ while [ ! -f "$_DATA/$channel/$video.mp4" -a \
+ ! -f "$_DATA/$channel/$video.mp4.upload" ]; do sleep 1; done
+ read size <"$_DATA/$channel/$video.mp4.upload"
+ while [ -f "$_DATA/$channel/$video.mp4.upload" ]; do
+ stat="$(stat -c %s "$_DATA/$channel/$video.mp4" 2>&-)"
+ printf '<div class=progress><div class=bar style="width:%i%%;"></div><div class=count>%iMB / %iMB</div></div>\n' \
+ "$(( stat * 100 / size ))" "$((stat / 1048576))" "$((size / 1048576))"
+ sleep 1
+ done
+ printf '<span class=progress><div class=bar style="width:100%%;"></div><div class=count>Ready!</div></span>\n'
+ printf '</body></html>'
+}