/*
|
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 <https://www.gnu.org/licenses/>.
|
*/
|
|
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());
|
}
|
}
|