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