From 7f44143e08ee4ed5d9c89efe5e0592d2c5b39dd8 Mon Sep 17 00:00:00 2001
From: undisclosed
Date: Sun, 29 Jan 2023 17:04:48 +0000
Subject: [PATCH] Titel entfernen bei spielender Abspielliste berichtigt

---
 src/de/uhilger/tango/api/MediaSteuerung.java |   45 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/src/de/uhilger/tango/api/MediaSteuerung.java b/src/de/uhilger/tango/api/MediaSteuerung.java
index b499372..e6ce428 100644
--- a/src/de/uhilger/tango/api/MediaSteuerung.java
+++ b/src/de/uhilger/tango/api/MediaSteuerung.java
@@ -19,6 +19,7 @@
 
 import com.google.gson.Gson;
 import com.sun.net.httpserver.HttpExchange;
+import de.uhilger.tango.PlaylistListener;
 import de.uhilger.tango.Server;
 import de.uhilger.tango.entity.Abspielvorgang;
 import de.uhilger.tango.entity.Abspieler;
@@ -31,8 +32,11 @@
 import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -42,12 +46,13 @@
  * 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 
@@ -69,7 +74,7 @@
  * @author Ulrich Hilger
  * @version 1, 9.4.2021
  */
-public class MediaSteuerung extends AbstractHandler {
+public class MediaSteuerung extends AbstractHandler implements PlaylistListener {
 
   private static final Logger logger = Logger.getLogger(MediaSteuerung.class.getName());
 
@@ -84,6 +89,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";
@@ -127,6 +133,9 @@
           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);
         }
@@ -156,9 +165,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 {
@@ -383,4 +396,26 @@
     setReturnCode(code);
     return text;
   }
+
+  /* ------- PlaylistListener implementation ------ */
+  
+  @Override
+  public void titleRemoved(String listName, int titleIndex) {
+    Set keys = spielt.keySet();
+    Iterator<String> keyIterator = keys.iterator();
+    boolean found = false;
+    while(keyIterator.hasNext() && !found) {
+      String abspielerName = keyIterator.next();
+      Abspielvorgang av = (Abspielvorgang) spielt.get(abspielerName);
+      if(av.getListe().equals(listName)) {
+        found = true;
+        int tnr = av.getTitelNr();
+        if(tnr > titleIndex) {
+          av.setTitelNr(--tnr);
+          logger.info("Abspieler " + abspielerName + " Liste " + av.getListe() + " titelnr jetzt " + tnr);
+          spielt.put(abspielerName, av);
+        }
+      }
+    }
+  }
 }

--
Gitblit v1.9.3