From 183d3e0c669aa8882c994c8ef756e1ac1d61fd7d Mon Sep 17 00:00:00 2001
From: undisclosed
Date: Sun, 29 Jan 2023 16:01:40 +0000
Subject: [PATCH] Funktion 'naechster Titel' beim Abspielen von Abspiellisten eingebaut

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

diff --git a/src/de/uhilger/tango/api/MediaSteuerung.java b/src/de/uhilger/tango/api/MediaSteuerung.java
index 7d3fda7..ba89537 100644
--- a/src/de/uhilger/tango/api/MediaSteuerung.java
+++ b/src/de/uhilger/tango/api/MediaSteuerung.java
@@ -19,12 +19,10 @@
 
 import com.google.gson.Gson;
 import com.sun.net.httpserver.HttpExchange;
-import de.uhilger.tango.App;
 import de.uhilger.tango.Server;
 import de.uhilger.tango.entity.Abspielvorgang;
 import de.uhilger.tango.entity.Abspieler;
 import de.uhilger.tango.entity.Abspielliste;
-import de.uhilger.tango.entity.Einstellung;
 import de.uhilger.tango.entity.Entity;
 import de.uhilger.tango.entity.Livestream;
 import de.uhilger.tango.entity.Titel;
@@ -44,19 +42,30 @@
  * Abspielgeraet.
  *
  * HTTP GET /mz/api/strg/abspieler/play/liste/[name] 
+ * HTTP GET /mz/api/strg/abspieler/next
  * HTTP GET /mz/api/strg/abspieler/ende
  *
  * HTTP POST /mz/api/strg/abspieler/play/titel mit dem Titel im Body
  * HTTP POST /mz/api/strg/abspieler/play/stream mit dem Livestream im Body (nur Name gefuellt)
  * 
- * HTTP POST /mz/api/strg/abspieler/weiter/titel mit dem Titel im Body
+ * DEPRECATED: HTTP POST /mz/api/strg/abspieler/weiter/titel mit dem Titel im Body
  *
  * 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,6 +75,7 @@
   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/"; 
@@ -75,6 +85,7 @@
   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_NEXT = "next";
   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";
@@ -118,6 +129,17 @@
           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 if(elems[5].equalsIgnoreCase(PL_CMD_NEXT)) {
+          response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_STOP);
+          //response = naechsterTitel(fs, elems[4]);
+        } 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);
         }
@@ -139,9 +161,13 @@
     String path = e.getRequestURI().toString();
     String[] elems = path.split(Server.SLASH);
     logger.info(elems[5]);
-    if(elems[5].equalsIgnoreCase(PL_CMD_PLAYON)) {
-      abspielerKmd = PL_CMD_CALYPSO_PLAYON;
-    } else if(elems[5].equalsIgnoreCase(PL_CMD_PLAY)){
+    // PLAYON ist deprecated
+    //if(elems[5].equalsIgnoreCase(PL_CMD_PLAYON)) {
+    //  abspielerKmd = PL_CMD_CALYPSO_PLAYON;
+    //} else if(elems[5].equalsIgnoreCase(PL_CMD_PLAY)){
+    //  abspielerKmd = PL_CMD_PLAY;
+    //}
+    if(elems[5].equalsIgnoreCase(PL_CMD_PLAY)){
       abspielerKmd = PL_CMD_PLAY;
     }
     try {
@@ -343,22 +369,7 @@
 
     return kmd;    
   }
-  
-  private String getEinstellung(Storage s, String key, String standardWert) {
-    Entity entity = s.read(Einstellung.class.getSimpleName(), key);
-    if (entity instanceof Einstellung) {
-      Einstellung einstellung = (Einstellung) entity;
-      Object o = einstellung.getValue();
-      if(o instanceof String) {
-        return o.toString();
-      } else {
-        return standardWert;
-      }
-    } else {
-      return standardWert;
-    }
-  }
-  
+    
   private void abspielerKommandoSenden(String kommando) {
     /*
       TODO hier evtl. mit mehreren Versuchen ausgleichen, 

--
Gitblit v1.9.3