From f9dd4f3a00efe7581e9bd620a9b968f122090f7a Mon Sep 17 00:00:00 2001
From: undisclosed
Date: Sun, 22 Jan 2023 13:50:46 +0000
Subject: [PATCH] Experimentell: JavaScript-Player fuer 'hier spielen' bei Abspiellisten

---
 src/de/uhilger/tango/api/MediaSteuerung.java |   36 +++++++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/src/de/uhilger/tango/api/MediaSteuerung.java b/src/de/uhilger/tango/api/MediaSteuerung.java
index 7c75242..7c0c3bd 100644
--- a/src/de/uhilger/tango/api/MediaSteuerung.java
+++ b/src/de/uhilger/tango/api/MediaSteuerung.java
@@ -53,10 +53,20 @@
  *
  * HTTP GET /mz/api/strg/abspieler/pause 
  * HTTP GET /mz/api/strg/abspieler/stop 
+ * HTTP GET /mz/api/strg/abspieler/seek/[sekunden]
  * 
  * Faustregel: Anzahl Elemente eines URL plus 1 ist die Anzahl der Elemente des 
  * Ergebnisses von String.split.
  *
+ * Mit der Funktion ende liefert die MediaSteuerung die Moeglichkeit, Titel aus 
+ * einer Abspielliste gesteuert von Tango abzuspielen. Die Nutzung der Funktion wird 
+ * ausgeloest vom Aufruf an abspieler/play/liste/[name]. Tango erwartet dann von einem 
+ * Abspieler die Rueckmeldung, dass dieser den zuletzt von Tango an den 
+ * Abspieler zum Abspielen uebermittelten Titel zuende abgespielt hat. Tango 
+ * uebergibt dem Abspieler dann den naechsten Titel, bis die Abspielliste zuende ist.
+ * 
+ * Diese Form unterscheidet sich vom Abspielen einer Abspielliste als einzelner 
+ * Stream, wie es vom StreamHandler realisiert wird.
  *
  * @author Ulrich Hilger
  * @version 1, 9.4.2021
@@ -66,18 +76,26 @@
   private static final Logger logger = Logger.getLogger(MediaSteuerung.class.getName());
 
   public static final String PL_CMD_PLAY = "play";
+  public static final String PL_CMD_SEEK = "seek";
   public static final String PL_DEFAULT_PARAMS = "?titel=";
   public static final String PL_PARAM_RUECK = "&r=";
   public static final String PL_API_STRG = "api/strg/"; 
   public static final String PL_CMD_ENDE = "ende";
   public static final String PL_CMD_STOP = "stop";
+  public static final String PL_CMD_VOLDN = "voldn";
+  public static final String PL_CMD_VOLUP = "volup";
   public static final String PL_CMD_PAUSE = "pause";
   public static final String PL_CMD_PLAYON = "weiter";
   public static final String PL_CMD_CALYPSO_STOP = "stop";
+  public static final String PL_CMD_CALYPSO_VOL_INC = "vol-inc";
+  public static final String PL_CMD_CALYPSO_VOL_DEC = "vol-dec";
   public static final String PL_CMD_CALYPSO_PAUSE = "pause";
   public static final String PL_CMD_CALYPSO_PLAYON = "playon";
   public static final String DEFAULT_HOST = "http://localhost:9090";
 
+  public static final String RB_HOST = "host";
+  public static final String RB_PLAYERPARAMS = "playerparams";
+  
   private final Map spielt = new HashMap();
   
   private String conf;
@@ -103,10 +121,22 @@
         } else if(elems[5].equalsIgnoreCase(PL_CMD_STOP)) {
           spielt.remove(elems[4]);
           response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_STOP);
+        } else if(elems[5].equalsIgnoreCase(PL_CMD_VOLDN)) {
+          response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_VOL_DEC);
+        } else if(elems[5].equalsIgnoreCase(PL_CMD_VOLUP)) {
+          response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_VOL_INC);
         } else if(elems[5].equalsIgnoreCase(PL_CMD_PAUSE)) {
           response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_PAUSE);
         //} else if(elems[5].equalsIgnoreCase(PL_CMD_PLAYON)) {
         //  response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_PLAYON);
+        } else {
+          response = meldung("Ungueltiges Kommando: " + elems[5], AbstractHandler.RTC_NOT_FOUND);
+        }
+        break;
+      case 7:
+        if (elems[5].equalsIgnoreCase(PL_CMD_SEEK)) {
+          // /calypso/seek?pos=[sekunden]
+          response = kommandoSenden(fs, elems[4], "seek?pos=" + elems[6]);
         } else {
           response = meldung("Ungueltiges Kommando: " + elems[5], AbstractHandler.RTC_NOT_FOUND);
         }
@@ -156,7 +186,7 @@
         Entity entity = fs.read(FileStorage.ST_ABSPIELER, elems[4]);
         if (entity instanceof Abspieler) {
           Abspieler abspieler = (Abspieler) entity;
-          String server = getEinstellung(fs, getResString(App.RB_HOST), DEFAULT_HOST);
+          String server = getEinstellung(fs, getResString(RB_HOST), DEFAULT_HOST);
           String signal = abspielKommando(fs, abspieler, server, titelUrl, abspielerKmd).toString();
           abspielerKommandoSenden(signal);
           return signal + "gesendet.";
@@ -292,7 +322,7 @@
     vorgang.setTitelNr(titelNr);
     spielt.put(abspieler.getName(), vorgang);
     
-    String server = getEinstellung(s, getResString(App.RB_HOST), DEFAULT_HOST);
+    String server = getEinstellung(s, getResString(RB_HOST), DEFAULT_HOST);
 
     /*
 
@@ -326,7 +356,7 @@
     //kmd.append(PL_CMD_PLAY);
     kmd.append(abspielKmd);
     // Parameter fuer den Abspieler holen
-    kmd.append(getEinstellung(s, getResString(App.RB_PLAYERPARAMS), PL_DEFAULT_PARAMS));
+    kmd.append(getEinstellung(s, getResString(RB_PLAYERPARAMS), PL_DEFAULT_PARAMS));
     kmd.append(server);
     kmd.append(titelUrl);
 

--
Gitblit v1.9.3