#!/bin/sh # Lyrion Music Server RPCD handler . /lib/functions.sh CONFIG="lyrion" uci_get() { uci -q get ${CONFIG}.main.$1; } get_status() { local port=$(uci_get port) local data_path=$(uci_get data_path) local media_path=$(uci_get media_path) port=${port:-9000} # Check running state local running=0 if command -v lxc-info >/dev/null 2>&1 && lxc-info -n lyrion -s 2>/dev/null | grep -q "RUNNING"; then running=1 elif command -v docker >/dev/null 2>&1 && docker ps --filter "name=secbx-lyrion" -q 2>/dev/null | grep -q .; then running=1 fi # Check installed local installed=0 [ -d "/srv/lxc/lyrion/rootfs" ] && installed=1 [ "$installed" = "0" ] && command -v docker >/dev/null 2>&1 && docker images 2>/dev/null | grep -q lyrionmusicserver && installed=1 # Detect runtime local runtime="none" command -v lxc-start >/dev/null 2>&1 && runtime="lxc" [ "$runtime" = "none" ] && command -v docker >/dev/null 2>&1 && runtime="docker" # Check web access local web_accessible=0 [ "$running" = "1" ] && wget -q -O /dev/null --timeout=2 "http://127.0.0.1:${port}/" 2>/dev/null && web_accessible=1 # Get library stats if running local songs=0 albums=0 artists=0 if [ "$running" = "1" ]; then local resp=$(curl -s --max-time 2 "http://127.0.0.1:${port}/jsonrpc.js" \ -H "Content-Type: application/json" \ -d '{"id":1,"method":"slim.request","params":["",["serverstatus",0,0]]}' 2>/dev/null) if [ -n "$resp" ]; then songs=$(echo "$resp" | jsonfilter -e '@.result["info total songs"]' 2>/dev/null || echo 0) albums=$(echo "$resp" | jsonfilter -e '@.result["info total albums"]' 2>/dev/null || echo 0) artists=$(echo "$resp" | jsonfilter -e '@.result["info total artists"]' 2>/dev/null || echo 0) fi fi cat </dev/null 2>&1; then lyrionctl install >/tmp/lyrion-install.log 2>&1 & echo '{"success":true}' else echo '{"success":false,"error":"lyrionctl not found"}' fi } do_start() { [ -x /etc/init.d/lyrion ] && /etc/init.d/lyrion start >/dev/null 2>&1 echo '{"success":true}' } do_stop() { [ -x /etc/init.d/lyrion ] && /etc/init.d/lyrion stop >/dev/null 2>&1 echo '{"success":true}' } do_rescan() { local port=$(uci_get port) curl -s --max-time 3 "http://127.0.0.1:${port:-9000}/jsonrpc.js" \ -H "Content-Type: application/json" \ -d '{"id":1,"method":"slim.request","params":["",["rescan","full"]]}' >/dev/null 2>&1 echo '{"success":true}' } case "$1" in list) echo '{"status":{},"install":{},"start":{},"stop":{},"rescan":{}}' ;; call) case "$2" in status) get_status ;; install) do_install ;; start) do_start ;; stop) do_stop ;; rescan) do_rescan ;; *) echo '{"error":"Unknown method"}' ;; esac ;; esac