/* Calypso - Media Player Remote Control via HTTP for Raspberry Pi Copyright (C) 2021-2023 Ulrich Hilger This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package de.uhilger.calypso.actor; import de.uhilger.calypso.http.Server; import java.io.File; import java.io.IOException; /** * * Der mpv Abspieler erhaelt Kommandos waehrend des Abspielens * ueber Unix Domain Sockets. Da diese erst mit Java 16 untersuetzt * werden und Java 16 fuer den Raspberry Pi noch nicht erhaeltlich * ist, werden diese Kommandos als Shell-Skript unter Verwendung * des Linux-Programms socat gesendet. * * Der Shell Actor fuehrt Skripte aus. Wenn ein Kommando Parameter * erfordert, werden diese aus dem Query-Teil des HTTP-Aufrufes * entnommen. * * * @author Ulrich Hilger */ public class ShellActor { /** * Ein Skript auf der Kommandozeile ausfuehren * * @param skriptDir das Verzeichnis, in dem das Skript liegt * @param kommando der Name des Skript * @throws IOException */ //public void run(String skriptDir, String kommando) throws IOException { // File skriptFile = new File(skriptDir, kommando); // Process p = Runtime.getRuntime().exec(skriptFile.getAbsolutePath()); //} /** * * @param skriptDir das Verzeichnis, in dem das Skript liegt * @param kommando der Name des Skript * @param params die Parameter des Shell-Kommandos, null, wenn keine * @throws IOException */ public void run(String skriptDir, String kommando, String... params) throws IOException { StringBuilder sb = new StringBuilder(); File skriptFile = new File(skriptDir, kommando); sb.append(skriptFile.getAbsolutePath()); if(params instanceof String[]) { for (String param : params) { sb.append(Server.BLANK); sb.append(param); } } Process p = Runtime.getRuntime().exec(sb.toString()); } }