X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=actions%2Fplayctl.sh;h=ae1a51bc19f21c7372e0c464561e75e08b9a39e6;hb=459b812a7dd36ed4a55131a164f8f1e762f8e68a;hp=b532e36dfd28202667cb2d02dc490ae1175caad8;hpb=0f55cabbc9beca8fce0bddc74f48d4d0fd52250b;p=serve0 diff --git a/actions/playctl.sh b/actions/playctl.sh index b532e36..ae1a51b 100755 --- a/actions/playctl.sh +++ b/actions/playctl.sh @@ -21,8 +21,29 @@ statusfile="${_DATA}/mplayer.status" statusfile="/tmp/mplayer.status" volfile="${_DATA}/mplayer.volume" +[ -z "$DISPLAY" ] && export DISPLAY=":0" +[ -z "$XDG_RUNTIME_DIR" ] && export XDG_RUNTIME_DIR="/run/user/$(id |sed -rn '1s;.*uid=([0-9]+)[^0-9].*;\1;p')" + printf '\rBREAK\r' >> "$statusfile" +if [ "${_GET[api]}" = progress ]; then + cr="$(printf \\r)" + printf 'Content-Type: text/plain\r\n\r\n' + + read length <${_DATA}/mplayer.meta + 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' + exit 0 +elif [ "${_GET[api]}" = volume ]; then + printf 'Content-Type: text/plain\r\n\r\n' + validate "$(cat "$_DATA/mplayer.volume")" '[1-9]?[0-9]|100' 20 + exit 0 +fi + if [ -n "${_POST[amp]+x}" ]; then amp $(validate "${_POST[amp]}" '(on|off)' off) elif [ -n "${_POST[vol]+x}" ]; then @@ -33,10 +54,16 @@ elif [ -n "${_POST[ctl]+x}" ]; then printf '%s\n' $(validate "${_POST[ctl]}" "pause|stop" pause) >"$fifofile" elif [ -n "${_POST[seek]+x}" ]; then printf 'seek %s\n' $(validate "${_POST[seek]}" "[+-]?[0-9]+" 0) >"$fifofile" +elif [ -n "${_POST[pasink]+x}" ]; then + stream="$(\ + pactl list sink-inputs \ + | sed -rn '/Sink Input #/{:X;N;/application.name =/!bX;s;Sink Input #([0-9]+).+application.name = "(MPlayer|mplayer2)";\1;p}' \ + )" + pactl move-sink-input "$stream" "${_POST[pasink]}" elif [ -n "${_POST[osd]+x}" ]; then case ${_POST[osd]} in progression) printf "osd_show_progression\\n";; esac >"$fifofile" fi & -redirect "$HTTP_REFERER" +redirect "${_POST[referrer]}"