-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathmpvc-autopilot
More file actions
executable file
·121 lines (108 loc) · 3.97 KB
/
mpvc-autopilot
File metadata and controls
executable file
·121 lines (108 loc) · 3.97 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env sh
#
# @file mpvc-autopilot
# @description mpvc auto pause/resume audio based on device presence
# @author gmt4 <gmt4 at github.com> (c) Copyright 2022 GPLv2+
# @url github.com/gmt4/mpvc
# SPDX-License-Identifier: GPL-2.0-or-later
#
PROGNAME=${0##*/}
PROGVERSION="v1.8"
PROGAUTHOR=gmt4
PROGURL="https://github.com/gmt4/mpvc"
set -euf
mpvcap_defaults()
{
ARGS=${ARGS:-}
MPVC_AP_NCHECK=${MPVC_AP_NCHECK:-3}
MPVC_AP_PERIOD=${MPVC_AP_PERIOD:-300}
MPVC_AP_HOURMIN=${MPVC_AP_HOURMIN:-6}
MPVC_AP_HOURMAX=${MPVC_AP_HOURMAX:-20}
MPVC_AP_CMD=${MPVC_AP_CMD:-mpvcap_autostart}
MPVC_AP_CHECK=${MPVC_AP_CHECK:-mpvcap_pingcheck}
}
mpvcap_date() { echo "[$(date +%H:%M)]"; }
mpvcap_pingcheck() { ping -c 5 "$@" | awk 'NR == 2 && /time=/ { sub(":.*time=",": time="); print }'; }
mpvcap_btcheck() { hcitool scan | awk "/$@/ {print}"; }
# autopilot play tracks at random from musicdir each PERIOD secs
mpvcap_autopilot()
{
echo "# $(mpvcap_date) $PROGNAME $@ $MPVC_AP_CMD $MPVC_AP_CHECK PERIOD=$MPVC_AP_PERIOD NCHECK=$MPVC_AP_NCHECK [$MPVC_AP_HOURMIN,$MPVC_AP_HOURMAX]"
outputdir=$(mpvc-fzf -OO)
while sleep ${MPVC_AP_PERIOD}
do
hour=$(date +%_H)
if [ "$hour" -ge ${MPVC_AP_HOURMIN} -a "$hour" -lt ${MPVC_AP_HOURMAX} ]
then
pause=$(mpvc -q get pause || true)
next=$(find $(mpvc-fzf -OO) -type f | shuf -n1)
echo "# $(mpvcap_date) $PROGNAME next $next"
if [ "$pause" != "yes" ]; then
mpvc -n "$next"
fi
fi
done
}
# autostart checks for device/phone: if present resume audio, otherwise, pause.
mpvcap_autostart()
{
target="$1"
ncheck=0
echo "# $PROGNAME $@ $MPVC_AP_CMD $MPVC_AP_CHECK PERIOD=$MPVC_AP_PERIOD NCHECK=$MPVC_AP_NCHECK [$MPVC_AP_HOURMIN,$MPVC_AP_HOURMAX]"
while sleep ${MPVC_AP_PERIOD}
do
hour=$(date +%_H)
pause=$(mpvc -q get pause || true)
check="$($MPVC_AP_CHECK "$target")"
nsign=$(if [ -n "$check" ]; then echo +; else echo -; fi)
ncheck=$(( ( $ncheck $nsign 1 ) % ( $MPVC_AP_NCHECK + 1 ) ))
if [ "$hour" -ge ${MPVC_AP_HOURMIN} -a "$hour" -lt ${MPVC_AP_HOURMAX} ]
then
if [ "$ncheck" -gt 0 ]; then mpvc -q resume || true; fi # n>0 pings up: resume
if [ "$ncheck" -le -$MPVC_AP_NCHECK ]; then mpvc -q pause || true; fi # n<0 pings down: pause
fi
echo "# $(mpvcap_date) $PROGNAME PERIOD=$MPVC_AP_PERIOD NCHECK=$MPVC_AP_NCHECK pause=$pause c=${#check} n=${ncheck} $check" # $@
done
}
optflags="c:hi:n:p:m:M:"
usage()
{
cat <<EOF
usage: $PROGNAME -[$optflags] args # @version $PROGVERSION (c) $PROGAUTHOR $PROGURL
-i : The IP of the device to detect ping presence for $PROGNAME (*required)
-c : The operation cmd to run $PROGNAME (default: $MPVC_AP_CMD)
-C : The presence check to run $PROGNAME (default: $MPVC_AP_CHECK)
-p : The number of seconds between ping presence checks (default: $MPVC_AP_PERIOD)
-n : The number of failed ping presence checks after which to pause mpvc (default: $MPVC_AP_NCHECK)
-m : The minimum hour when to start ping presence (default: ${MPVC_AP_HOURMIN}h AM)
-M : The maximum hour when to stop ping presence (default: ${MPVC_AP_HOURMAX}h PM)
*tips: If unsure where to begin, run: $PROGNAME -i 192.168.0.2 # your tablet/phone LAN IP
EOF
exit;
}
main()
{
mpvcap_defaults
[ $# -lt 1 ] && usage
while getopts "$optflags" flag;
do
case "$flag" in
h) usage ;;
i) ARGS="$OPTARG"; ;;
c) MPVC_AP_CMD="$OPTARG"; ;;
p) MPVC_AP_PERIOD="$OPTARG"; ;;
n) MPVC_AP_NCHECK="$OPTARG"; ;;
m) MPVC_AP_HOURMIN="$OPTARG" ;;
M) MPVC_AP_HOURMAX="$OPTARG" ;;
*) usage ;;
esac
done
shift $((OPTIND - 1))
[ -z "${ARGS:-}" ] && usage "Error: No -i option provided (required)"
case "$MPVC_AP_CMD" in
mpvcap_autostart) mpvcap_autostart "$ARGS" ;;
mpvcap_autopilot) mpvcap_autopilot "$ARGS" ;;
*) usage ;;
esac
}
main "$@"