blob: ddf3f01fe3145a26ca0b45394f17b8e6bb995738 (
plain)
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
|
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/sqlch"
STATION_FILE="$CONFIG_DIR/stations"
LAST_PLAYED="$CONFIG_DIR/last"
SOCKET="/tmp/mpvsocket"
mkdir -p "$CONFIG_DIR"
touch "$STATION_FILE" "$LAST_PLAYED"
play() {
if [[ -z "${1:-}" ]]; then
echo "No station name or URL provided." >&2
exit 1
fi
local input="$1"
local url name
echo "[DEBUG] Input received: $input" >&2
# Safe lookup loop to support spaces
while IFS='=' read -r name url; do
if [[ "$name" == "$input" ]]; then
break
fi
done < "$STATION_FILE"
if [[ -z "$url" ]]; then
# Fallback: assume it's a raw URL
url="$input"
name="$input"
fi
if [[ -z "$url" ]]; then
notify-send "sqlch Error" "Station '$input' not found."
echo "❌ Could not resolve: $input" >&2
exit 1
fi
if [[ -S "$SOCKET" ]]; then
echo "quit" | socat - "$SOCKET" 2>/dev/null || true
rm -f "$SOCKET"
sleep 0.5
fi
echo "$name" > "$LAST_PLAYED"
notify-send "🎶 Now Playing" "$name"
echo "[DEBUG] Playing station: $url" >&2
mpv --no-video --input-ipc-server="$SOCKET" --ao=pulse "$url" > /dev/null 2>&1 &
}
stop() {
if [[ -S "$SOCKET" ]]; then
echo "quit" | socat - "$SOCKET" 2>/dev/null || true
rm -f "$SOCKET"
notify-send "⛔ Stopped" "Playback stopped."
else
echo "No stream is currently active."
fi
}
status() {
if [[ -S "$SOCKET" ]]; then
local name
name=$(<"$LAST_PLAYED")
echo "Now playing: $name"
else
echo "sqlch: Not Playing"
fi
}
case "${1:-}" in
play) play "${2:-}" ;;
stop) stop ;;
status) status ;;
*) echo "Usage: sqlchctl {play <name>|stop|status}" ;;
esac
|