From a7f0a18275d394ff92e44fcce55a511a54535787 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Mon, 22 Mar 2021 11:57:53 +0000
Subject: [PATCH] Play/Stop erste fertige Fassung

---
 src/de/uhilger/avdirektor/handler/CmdHandler.java  |    2 
 src/de/uhilger/avdirektor/handler/PlayHandler.java |   33 ++++++++++-
 src/de/uhilger/avdirektor/handler/OMXPlayer.java   |   82 ++++++++++++++++++++------
 src/de/uhilger/avdirektor/App.java                 |    8 ++
 4 files changed, 101 insertions(+), 24 deletions(-)

diff --git a/src/de/uhilger/avdirektor/App.java b/src/de/uhilger/avdirektor/App.java
index 9eaac2e..c9552fc 100644
--- a/src/de/uhilger/avdirektor/App.java
+++ b/src/de/uhilger/avdirektor/App.java
@@ -48,6 +48,8 @@
   
   private static HashMap initParams;
   
+  private static Process playerproc;
+  
   /**
    * @param args the command line arguments
    */
@@ -83,5 +85,11 @@
     return param;
   } 
   
+  public static Process getPlayerProcess() {
+    return playerproc;
+  }
   
+  public static void setPlayerProcess(Process p) {
+    playerproc = p;
+  }
 }
diff --git a/src/de/uhilger/avdirektor/handler/CmdHandler.java b/src/de/uhilger/avdirektor/handler/CmdHandler.java
index ac108f4..27b64d0 100644
--- a/src/de/uhilger/avdirektor/handler/CmdHandler.java
+++ b/src/de/uhilger/avdirektor/handler/CmdHandler.java
@@ -30,7 +30,7 @@
     logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString());
     Map map = getQueryMap(t);
     
-    String antwort = this.kommando(t, cmd);
+    String antwort = this.kommando(cmd);
     logger.log(Level.FINE, antwort);
     
     String response = getResponseString(map, "cmd", antwort);
diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java
index dc0a797..252c8ce 100644
--- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java
+++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java
@@ -39,15 +39,50 @@
     }
   }
   
+  /*
+  
+    bei etwas wie
+    http://rpi4-az:9090/avd/play?t=/Filme/S/sound_city.m4v&p=--timeout=60%20--threshold=60
+  
+    sind = nicht nur nach dem Query-Parameter sondern auch in dessen Wert
+    
+    also erstmal nach & zerlegen:
+    t=/Filme/S/sound_city.m4v
+    p=--timeout=60%20--threshold=60
+  
+    dann die Position beim ersten = von links abschneiden
+  
+  */
   protected Map getQueryMap(HttpExchange t) {
     HashMap map = new HashMap();
     String query = t.getRequestURI().getQuery();
     if(query != null && query.length() > 0) {
       String qParts[] = query.split("&");
       for(String qPart : qParts) {
-        //logger.info("qPart: " + qPart);
+        logger.finer("qPart: " + qPart);
         String pParts[] = qPart.split("=");
         map.put(pParts[0], pParts[1]);
+        logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]);
+        /*
+        if(qPart.contains(" ")) {
+          String pParts[] = qPart.split(" ");
+          for(String pPart : pParts) {
+            String ppParts[] = pPart.split("=");
+            map.put(ppParts[0], ppParts[1]);
+            logger.finer("ppParts[0]: " + ppParts[0] + ", ppParts[1]: " + ppParts[1]);
+          }
+        } else {
+          String pParts[] = qPart.split("=");
+          map.put(pParts[0], pParts[1]);
+          logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]);
+        }
+        */
+        /*
+        String pParts[] = qPart.split("=");
+        for(String pPart : pParts) {
+          logger.finer("pPart: " + pPart);
+        }
+        */
       }
     }
     return map;
@@ -78,12 +113,12 @@
    * @param token
    * @return Antwort des Servers
    */
