X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=pages%2Fplayctl.sh;h=f8247e02d33cbf1278b96ab7c35ee434929dac6b;hb=d716f2ce1fe64cf87f777490315bc51906001c72;hp=ded8603313ddff9ffe8682cff43565f4361b2a9e;hpb=d8d654939c7eb5ca4b9502a999e6ce3e387b7f82;p=serve0 diff --git a/pages/playctl.sh b/pages/playctl.sh index ded8603..f8247e0 100755 --- a/pages/playctl.sh +++ b/pages/playctl.sh @@ -1,6 +1,6 @@ #!/bin/zsh -# Copyright 2014 2016 Paul Hänsch +# Copyright 2014, 2016, 2017 Paul Hänsch # # This file is part of Serve0. # @@ -19,24 +19,74 @@ . $_EXEC/pages/common.sh +CR="$(printf \\r)" + info="${_GET[i]}" location="$(invalidate "${_GET[l]}" '(.*/)?\.\.(/.*)?|' /)" directory="${location%/*}" - -TITLE="$info" +statusfile="$_DATA/mplayer.status" +statusfile="/tmp/mplayer.status" if [ -n "$info" ]; then video="${_DATA}/videos/$info" - meta="${_DATA}/meta/$info.meta" - tags="$(sed -n '2p' "$meta")" - description="$(sed -n '3,$p' "$meta")" - head -n1 "$meta" |read length width height x + meta="${_DATA}/meta/${info}.meta" else video="${treeroot%/}/${location#/}" - meta=''; tags=''; length=0; width=0; height=0; - description=0 + meta="${treeroot%/}${location%/*}/.index/${location##*/}.meta" fi -volume=$(validate "$(cat "$_DATA/mplayer.volume")" '[1-9]?[0-9]|100' 20) +[ -r "$meta" ] || meta="${_DATA}/mplayer.meta" + +tags="$(sed -n '2p' "$meta")" +description="$(sed -n '3,$p' "$meta")" +head -n1 "$meta" |read length width height TITLE debug VIDEO: $video + +if [ "$_COOKIE[watch]" = raspi ]; then + actionuri="//${RHOST}:${RPORT}/?action=playctl" + volume="$({ncat "$RHOST" "$RPORT" <<-EOF + GET /?action=playctl&api=volume HTTP/1.0${CR} + Host: ${RHOST}${CR} + ${CR} + EOF + } | sed -r '1,/^\r$/d')" + volume=$(validate "${volume}" '[1-9]?[0-9]|100' 20) +else + actionuri='?action=playctl' + volume=$(validate "$(cat "$_DATA/mplayer.volume")" '[1-9]?[0-9]|100' 20) +fi + +pa_sinks(){ + if which pactl >/dev/null; then + export DISPLAY=":0" + export XDG_RUNTIME_DIR="/run/user/$(id |sed -rn '1s;.*uid=([0-9]+)[^0-9].*;\1;p')" + + pactl list sinks \ + | sed -rn '/Sink #/{:X;N;/Description: /!bX;s;Sink #([0-9]+).+Description: (.*);\1 \2;p}' + fi +} + +printf 'Refresh: 1\r\n' + +progress(){ + if [ "$_COOKIE[watch]" = raspi ]; then + { ncat "$RHOST" "$RPORT" <<-EOF + GET /?action=playctl&api=progress HTTP/1.0${CR} + Host: ${RHOST}${CR} + ${CR} + EOF + } | sed -ur '1,/^\r$/d' + else + tail --pid=$$ -c100 -f "$statusfile" \ + | while read -d "$CR" line; do + [ "$line" = "BREAK" ] && exit 0 + printf '%s\n' "$line" + done \ + | sed -urn '1~12s;^.* V: *+([0-9]+)(\.[0-9]+) A-V:.*$;\1;p' + fi \ + | while read m; do + [ "$m" != "$previous" ] && printf "%d %d\n" "$(($m * 100 / ${length:--1}))" "$m" + previous="$m" + done +}