-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmpv-communicate
More file actions
executable file
·83 lines (71 loc) · 1.89 KB
/
Copy pathmpv-communicate
File metadata and controls
executable file
·83 lines (71 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env bash
# Sends commands to an mpv socket using socat
# First argument: mpv socket
# all other arguments are sent to the socket using socat
declare -a ARGS
GET_SOCKET=
PRINT=1
SOCKET=
usage() {
cat <<-EOF
usage: ${0##*/} [options] [SOCKET] COMMAND
Read about mpv IPC commands at mpv.io/manual/master/#json-ipc.
options:
-q, --quiet Print nothing, only return if COMMAND was successful.
EOF
}
abort() {
if [[ "$PRINT" -eq 1 ]]; then
usage
echo "${0##*/}: $1" >&2
fi
exit 1
}
get_opts() {
while [[ "$#" -ne 0 ]]; do
SHIFT_COUNT=1
case "$1" in
-q | --quiet) PRINT=0 ;;
-a | --ampv) GET_SOCKET="AMPV" ;;
-m | --music) GET_SOCKET="MUSIC" ;;
-u | --umpv) GET_SOCKET="UMPV" ;;
*)
if [[ -z "$GET_SOCKET" ]]; then
SOCKET="$1"
else
ARGS+=("$1")
fi
ARGS+=("${@:2}")
SHIFT_COUNT="$#"
;;
esac
shift "$SHIFT_COUNT"
done
}
set_socket() {
[[ -n "$SOCKET" ]] && return
case "$GET_SOCKET" in
AMPV) SOCKET="$(mpv-active-sockets --ampv | head -n1)" ;;
MUSIC) SOCKET="$(mpv-active-sockets --music | head -n1)" ;;
UMPV) SOCKET="$(mpv-active-sockets --umpv | head -n1)" ;;
*) abort "unrecognized value in GET_SOCKET: $GET_SOCKET" ;;
esac
}
validate_socket() {
[[ ! -e "$SOCKET" ]] && abort "path doesn't exist: $SOCKET"
[[ ! -S "$SOCKET" ]] && abort "path isn't a socket: $SOCKET"
}
mpv_communicate() {
if [[ "$PRINT" -eq 1 ]]; then
socat - "${SOCKET:?Socket is not set.}" <<<"${ARGS[@]}"
else
socat - "${SOCKET:?Socket is not set.}" <<<"${ARGS[@]}" >/dev/null 2>&1
fi
}
main() {
get_opts "$@"
set_socket
validate_socket
mpv_communicate
}
main "$@"