From 0e9cd39f81a9635dffd31e1d72229e6ca75d5f84 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Sat, 10 Apr 2021 12:09:53 +0000
Subject: [PATCH] Abspielliste spielen erster Entwurf fertig
---
src/de/uhilger/mediaz/entity/Abspielvorgang.java | 58 ++++++++
src/de/uhilger/mediaz/api/ListHandler.java | 4
src/de/uhilger/mediaz/App.java | 10 +
src/de/uhilger/mediaz/Mediazentrale.java | 27 +++
src/de/uhilger/mediaz/api/FileHandler.java | 6
src/de/uhilger/mediaz/api/StorageHandler.java | 11
src/de/uhilger/mediaz/store/FileStorage.java | 2
src/de/uhilger/mediaz/Initialiser.java | 32 ++++
src/mediaz_de_DE.properties | 6
src/de/uhilger/mediaz/Server.java | 7
src/de/uhilger/mediaz/api/MediaSteuerung.java | 188 +++++++++++++++++++-------
src/de/uhilger/mediaz/api/ListFileHandler.java | 8
src/de/uhilger/mediaz/api/AbstractHandler.java | 40 +++++
13 files changed, 320 insertions(+), 79 deletions(-)
diff --git a/src/de/uhilger/mediaz/App.java b/src/de/uhilger/mediaz/App.java
index 6c9b472..6c311a8 100644
--- a/src/de/uhilger/mediaz/App.java
+++ b/src/de/uhilger/mediaz/App.java
@@ -25,8 +25,10 @@
import java.util.logging.Logger;
/**
- *
- * @author ulrich
+ * Die Hauptklasse der Mediazentrale mit der Methode <code>main</code>.
+ *
+ * @author Ulrich Hilger
+ * @version 1, 25.3.2021
*/
public class App {
@@ -48,11 +50,15 @@
public static final String RB_AP_CTX = "appParamCtx";
public static final String RB_AP_UI = "appParamUi";
public static final String RB_EP_LISTE = "epliste";
+ public static final String RB_AUDIOEXTS = "audioexts";
+ public static final String RB_VIDEOEXTS = "videoexts";
+ public static final String RB_PLAYERPARAMS = "playerparams";
/**
* <p>Start-Methode dieser Anwendung</p>
*
* @param args Kommandozeilenparameter
+ * @throws java.lang.ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
rb = ResourceBundle.getBundle(RB_NAME);
diff --git a/src/de/uhilger/mediaz/Initialiser.java b/src/de/uhilger/mediaz/Initialiser.java
new file mode 100644
index 0000000..37bf3b4
--- /dev/null
+++ b/src/de/uhilger/mediaz/Initialiser.java
@@ -0,0 +1,32 @@
+/*
+ Mediazentrale - Personal Media Center
+ Copyright (C) 2021 Ulrich Hilger
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package de.uhilger.mediaz;
+
+/**
+ * Der Initialiser sorgt fur die Herstellung der Rahmenbedingungen fuer
+ * die Ausfuehrung der App.
+ *
+ * @todo Alle Initialisierungsschritte aus der Kalss App hierher uebertragen
+ *
+ * @author Ulrich Hilger
+ * @version 1, 10.4.2021
+ */
+public class Initialiser {
+
+
+}
diff --git a/src/de/uhilger/mediaz/Mediazentrale.java b/src/de/uhilger/mediaz/Mediazentrale.java
new file mode 100644
index 0000000..feb84ab
--- /dev/null
+++ b/src/de/uhilger/mediaz/Mediazentrale.java
@@ -0,0 +1,27 @@
+/*
+ Mediazentrale - Personal Media Center
+ Copyright (C) 2021 Ulrich Hilger
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package de.uhilger.mediaz;
+
+/**
+ *
+ * @author Ulrich Hilger
+ * @version 1, 10.4.2021
+ */
+public class Mediazentrale {
+
+}
diff --git a/src/de/uhilger/mediaz/Server.java b/src/de/uhilger/mediaz/Server.java
index f662f2f..2f71fc9 100644
--- a/src/de/uhilger/mediaz/Server.java
+++ b/src/de/uhilger/mediaz/Server.java
@@ -56,7 +56,7 @@
public static final String RB_STOP_SERVER = "stopServer";
//public static final String RB_ABLAGE_TEST = "testAblage";
//public static final String RB_STORE_TEST = "testStore";
- public static final String RB_SLASH = "slash";
+ public static final String SLASH = "/";
private int port;
@@ -87,9 +87,8 @@
* @param ctxName Name des Kontexts, unter dem der Server aufrufbar sein soll
*/
public void setContextName(String ctxName) {
- String slash = App.getRs(RB_SLASH);
- if (!ctxName.startsWith(slash)) {
- this.ctx = slash + ctxName;
+ if (!ctxName.startsWith(SLASH)) {
+ this.ctx = SLASH + ctxName;
} else {
this.ctx = ctxName;
}
diff --git a/src/de/uhilger/mediaz/api/AbstractHandler.java b/src/de/uhilger/mediaz/api/AbstractHandler.java
index 038b647..9389ac4 100644
--- a/src/de/uhilger/mediaz/api/AbstractHandler.java
+++ b/src/de/uhilger/mediaz/api/AbstractHandler.java
@@ -48,11 +48,19 @@
/** Name der HTTP Methode DELETE */
public static final String HTTP_DELETE = "DELETE";
+ public static final int RTC_OK = 200;
+ public static final int RTC_NOT_FOUND = 404;
+
+ protected int returnCode;
+
+ public AbstractHandler() {
+ this.returnCode = RTC_OK;
+ }
+
@Override
public void handle(HttpExchange e) throws IOException {
String method = e.getRequestMethod();
String response = "";
- int code = 200;
switch(method) {
case HTTP_GET:
String json = get(e);
@@ -60,7 +68,7 @@
response = json;
} else {
response = "nicht gefunden";
- code = 404;
+ returnCode = RTC_NOT_FOUND;
}
break;
@@ -70,7 +78,6 @@
case HTTP_POST:
response = post(e);
- code = 404;
break;
case HTTP_DELETE:
@@ -82,10 +89,18 @@
}
break;
}
- e.sendResponseHeaders(code, response.length());
+ e.sendResponseHeaders(getReturnCode(), response.length());
OutputStream os = e.getResponseBody();
os.write(response.getBytes());
os.close();
+ }
+
+ protected void setReturnCode(int code) {
+ this.returnCode = code;
+ }
+
+ protected int getReturnCode() {
+ return returnCode;
}
protected String bodyLesen(HttpExchange e) throws IOException {
@@ -102,10 +117,27 @@
return json;
}
+ protected String put(HttpExchange e) throws IOException {
+ setReturnCode(RTC_NOT_FOUND);
+ return "nicht unterstuetzt";
+ }
+
+ protected String post(HttpExchange e) {
+ setReturnCode(RTC_NOT_FOUND);
+ return "nicht unterstuetzt";
+ }
+
+ protected boolean delete(HttpExchange e) {
+ setReturnCode(RTC_NOT_FOUND);
+ return false;
+ }
+
protected abstract String get(HttpExchange e);
+ /*
protected abstract String put(HttpExchange e) throws IOException;
protected abstract String post(HttpExchange e);
protected abstract boolean delete(HttpExchange e);
+ */
}
diff --git a/src/de/uhilger/mediaz/api/FileHandler.java b/src/de/uhilger/mediaz/api/FileHandler.java
index d83a705..5b8f846 100644
--- a/src/de/uhilger/mediaz/api/FileHandler.java
+++ b/src/de/uhilger/mediaz/api/FileHandler.java
@@ -21,7 +21,7 @@
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import de.uhilger.mediaz.App;
-import static de.uhilger.mediaz.Server.RB_SLASH;
+import de.uhilger.mediaz.Server;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -114,7 +114,7 @@
if (headers.containsKey(RANGE_HEADER)) {
serveFileParts(e, new File(fileBase, fName));
} else {
- if (fName.length() < 1 || fName.endsWith(App.getRs(RB_SLASH))) {
+ if (fName.length() < 1 || fName.endsWith(Server.SLASH)) {
fName += App.getRs(RB_WELCOME_FILE);
}
serveFile(e, new File(fileBase, fName));
@@ -316,7 +316,7 @@
sb.append(range.getStart());
sb.append(App.getRs(RB_DASH));
sb.append(range.getEnd());
- sb.append(App.getRs(RB_SLASH));
+ sb.append(Server.SLASH);
sb.append(file.length());
return sb.toString();
}
diff --git a/src/de/uhilger/mediaz/api/ListFileHandler.java b/src/de/uhilger/mediaz/api/ListFileHandler.java
index 3b01afe..4c31548 100644
--- a/src/de/uhilger/mediaz/api/ListFileHandler.java
+++ b/src/de/uhilger/mediaz/api/ListFileHandler.java
@@ -49,14 +49,14 @@
public ListFileHandler(String absoluteDirectoryPathAndName) {
super(absoluteDirectoryPathAndName);
/*
- Nachfolgend hart codiert die Ermittlung von Dateifiltern.
+ Ermittlung von Dateifiltern.
Sie werden erwartet in den Einstellungen 'audioexts' und 'videoexts'
jeweils als Dateierweiterungen mit Komma getrennt
z.B. "mp4,m4v"
*/
FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
- initMap(fs, "audioexts", StorageFile.TYP_AUDIO);
- initMap(fs, "videoexts", StorageFile.TYP_VIDEO);
+ initMap(fs, App.getRs(App.RB_AUDIOEXTS), StorageFile.TYP_AUDIO);
+ initMap(fs, App.getRs(App.RB_VIDEOEXTS), StorageFile.TYP_VIDEO);
}
private void initMap(Storage s, String key, String typ) {
@@ -73,7 +73,7 @@
public void handle(HttpExchange e) throws IOException {
String path = e.getRequestURI().toString();
logger.fine(path);
- if(path.endsWith(App.getRs(Server.RB_SLASH))) {
+ if(path.endsWith(Server.SLASH)) {
String fName = getFileName(e);
logger.fine(fName);
File dir = new File(fileBase, fName);
diff --git a/src/de/uhilger/mediaz/api/ListHandler.java b/src/de/uhilger/mediaz/api/ListHandler.java
index b947f5e..fe5c06e 100644
--- a/src/de/uhilger/mediaz/api/ListHandler.java
+++ b/src/de/uhilger/mediaz/api/ListHandler.java
@@ -47,7 +47,7 @@
@Override
protected String get(HttpExchange e) {
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String[] elems = path.split(Server.SLASH);
String plname = elems[elems.length - 1];
FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
String json = fs.readJson(FileStorage.ST_ABSPIELLISTE, plname);
@@ -57,7 +57,7 @@
@Override
protected String put(HttpExchange e) throws IOException {
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String[] elems = path.split(Server.SLASH);
String response = "ListHandler.put: ungueltiger URL";
switch(elems.length) {
case 5: // ohne nr am Ende
diff --git a/src/de/uhilger/mediaz/api/MediaSteuerung.java b/src/de/uhilger/mediaz/api/MediaSteuerung.java
index f697353..6a7dffb 100644
--- a/src/de/uhilger/mediaz/api/MediaSteuerung.java
+++ b/src/de/uhilger/mediaz/api/MediaSteuerung.java
@@ -20,92 +20,176 @@
import com.sun.net.httpserver.HttpExchange;
import de.uhilger.mediaz.App;
import de.uhilger.mediaz.Server;
+import de.uhilger.mediaz.entity.Abspielvorgang;
import de.uhilger.mediaz.entity.Abspieler;
import de.uhilger.mediaz.entity.Abspielliste;
+import de.uhilger.mediaz.entity.Einstellung;
import de.uhilger.mediaz.entity.Entity;
import de.uhilger.mediaz.entity.Titel;
import de.uhilger.mediaz.store.FileStorage;
-import java.io.IOException;
+import de.uhilger.mediaz.store.Storage;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
- * Die MediaSteuerung verarbeitet HTTP-Signale zur Steuerung von Media-Operationen
- * wie z.B. dem Spielen einer Abspielliste oder dem Starten oder Stoppen eines Videos
- * auf einem entfernten Abspielgeraet.
+ * Die MediaSteuerung verarbeitet HTTP-Signale zur Steuerung von Media-Operationen wie z.B. dem
+ * Spielen einer Abspielliste oder dem Starten oder Stoppen eines Videos auf einem entfernten
+ * Abspielgeraet.
+ *
+ * HTTP GET /mz/api/strg/abspieler/play/liste/[name]
+ * HTTP GET /mz/api/strg/abspieler/ende
+ *
+ * HTTP GET /mz/api/strg/abspieler/play/[url]
+ *
+ * HTTP GET /mz/api/strg/abspieler/pause HTTP GET /mz/api/strg/abspieler/stop HTTP GET
+ * /mz/api/strg/abspieler/weiter
*
- * HTTP GET /mz/api/strg/abspieler/play/liste/[name]
- * HTTP GET /mz/api/strg/abspieler/play/[titel-url]
- * HTTP GET /mz/api/strg/abspieler/pause
- * HTTP GET /mz/api/strg/abspieler/stop
- * HTTP GET /mz/api/strg/abspieler/weiter
- *
- *
+ * Faustregel: Anzahl Elemente eines URL plus 1 ist die Anzahl der Elemente des
+ * Ergebnisses von String.split.
+ *
+ *
* @author Ulrich Hilger
* @version 1, 9.4.2021
*/
public class MediaSteuerung extends AbstractHandler {
private static final Logger logger = Logger.getLogger(MediaSteuerung.class.getName());
-
- private Map spielt = new HashMap();
+
+ public static final String PL_CMD_PLAY = "avd/play";
+ public static final String PL_DEFAULT_PARAMS = "?titel=";
+ public static final String PL_CMD_ENDE = "ende";
+
+ private final Map spielt = new HashMap();
@Override
protected String get(HttpExchange e) {
- String response = "in Arbeit..";
+ String response;
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
- // 4 Player name, 7 listenname
- switch(elems.length) {
+ String[] elems = path.split(Server.SLASH);
+ FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
+
+ // Faustregel: Anzahl Elemente eines URL plus 1 ist die Anzahl der Elemente des
+ // Ergebnisses von String.split.
+ switch (elems.length) {
+ case 6:
+ if (elems[5].equalsIgnoreCase(PL_CMD_ENDE)) {
+ response = naechsterTitel(fs, elems[4]);
+ } else {
+ response = meldung("Ungueltiges Kommando: " + elems[5], AbstractHandler.RTC_NOT_FOUND);
+ }
+ break;
case 8:
- response = play(e, elems[4], elems[7]);
+ response = listenTitelSpielen(fs, elems[4], elems[7]);
+ break;
+ default:
+ response = "Ungueltiger URL";
break;
}
return response;
}
-
- @Override
- protected String put(HttpExchange e) throws IOException {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- protected String post(HttpExchange e) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- protected boolean delete(HttpExchange e) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
- private String play(HttpExchange e, String aName, String lName) {
- FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
- Entity entity = fs.read(FileStorage.ST_ABSPIELER, aName);
- if(entity instanceof Abspieler) {
- Abspieler abspieler = (Abspieler) entity;
- String aUrl = abspieler.getUrl();
- entity = fs.read(FileStorage.ST_ABSPIELLISTE, lName);
- if(entity instanceof Abspielliste) {
+ private String meldung(String text, int code) {
+ setReturnCode(code);
+ return text;
+ }
+
+ private String naechsterTitel(Storage s, String abspielerName) {
+ String response;
+ Object o = spielt.get(abspielerName);
+ if (o instanceof Abspielvorgang) {
+ Abspielvorgang av = (Abspielvorgang) o;
+ Entity entity = s.read(FileStorage.ST_ABSPIELLISTE, av.getListe());
+ if (entity instanceof Abspielliste) {
Abspielliste liste = (Abspielliste) entity;
- Titel titel = liste.getTitel().get(0);
- spielt.put(aName, (int) 0);
- String titelUrl = titel.getKatalogUrl() + titel.getPfad() + titel.getName();
- logger.info("abspielen von " + titelUrl + " auf " + aUrl);
+ int titelNr = av.getTitelNr();
+ if (liste.getTitel().size() > ++titelNr) {
+ response = listenTitelSpielen(s, abspielerName, liste, titelNr);
+ } else {
+ response = "Liste " + liste.getName() + " ist zuende gespielt.";
+ }
+ } else {
+ response = meldung("Abspielliste nicht gefunden.", AbstractHandler.RTC_NOT_FOUND);
}
+ //response = listenTitelSpielen(e, elems[4]);
+ } else {
+ response = meldung("Abspielvorgang fuer Abspieler " + abspielerName, AbstractHandler.RTC_NOT_FOUND);
}
- String response = "Abspielen der Liste " + lName + " auf Abspieler " + aName + " gestartet.";
return response;
}
-
- private String kommando() {
- return "avd/play?th=60&ti=60&o=local&titel=";
+
+ private String listenTitelSpielen(Storage s, String aName, String lName) {
+ String response;
+ Entity entity = s.read(FileStorage.ST_ABSPIELLISTE, lName);
+ if (entity instanceof Abspielliste) {
+ Abspielliste liste = (Abspielliste) entity;
+ response = listenTitelSpielen(s, aName, liste, 0);
+ } else {
+ response = meldung("Abspielliste nicht gefunden.", AbstractHandler.RTC_NOT_FOUND);
+ }
+ return response;
}
-
+
+ private String listenTitelSpielen(Storage s, String aName, Abspielliste liste, int titelNr) {
+ String response;
+ Entity entity = s.read(FileStorage.ST_ABSPIELER, aName);
+ if (entity instanceof Abspieler) {
+ Abspieler abspieler = (Abspieler) entity;
+ String kommando = kommandoFuerTitel(s, liste, abspieler, titelNr);
+ //String kommando = kmd.toString();
+ logger.info(kommando);
+ response = "Abspielen der Liste " + liste.getName() + " auf Abspieler " + aName + " gestartet.";
+ } else {
+ response = meldung("Abspieler nicht gefunden.", AbstractHandler.RTC_NOT_FOUND);
+ }
+ return response;
+ }
+
+ /**
+ * Das Kommando zum Abspielen fuer den Titel einer Abspielliste und einen bestimmten Abspieler
+ * ermitteln.
+ *
+ * @param s die Ablage, in der Abspieler und Abspiellisten zu finden sind
+ * @param liste Name der Liste, die den gewuenschten Titel enthaelt
+ * @param abspieler Name des Abspielers, der zum Abspielen dienen soll
+ * @param titelNr Nummer des Titels in der Liste
+ * @return das Kommando zum Abspielen (ein URL)
+ */
+ private String kommandoFuerTitel(Storage s, Abspielliste liste, Abspieler abspieler, int titelNr) {
+ // ersten Titel aus Liste holen
+ Titel titel = liste.getTitel().get(titelNr);
+
+ // URL des Titels ermitteln
+ String titelUrl = titel.getKatalogUrl() + titel.getPfad() + titel.getName();
+ logger.log(Level.INFO, "abspielen von {0} auf {1}", new Object[]{titelUrl, abspieler.getUrl()});
+
+ // Titel als 'spielt' vermerken
+ Abspielvorgang vorgang = new Abspielvorgang();
+ vorgang.setAbspieler(abspieler.getName());
+ vorgang.setListe(liste.getName());
+ vorgang.setTitelNr(titelNr);
+ spielt.put(abspieler.getName(), vorgang);
+
+ // Kommando an den Abspieler zusammenbauen
+ StringBuilder kmd = new StringBuilder();
+ kmd.append(abspieler.getUrl());
+ kmd.append(PL_CMD_PLAY);
+ // Parameter fuer den Abspieler holen
+ Entity entity = s.read(Einstellung.class.getSimpleName(), App.getRs(App.RB_PLAYERPARAMS));
+ if (entity instanceof Einstellung) {
+ Einstellung einstellung = (Einstellung) entity;
+ kmd.append(einstellung.getValue());
+ } else {
+ kmd.append(PL_DEFAULT_PARAMS);
+ }
+ kmd.append(titelUrl);
+ // hier noch Rueckmeldung anfuegen
+
+ return kmd.toString();
+ }
+
// rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&th=60&ti=60&o=local
// aUrl http://rpi4-wz:9090/
// titelUrl /media/test/A/The-Alan-Parsons-Project/I-Robot/02-I-Wouldnt-Want-to-Be-Like-You.mp3
-
}
diff --git a/src/de/uhilger/mediaz/api/StorageHandler.java b/src/de/uhilger/mediaz/api/StorageHandler.java
index e6521bc..d12e6c1 100644
--- a/src/de/uhilger/mediaz/api/StorageHandler.java
+++ b/src/de/uhilger/mediaz/api/StorageHandler.java
@@ -22,7 +22,6 @@
import de.uhilger.mediaz.App;
import static de.uhilger.mediaz.App.RB_EP_LISTE;
import de.uhilger.mediaz.Server;
-import static de.uhilger.mediaz.Server.RB_SLASH;
import de.uhilger.mediaz.store.FileStorage;
import de.uhilger.mediaz.entity.Entity;
import java.io.IOException;
@@ -43,7 +42,7 @@
@Override
protected String put(HttpExchange e) throws IOException {
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String[] elems = path.split(Server.SLASH);
String type = elems[elems.length - 2];
String elemName = elems[elems.length - 1]; // alter Name, wenn Aenderung
if(!elemName.equalsIgnoreCase(App.getRs(RB_EP_LISTE))) {
@@ -59,7 +58,7 @@
} else {
fs.write(entity, false);
}
- return type + App.getRs(Server.RB_SLASH) + entity.getName();
+ return type + Server.SLASH + entity.getName();
} else {
return "Ungueltiges Objekt im Body.";
}
@@ -70,7 +69,7 @@
private boolean loeschen(HttpExchange e) {
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String[] elems = path.split(Server.SLASH);
String type = elems[elems.length - 2];
String elemName = elems[elems.length - 1];
FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
@@ -79,9 +78,9 @@
private String lesen(HttpExchange e) {
String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String[] elems = path.split(Server.SLASH);
FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
- if(path.endsWith(App.getRs(RB_SLASH))) {
+ if(path.endsWith(Server.SLASH)) {
List list = null;
if(elems[elems.length - 1].equalsIgnoreCase(App.getRs(RB_EP_LISTE))) {
String type = elems[elems.length - 2];
diff --git a/src/de/uhilger/mediaz/entity/Abspielvorgang.java b/src/de/uhilger/mediaz/entity/Abspielvorgang.java
new file mode 100644
index 0000000..f1a2efc
--- /dev/null
+++ b/src/de/uhilger/mediaz/entity/Abspielvorgang.java
@@ -0,0 +1,58 @@
+/*
+ Mediazentrale - Personal Media Center
+ Copyright (C) 2021 Ulrich Hilger
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package de.uhilger.mediaz.entity;
+
+/**
+ * Hier merkt sich die Mediazentrale, welcher Titel einer Abspielliste
+ * gerade spielt.
+ *
+ * @author Ulrich Hilger
+ */
+public class Abspielvorgang {
+
+ private String abspieler;
+
+ public String getAbspieler() {
+ return abspieler;
+ }
+
+ public void setAbspieler(String abspieler) {
+ this.abspieler = abspieler;
+ }
+ private String liste;
+ private int titelNr;
+
+ public String getListe() {
+ return liste;
+ }
+
+ public void setListe(String liste) {
+ this.liste = liste;
+ }
+
+ public int getTitelNr() {
+ return titelNr;
+ }
+
+ public void setTitelNr(int titelNr) {
+ this.titelNr = titelNr;
+ }
+
+
+
+}
diff --git a/src/de/uhilger/mediaz/store/FileStorage.java b/src/de/uhilger/mediaz/store/FileStorage.java
index 7a86477..2d768cf 100644
--- a/src/de/uhilger/mediaz/store/FileStorage.java
+++ b/src/de/uhilger/mediaz/store/FileStorage.java
@@ -137,7 +137,7 @@
}
private String typeNameFromPath(File file) {
- String[] parts = file.getPath().split(App.getRs(Server.RB_SLASH));
+ String[] parts = file.getPath().split(Server.SLASH);
return parts[parts.length-2];
}
diff --git a/src/mediaz_de_DE.properties b/src/mediaz_de_DE.properties
index f5f7892..d33bd5c 100644
--- a/src/mediaz_de_DE.properties
+++ b/src/mediaz_de_DE.properties
@@ -6,6 +6,11 @@
appParamCtx=ctx
appParamUi=ui
+# Parameter der Mediazentrale
+audioexts=audioexts
+videoexts=videoexts
+playerparams=playerparams
+
# HTTP-Endpunkte
webroot=/
# uiroot=/ui
@@ -18,7 +23,6 @@
testStore=/api/test/store
-slash=/
dash=-
bytes=bytes
notFound=nicht gefunden.
--
Gitblit v1.9.3