From d38b2158e0c48558188caa4b05fc99b24146a4eb Mon Sep 17 00:00:00 2001
From: ulrich
Date: Tue, 25 Mar 2025 08:41:36 +0000
Subject: [PATCH] Option Abspielen mit Untertitel-Datei hinzugefuegt

---
 resources/skripte/seek                      |    4 ++
 src/de/uhilger/calypso/actor/PlayActor.java |   51 +++++++++++++++++++++----
 resources/calypso.properties                |    4 ++
 resources/skripte/pause                     |    3 +
 4 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/resources/calypso.properties b/resources/calypso.properties
new file mode 100644
index 0000000..bd8bdc9
--- /dev/null
+++ b/resources/calypso.properties
@@ -0,0 +1,4 @@
+port=9090
+player=mpv
+ctx=/calypso
+skripte=conf/skripte
diff --git a/resources/skripte/pause b/resources/skripte/pause
new file mode 100644
index 0000000..e478a96
--- /dev/null
+++ b/resources/skripte/pause
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo '{"command": ["cycle", "pause"]}' | socat - /tmp/mpvsocket
diff --git a/resources/skripte/seek b/resources/skripte/seek
new file mode 100644
index 0000000..b44b5cf
--- /dev/null
+++ b/resources/skripte/seek
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo '{"command": ["seek", '$1']}' | socat - /tmp/mpvsocket
+
diff --git a/src/de/uhilger/calypso/actor/PlayActor.java b/src/de/uhilger/calypso/actor/PlayActor.java
index 8ba4878..c9bb4cf 100644
--- a/src/de/uhilger/calypso/actor/PlayActor.java
+++ b/src/de/uhilger/calypso/actor/PlayActor.java
@@ -20,8 +20,8 @@
 
 import de.uhilger.calypso.MeldeThread;
 import de.uhilger.calypso.Rueckmelder;
-import de.uhilger.calypso.http.Server;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -44,25 +44,58 @@
 public class PlayActor {
 
   public Process run(Map parameter) {
+    Logger logger = Logger.getLogger(PlayActor.class.getName());
     String meldeUrlStr = null;
     Object o = parameter.get("r");
     if (o instanceof String) {
       meldeUrlStr = (String) o;
     }
 
-    StringBuilder kommando = new StringBuilder();
+    //StringBuilder kommando = new StringBuilder();
+    ArrayList<String> kommando = new ArrayList<>();
     o = parameter.get("titel");
     if (o instanceof String) {
       String titel = (String) o;
-      kommando.append("mpv --input-ipc-server=/tmp/mpvsocket --no-terminal --no-sub ");
-      if (titel.toLowerCase().endsWith(".mp3")) {
-        kommando.append("--vo=null ");
+      //kommando.append("mpv --input-ipc-server=/tmp/mpvsocket --no-terminal --no-sub ");
+      kommando.add("mpv");
+      kommando.add("--input-ipc-server=/tmp/mpvsocket");
+      kommando.add("--no-terminal");
+      
+      /*
+        wenn eine Untertitel-Datei verwendet werden soll, kommt von Tango
+        &sub=on im Abspiel-URL zu Calypso.
+      
+        Calypso muss das umsetzen zu --sub-file=[Name des Videos mit Endung .srt], 
+        was voraussetzt, dass die gewuenschten Untertitel auf dem Server stets 
+        in einer Datei vorliegen, die so heisst wie das Video und die Endung .srt hat.
+      
+        Kommt von Tango der Abspiel-URL ohne den Zusatz &sub=on, muss stattdessen 
+        die Untertitel-Anzeige von mpv ausgeschaltet werden, damit nicht unkontrolliert 
+        irgendwelche Untertitel ausgegeben werden. Der Parameter fuer mpv lautet 
+        dann --no-sub
+      */
+      
+      if(parameter.get("sub") != null) {
+        StringBuilder subFileStr = new StringBuilder();
+        logger.log(Level.FINEST, "titel: {0}", titel);
+        subFileStr.append("--sub-file=");
+        subFileStr.append(titel.substring(0, titel.lastIndexOf(".")));
+        subFileStr.append(".srt");
+        kommando.add(subFileStr.toString());
+        logger.log(Level.FINEST, "subFileStr: {0}", subFileStr.toString());
+      } else {      
+        kommando.add("--no-sub");
       }
-      kommando.append(titel);
-      Logger.getLogger(PlayActor.class.getName()).log(Level.FINE, kommando.toString());
+      if (titel.toLowerCase().endsWith(".mp3")) {
+        //kommando.append("--vo=null ");
+        kommando.add("--vo=null");
+      }
+      //kommando.append(titel);
+      kommando.add(titel);
+      logger.log(Level.FINE, kommando.toString());
       Process player_process;
       try {
-        player_process = Runtime.getRuntime().exec(kommando.toString());
+        player_process = Runtime.getRuntime().exec(kommando.toArray(String[]::new));
         if (meldeUrlStr != null) {
           MeldeThread mt = new MeldeThread();
           mt.setProcess(player_process);
@@ -72,7 +105,7 @@
         }
         return player_process;
       } catch (IOException ex) {
-        Logger logger = Logger.getLogger(PlayActor.class.getName());
+        logger = Logger.getLogger(PlayActor.class.getName());
         logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
         ex.printStackTrace();
         return null;

--
Gitblit v1.9.3