80 lines
2.2 KiB
Bash
Executable File
80 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Paths
|
|
MPV_SOCKET="/tmp/mpv-socket"
|
|
WEB_ROOT="/home/xbl/z4z"
|
|
COVER_PATH="$WEB_ROOT/cover.jpg"
|
|
WEB_HTML="$WEB_ROOT/index.html"
|
|
INTERVAL=0.5
|
|
|
|
last_path=""
|
|
|
|
while true; do
|
|
# Get current file path, pause state, state
|
|
path=$(echo '{ "command": ["get_property", "path"] }' | socat - "$MPV_SOCKET" 2>/dev/null | jq -r '.data')
|
|
paused=$(echo '{ "command": ["get_property", "pause"] }' | socat - "$MPV_SOCKET" 2>/dev/null | jq -r '.data // false')
|
|
|
|
# If MPV is stopped
|
|
if [[ -z "$path" || "$path" == "null" ]]; then
|
|
last_path=""
|
|
# Write "Not Playing" HTML
|
|
cat > "$WEB_HTML" <<EOF
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Now Playing</title>
|
|
<link rel="stylesheet" href="/style.css">
|
|
</head>
|
|
<body>
|
|
<h2>Not Playing</h2>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
sleep "$INTERVAL"
|
|
continue
|
|
fi
|
|
|
|
# If track changed
|
|
if [[ "$path" != "$last_path" ]]; then
|
|
last_path="$path"
|
|
|
|
# Extract cover art (first video stream / album art)
|
|
ffmpeg -y -i "$path" -map 0:v? -c copy "$COVER_PATH" 2>/dev/null || rm -f "$COVER_PATH"
|
|
|
|
# Fetch metadata
|
|
metadata=$(echo '{ "command": ["get_property", "metadata"] }' | socat - "$MPV_SOCKET")
|
|
title=$(echo "$metadata" | jq -r '.data.title // .data.TITLE // empty')
|
|
artist=$(echo "$metadata" | jq -r '.data.artist // .data.ARTIST // empty')
|
|
album=$(echo "$metadata" | jq -r '.data.album // .data.ALBUM // empty')
|
|
year=$(echo "$metadata" | jq -r '.data.date // .data.DATE // empty')
|
|
|
|
# Write index.html dynamically
|
|
cat > "$WEB_HTML" <<EOF
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Now Playing</title>
|
|
<link rel="stylesheet" href="/style.css">
|
|
</head>
|
|
<body>
|
|
EOF
|
|
|
|
# Add cover if exists
|
|
if [[ -f "$COVER_PATH" ]]; then
|
|
echo "<img id=\"cover\" src=\"/cover.jpg\" alt=\"Cover\">" >> "$WEB_HTML"
|
|
fi
|
|
|
|
# Add metadata
|
|
echo "<div id=\"overlay\">" >> "$WEB_HTML"
|
|
echo "<h1>$artist - $title</h1>" >> "$WEB_HTML"
|
|
echo "<h2>$album ($year)</h2>" >> "$WEB_HTML"
|
|
echo "</div>" >> "$WEB_HTML"
|
|
|
|
echo "</body></html>" >> "$WEB_HTML"
|
|
fi
|
|
|
|
sleep "$INTERVAL"
|
|
done
|