# == FILE FORMAT ==
# ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS DESCR_CACHE FUTUREUSE
-# (void|private|hidden|public)
+# (private|hidden|public)
# == GLOBALS ==
-unset 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
+UNSET_VIDEO='unset \
+ 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 \
+ VIDEO_FILE VIDEO_THUMB VIDEO_MP4 VIDEO_WEBM
+'
-[ "$CHANNEL_ID" ] && vid_db="$_DATA/$CHANNEL_ID/videos.db"
+LOCAL_VIDEO='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 \
+ VIDEO_FILE VIDEO_THUMB VIDEO_MP4 VIDEO_WEBM
+'
+
+eval "$UNSET_VIDEO"
read_video() {
- local video="$1"
+ local video="$1" vid_db="$_DATA/$CHANNEL_ID/videos.db"
+ [ "$CHANNEL_ID" ] || return 1
# Global exports
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=''
+ VIDEO_FILE='' VIDEO_THUMB='' VIDEO_MP4='' VIDEO_WEBM=''
if [ $# -eq 0 ]; then
read -r VIDEO_ID VIDEO_NAME VIDEO_DESCRIPTION VIDEO_RESX VIDEO_RESY \
VIDEO_DESCRIPTION="$(UNSTRING "$VIDEO_DESCRIPTION")"
VIDEO_COVER="$(UNSTRING "$VIDEO_COVER")"
VIDEO_DESCR_CACHE="$(UNSTRING "$VIDEO_DESCR_CACHE")"
+
+ VIDEO_FILE="$_DATA/$CHANNEL_ID/${VIDEO_ID}.upload.mp4"
+ VIDEO_THUMB="$_DATA/$CHANNEL_ID/${VIDEO_ID}.thumb.jpg"
+ VIDEO_MP4="$_DATA/$CHANNEL_ID/${VIDEO_ID}.mp4"
+ VIDEO_WEBM="$_DATA/$CHANNEL_ID/${VIDEO_ID}.webm"
else
- unset 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
+ eval "$UNSET_VIDEO"
return 1
fi
}
update_video(){
- local id="${1}" name description resx resy length cover status uploader \
+ local id="${1:=${VIDEO_ID}}" name description resx resy length cover status uploader \
hits descr_cache futureuse
local ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS \
DESCR_CACHE FUTUREUSE
- local arg video thumb cnt
- video="${_DATA}/${CHANNEL_ID}/${VIDEO_ID}.mp4"
- thumb="${_DATA}/${CHANNEL_ID}/${VIDEO_ID}_thumb.jpg"
+ local FILE THUMB MP4 WEBM arg cnt vid_db="$_DATA/$CHANNEL_ID/videos.db"
+ [ "$id" -a "$CHANNEL_ID" ] || return 1
+
+ FILE="$_DATA/$CHANNEL_ID/${id}.upload.mp4"
+ THUMB="$_DATA/$CHANNEL_ID/${id}.thumb.jpg"
+ # MP4="$_DATA/$CHANNEL_ID/${id}.mp4"
+ # WEBM="$_DATA/$CHANNEL_ID/${id}.webm"
for arg in "$@"; do case $arg in
name=*) name="${arg#*=}";;
hits=*) hits="${arg#*=}";;
esac; done
- if [ -f "$video" -a -r "$video" ]; then
- arg="$(echo; ffprobe -show_entries format=duration:stream=width,height "$video" 2>&-)"
+ if [ -f "$FILE" -a -r "$FILE" ]; then
+ arg="$(echo; ffprobe -show_entries format=duration:stream=width,height "$FILE" 2>&-)"
resx="${arg#*width=}"; resx="${resx%%${BR}*}"
resy="${arg#*height=}"; resy="${resy%%${BR}*}"
length="${arg#*duration=}"; length="${length%%${BR}*}"
fi
- if [ "${length%.*}" -a ! "${thumb}" -nt "${video}" ]; then
+ if [ "${length}" -a ! "${THUMB}" -nt "${FILE}" ]; then
for cnt in 1 2 3 4 5 6 7 8 9 10; do
- ffmpeg -nostdin -y -ss "$((cnt * ${length%.*} / 11))" -i "$video" \
- -frames 1 "${thumb%.jpg}_$((cnt - 1)).jpg"
+ ffmpeg -nostdin -y -ss "$((cnt * ${length%.*} / 11))" -i "$FILE" \
+ -frames 1 "${THUMB%.jpg}_$((cnt - 1)).jpg"
done 2>&-
- montage "${thumb%.jpg}"_[0-9].jpg \
+ montage "${THUMB%.jpg}"_[0-9].jpg \
-background "#000000" \
-tile 10x1 -geometry 320x180+0+0 \
- -interlace line -quality 85 "${thumb}"
- rm -- "${thumb%.jpg}"_[0-9].jpg
+ -interlace line -quality 85 "${THUMB}"
+ rm -- "${THUMB%.jpg}"_[0-9].jpg
fi
if LOCK "$vid_db"; then
"${resy:-${resy-${RESY}}${resy+0}}" \
"${length:-${length-${LENGTH}}${length+0}}" \
"$(STRING "${cover-$(UNSTRING "$COVER")}")" \
- "${status:-${status-${STATUS}}${status+void}}" \
+ "${status:-${status-${STATUS}}${status+private}}" \
"${uploader:-${uploader-${UPLOADER}}${uploader+\\}}" \
"${hits:-${hits-${HITS}}${hits+0}}" \
"$(printf %s "${description-$(UNSTRING "$DESCRIPTION")}" |markdown |STRING)" \
}
new_video(){
- local video="${1:-$(randomid)}"
+ local video="${1:-$(randomid)}" vid_db="$_DATA/$CHANNEL_ID/videos.db"
+ [ "$CHANNEL_ID" ] || return 1
if LOCK "$vid_db"; then
if grep -q "^${video} " "$vid_db"; then
return 1
fi
# ID NAME DESC RESX RESY LENGTH COVER STATUS UPLDR HITS FUTUREUSE
- printf '%s \\ \\ 0 0 0 \\ void %s 0 \\\n' \
+ printf '%s \\ \\ 0 0 0 \\ private %s 0 \\\n' \
"$video" "$(STRING "$USER_ID")" >>"$vid_db"
RELEASE "$vid_db"
else
}
delete_video() {
- local video="$1"
+ local video="$1" vid_db="$_DATA/$CHANNEL_ID/videos.db"
+ [ "$CHANNEL_ID" ] || return 1
if LOCK "$vid_db"; then
grep -v "^${video} " <"$vid_db" >"${vid_db}.$$"
mv -- "${vid_db}.$$" "$vid_db"
- rm -- "${_DATA}/${CHANNEL_ID}/${video}.mp4" "${_DATA}/${CHANNEL_ID}/${video}_thumb.jpg"
RELEASE "$vid_db"
else
return 1
fi
}
+
+list_videos(){
+ local order="${1:-newest}" vid_db="$_DATA/$CHANNEL_ID/videos.db"
+ [ "$CHANNEL_ID" ] || return 1
+
+ [ -f "$vid_db" -a -r "$vid_db" ] && case "$order" in
+ name)
+ sort -k2 "$vid_db"
+ ;;
+ shortest)
+ sort -n -k6 "$vid_db"
+ ;;
+ longest)
+ sort -rn -k6 "$vid_db"
+ ;;
+ oldest)
+ cat "$vid_db"
+ ;;
+ newest|*)
+ tac "$vid_db"
+ ;;
+ esac
+}