#!/bin/bash # $HeadURL$ $LastChangedRevision$ set -e PROGNAME=${0##*/} # Configurable stuff TIMEOUT=5 # Other globals # Includes . $(miniade) || { echo "${0#*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } main() { # Defaults for options MODE=unset # Minimal option processing process_standard_options --special-opts-handler=special_opts_handler MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments # (delegated) # Sanity checks and derivations [ $MODE != unset ] || usage [ "X$LOGNAME" != X ] || error "LOGNAME: not set" LOCKFILE=/tmp/$PROGNAME-$LOGNAME.lock SOCK=/tmp/$PROGNAME-$LOGNAME.sock debug 10 "main: MODE=$MODE" ${MODE//-/_} "$@" } usage() { echo "Usage: $PROGNAME [ ] { --server | --submit | --stop }" >&2 exit 1 } server() { # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations type -p mpv > /dev/null || error "mpv: not installed (hint: install it)" type -p socat > /dev/null || error "socat: not installed (hint: install it)" # Guts debug 10 "server: locking ..." if ! lock $LOCKFILE; then debug 10 "server: server is already running; this is fine" return 0 fi debug 10 "server: launching mpv server ..." WRA_LAUNCHED_THIS=1 mpv --no-terminal --really-quiet --idle --input-ipc-server=$SOCK --cache=yes --cache-secs=60 --cache-pause-wait=60 --cache-pause-initial=yes & # Since *we* locked above, then we can rewrite the lock file :-) But # we need to do it atomically, which means we need to use mv. See # https://unix.stackexchange.com/questions/24395/. echo $! > $LOCKFILE.$$ mv $LOCKFILE.$$ $LOCKFILE sleep 5 } submit() { local URL # Process arguments [ $# = 1 ] || usage URL=$1 # Sanity checks and derivations lock_is_fresh $LOCKFILE || error "mpv server seems not to be running" # Guts echo "{ \"command\": [ \"loadfile\", \"$URL\", \"replace\" ] }" | socat -u - $SOCK } stop() { # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations # No need to send stop if it's not running lock_is_fresh $LOCKFILE || return 0 # Guts echo '{ "command": [ "stop" ] }' | socat -u - $SOCK } special_opts_handler() { case $1 in --server|--submit|--stop) MODE=${1#--} ;; *) return 1 ;; esac } main "$@"