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 |   28 +++++++++++++
 src/de/uhilger/tango/api/ListHandler.java    |   25 ++++++++++++
 src/de/uhilger/tango/PlaylistListener.java   |    9 ++++
 www/js/app.js                                |    5 ++
 src/de/uhilger/tango/Server.java             |    7 ++-
 5 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/de/uhilger/tango/PlaylistListener.java b/src/de/uhilger/tango/PlaylistListener.java
new file mode 100644
index 0000000..937f381
--- /dev/null
+++ b/src/de/uhilger/tango/PlaylistListener.java
@@ -0,0 +1,9 @@
+package de.uhilger.tango;
+
+/**
+ *
+ * @author Ulrich Hilger
+ */
+public interface PlaylistListener {
+  public void titleRemoved(String listName, int titleIndex);
+}
diff --git a/src/de/uhilger/tango/Server.java b/src/de/uhilger/tango/Server.java
index e29c01f..1a56b0d 100644
--- a/src/de/uhilger/tango/Server.java
+++ b/src/de/uhilger/tango/Server.java
@@ -121,9 +121,12 @@
     server.createContext(ctx + rb.getString(RB_WEBROOT), new FileHandler(wwwDir.getAbsolutePath()));
     ablageorteEinklinken(server, rb, conf);
     server.createContext(ctx + rb.getString(RB_STORE), new StorageHandler(conf));
-    server.createContext(ctx + rb.getString(RB_STRG), new MediaSteuerung(conf));
+    MediaSteuerung ms = new MediaSteuerung(conf);
+    server.createContext(ctx + rb.getString(RB_STRG), ms);
     server.createContext(ctx + rb.getString(RB_GSTRG), new GeraetSteuerung(conf));
-    server.createContext(ctx + rb.getString(RB_ALIST), new ListHandler(conf));
+    ListHandler lh = new ListHandler(conf);
+    lh.addPlaylistListener(ms);
+    server.createContext(ctx + rb.getString(RB_ALIST), lh);
     server.createContext(ctx + rb.getString(RB_STRM), new StreamHandler(conf));
     server.createContext(ctx + rb.getString(RB_STOP_SERVER), new StopServerHandler());
     //server.setExecutor(Executors.newFixedThreadPool(20));
diff --git a/src/de/uhilger/tango/api/ListHandler.java b/src/de/uhilger/tango/api/ListHandler.java
index 490fd4c..341456c 100644
--- a/src/de/uhilger/tango/api/ListHandler.java
+++ b/src/de/uhilger/tango/api/ListHandler.java
@@ -20,12 +20,15 @@
 import com.google.gson.Gson;
 import com.sun.net.httpserver.Headers;
 import com.sun.net.httpserver.HttpExchange;
+import de.uhilger.tango.PlaylistListener;
 import de.uhilger.tango.Server;
 import de.uhilger.tango.entity.Abspielliste;
 import de.uhilger.tango.entity.Entity;
 import de.uhilger.tango.entity.Titel;
 import de.uhilger.tango.store.FileStorage;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.logging.Logger;
 
@@ -58,8 +61,11 @@
   
   private String conf;
   
+  private List<PlaylistListener> listeners;
+  
   public ListHandler(String conf) {
     this.conf = conf;
+    listeners = new ArrayList();
   }
 
   @Override
@@ -242,7 +248,9 @@
       if(titelStr.equalsIgnoreCase(ALLE_TITEL)) {
         liste.getTitel().clear();
       } else {
-        liste.getTitel().remove(Integer.parseInt(elems[elems.length-1]));
+        int idx = Integer.parseInt(elems[elems.length-1]);
+        liste.getTitel().remove(idx);
+        sendRemovalInfo(liste.getName(), idx);
       }
       fs.write(liste, true);
       return true;
@@ -251,4 +259,19 @@
     }
   }
   
+  private void sendRemovalInfo(String listName, int titleIndex) {
+    Iterator<PlaylistListener> i = listeners.iterator();
+    while(i.hasNext()) {
+      PlaylistListener l = i.next();
+      l.titleRemoved(listName, titleIndex);
+    }
+  }
+  
+  public void addPlaylistListener(PlaylistListener listener) {
+    this.listeners.add(listener);
+  }
+  
+  public void removePlaylistListener(PlaylistListener listener) {
+    this.listeners.remove(listener);
+  }
 }
diff --git a/src/de/uhilger/tango/api/MediaSteuerung.java b/src/de/uhilger/tango/api/MediaSteuerung.java
index ba89537..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;
 
@@ -70,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());
 
@@ -392,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);
+        }
+      }
+    }
+  }
 }
diff --git a/www/js/app.js b/www/js/app.js
index a22f03f..bb65b97 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -727,6 +727,11 @@
     self.http_delete('api/alist/' + plname + '/' + index,'', function(responseText) {
       // DELETE	http://localhost:9090/mz/api/alist/liste1/0
       //self.meldung_mit_timeout(responseText, 1500);
+      if(self.playingList === plname) {
+        if(self.playingIndex > index) {
+          --self.playingIndex;
+        }
+      }
       self.titel_liste();
     });
     

--
Gitblit v1.9.3