Persoenliche Mediazentrale
ulrich
2021-04-12 1c5fa42ec09b357f922d882739b80b6630fd83f7
Katalog-URL direkt abspielen fertig
2 files modified
81 ■■■■ changed files
src/de/uhilger/mediaz/api/MediaSteuerung.java 67 ●●●● patch | view | raw | blame | history
www/ui/js/app.js 14 ●●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/api/MediaSteuerung.java
@@ -17,6 +17,7 @@
 */
package de.uhilger.mediaz.api;
import com.google.gson.Gson;
import com.sun.net.httpserver.HttpExchange;
import de.uhilger.mediaz.App;
import de.uhilger.mediaz.Server;
@@ -44,7 +45,7 @@
 * 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 POST /mz/api/strg/abspieler/play mit dem Titel im Body
 *
 * HTTP GET /mz/api/strg/abspieler/pause 
 * HTTP GET /mz/api/strg/abspieler/stop 
@@ -102,11 +103,7 @@
        }
        break;
      case 8:
        if(elems[6].equalsIgnoreCase("liste")) {
          response = ersterTitel(fs, elems[4], elems[7]);
        } else {
          response = urlAbspielen(fs, elems);
        }
        break;
      default:
        response = "Ungueltiger URL";
@@ -115,13 +112,41 @@
    return response;
  }
  
  private String urlAbspielen(Storage s, String[] elems) {
    String abspielerName = elems[4];
    StringBuilder url = new StringBuilder();
    url.append(url)
    for(int i = 6; i < elems.length - 1; i++) {
      url.append(Server.SLASH);
      url.append(elems[i]);
  @Override
  protected String post(HttpExchange e) {
    String response;
    try {
      return urlAbspielen(e);
    } catch (IOException ex) {
      logger.log(Level.SEVERE, null, ex);
      return meldung(ex.getLocalizedMessage(), 404);
    }
  }
  // titel.katalogUrl + titel.pfad + titel.name
  private String urlAbspielen(HttpExchange e) throws IOException {
    String path = e.getRequestURI().toString();
    String[] elems = path.split(Server.SLASH);
    FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
    String titelJson = bodyLesen(e);
    Gson gson = new Gson();
    Object o = gson.fromJson(titelJson, fs.typeFromName(Titel.class.getSimpleName()).getType());
    if(o instanceof Titel) {
      Titel titel = (Titel) o;
      String titelUrl = titel.getKatalogUrl() + titel.getPfad() + titel.getName();
      Entity entity = fs.read(FileStorage.ST_ABSPIELER, elems[4]);
      if (entity instanceof Abspieler) {
        Abspieler abspieler = (Abspieler) entity;
        String server = getEinstellung(fs, App.getRs(App.RB_HOST), DEFAULT_HOST);
        String signal = abspielKommando(fs, abspieler, server, titelUrl).toString();
        abspielerKommandoSenden(signal);
        return signal + "gesendet.";
      } else {
        return meldung("Ungueltiger Abspieler.", 404);
      }
    } else {
      return meldung("Ungueltiger Titel.", 404);
    }
  }
  
@@ -220,6 +245,8 @@
    
    String server = getEinstellung(s, App.getRs(App.RB_HOST), DEFAULT_HOST);
    /*
    // Kommando an den Abspieler zusammenbauen
    StringBuilder kmd = new StringBuilder();
    kmd.append(abspieler.getUrl());
@@ -228,6 +255,8 @@
    kmd.append(getEinstellung(s, App.getRs(App.RB_PLAYERPARAMS), PL_DEFAULT_PARAMS));
    kmd.append(server);
    kmd.append(titelUrl);
    */
    StringBuilder kmd = abspielKommando(s, abspieler, server, titelUrl);
    kmd.append(PL_PARAM_RUECK);
    kmd.append(server);
    kmd.append(PL_API_STRG);
@@ -237,6 +266,20 @@
    return kmd.toString();
  }
  
  private StringBuilder abspielKommando(Storage s, Abspieler abspieler, String server, String titelUrl) {
    // Kommando an den Abspieler zusammenbauen
    StringBuilder kmd = new StringBuilder();
    kmd.append(abspieler.getUrl());
    kmd.append(PL_CMD_PLAY);
    // Parameter fuer den Abspieler holen
    kmd.append(getEinstellung(s, App.getRs(App.RB_PLAYERPARAMS), PL_DEFAULT_PARAMS));
    kmd.append(server);
    kmd.append(titelUrl);
    return kmd;
  }
  private String getEinstellung(Storage s, String key, String standardWert) {
    Entity entity = s.read(Einstellung.class.getSimpleName(), key);
    if (entity instanceof Einstellung) {
www/ui/js/app.js
@@ -313,24 +313,16 @@
      } else {
        titel = new Titel(titelName, self.mediaPfad + '/', self.ortPfad, interpret, anzName, album);
      }
      var player_sel = document.querySelector('#abspieler');
      var playername = player_sel.value;
      var playername = document.querySelector('#abspieler').value;
      /*
      self.http_put('../api/alist/' + plname, JSON.stringify(titel), function(responseText) {
        //self.meldung_mit_timeout(responseText, 1500);
      });
      HTTP GET /mz/api/strg/abspieler/play/[url]
      HTTP POST /mz/api/strg/abspieler/play mit Titel im Body
      
      url: /media/test/M/Muenchener-Freiheit/01-Ohne-Dich-schlaf-ich-heut-Nacht-nicht-ein.mp3
      /mz/api/strg/abspieler/play/media/test/M/Muenchener-Freiheit/01-Ohne-Dich-schlaf-ich-heut-Nacht-nicht-ein.mp3
      */
      console.log('plname: ' + playername + ' url: ' + titel.katalogUrl + titel.pfad + titel.name);
      self.http_get('../api/strg/' + playername + titel.katalogUrl + titel.pfad + titel.name, function(responseText) {
      self.http_post('../api/strg/' + playername, JSON.stringify(titel), function(responseText) {
        self.meldung_mit_timeout(responseText, 1500);
      });
    } else {
      var abs = document.querySelector('#abspieler').value;
      var lst = document.querySelector('#playlist').value;