-  public String abspielen(HttpExchange t, String urlStr, String token) {
-    return abspielenMitParametern(t, urlStr, null, token);
+  public String abspielen(String urlStr, String token) {
+    return abspielenMitParametern(urlStr, null, token);
   }
   
-  public String abspielenMitRueckmeldung(HttpExchange t, String urlStr, String meldeUrlStr, String token) {
-    return abspielenMitParameternUndRueckmeldung(t, urlStr, null, meldeUrlStr, token);
+  public String abspielenMitRueckmeldung(String urlStr, String meldeUrlStr, String token) {
+    return abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, token);
   }
   
   /**
@@ -99,16 +134,17 @@
    * @param token
    * @return Antwort des Servers
    */
-  public String abspielenMitParametern(HttpExchange t, String urlStr, String parameter, String token) {
-    return abspielenMitParameternUndRueckmeldung(t, urlStr, parameter, null, token);
+  public String abspielenMitParametern(String urlStr, String parameter, String token) {
+    return abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, token);
   }
   
-  public String abspielenMitParameternUndRueckmeldung(HttpExchange t, String urlStr, String parameter, String meldeUrlStr, String token) {
+  public String abspielenMitParameternUndRueckmeldung(String urlStr, String parameter, String meldeUrlStr, String token) {
     String antwort;// = null;
     try {
-      Object o = t.getAttribute(App.PI_PLAYER);
+      //Object o = t.getAttribute(App.PI_PLAYER);
+      Process o = App.getPlayerProcess();
       if(o != null) {
-        tilgen(t);        
+        tilgen();        
       }
       StringBuilder kommando = new StringBuilder("omxplayer ");
       if(parameter != null) {
@@ -147,7 +183,8 @@
         mt.start();
       }
       //servletContext.setAttribute(App.PI_PLAYER, player_process);
-      t.setAttribute(App.PI_PLAYER, player_process);
+      //t.setAttribute(App.PI_PLAYER, player_process);
+      App.setPlayerProcess(player_process);
       //Runtime.getRuntime().exec("killall dbus-daemon");
       antwort = "Abspielen gestartet, url: " + urlStr;
     }
@@ -171,16 +208,18 @@
    * @param t 
    * @return die Antwort des Servers
    */
-  public String tilgen(HttpExchange t) {
+  public String tilgen() {
     String antwort; // = null;
     try {
-      Object o = t.getAttribute(App.PI_PLAYER);
+      //Object o = t.getAttribute(App.PI_PLAYER);
+      Process o = App.getPlayerProcess();
       if(o == null) {
-        t.setAttribute(App.PI_PLAYER, null);
+        //t.setAttribute(App.PI_PLAYER, null);
+        App.setPlayerProcess(null);
         // t.removeAttribute(App.PI_PLAYER);
         antwort = "Es ist kein Player zum Beenden vorhanden, aber der Servlet-Kontext wurde bereinigt.";
       } else {
-        kommando(t, App.CMD_STOP);
+        kommando(App.CMD_STOP);
         //t.removeAttribute(PI_PLAYER);
         antwort = "Player gestoppt, Kontext bereinigt.";
       }
@@ -199,25 +238,28 @@
    * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a>
    * @return die Antwort des Servers
    */
-  public String kommando(HttpExchange t, String k) {
+  public String kommando(String k) {
     String antwort; // = null;
     try {
-      Object o = t.getAttribute(App.PI_PLAYER);
+      //Object o = t.getAttribute(App.PI_PLAYER);
+      Process o = App.getPlayerProcess();
       if(o == null) {
+        App.setPlayerProcess(null);
         //servletContext.removeAttribute(PI_PLAYER);
-        t.setAttribute(App.PI_PLAYER, null);
+        //t.setAttribute(App.PI_PLAYER, null);
         antwort = "Es wird nichts abgespielt dem ein Kommando gesendet werden kann.";
       } else {
-        Process player_process = (Process) o;
+        Process player_process = o;
         OutputStream os = player_process.getOutputStream();
         Writer out = new BufferedWriter(new OutputStreamWriter(os));
         out.write(k);
         out.flush();
         if(k.equals(App.CMD_STOP)) {
           out.close();
+          App.setPlayerProcess(null);
           //player_process.destroy();
           //player_process = null;
-          t.setAttribute(App.PI_PLAYER, null);
+          //t.setAttribute(App.PI_PLAYER, null);
           //servletContext.removeAttribute(PI_PLAYER);
         }
         antwort = "Kommando '" + k + "' ausgefuehrt.";
diff --git a/src/de/uhilger/avdirektor/handler/PlayHandler.java b/src/de/uhilger/avdirektor/handler/PlayHandler.java
index 304d867..0806ed9 100644
--- a/src/de/uhilger/avdirektor/handler/PlayHandler.java
+++ b/src/de/uhilger/avdirektor/handler/PlayHandler.java
@@ -52,13 +52,40 @@
   
   private static final Logger logger = Logger.getLogger(PlayHandler.class.getName());
 
+  /*
+  rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&to=60&ti=60&o=local
+  
+    OMXPlayer.abspielenMitParameternUndRueckmeldung(
+      String urlStr, String parameter, String meldeUrlStr, String token)
+  
+    Parameter des Aufrufs play als query
+  
+    ?titel=/Filme/S/sound_city.m4v
+    &ti=60
+    &th=60
+    &o=local|hdmi|both
+    &r=http://uhilger.de/mc/api/usw
+  
+    r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist
+
+  */
+  
+  
   @Override
   public void handle(HttpExchange t) throws IOException {
     logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString());
-    Map map = getQueryMap(t);
     
-    String antwort = abspielenMitParameternUndRueckmeldung(t, 
-            getParam(map, "t"), getParam(map, "p"), getParam(map, "r"), "1");    
+    Map map = getQueryMap(t);
+    StringBuilder params = new StringBuilder();
+    params.append("-o ");
+    params.append(getParam(map, "o"));
+    params.append(" --threshold ");
+    params.append(getParam(map, "th"));
+    params.append(" --timeout ");
+    params.append(getParam(map, "ti"));
+    
+    String antwort = abspielenMitParameternUndRueckmeldung( 
+            getParam(map, "titel"), params.toString(), getParam(map, "r"), "1");    
     
     String response = getResponseString(map, "play", antwort);
     t.sendResponseHeaders(200, response.length());

--
Gitblit v1.9.3