Persoenliche Mediazentrale
ulrich
2021-04-26 c6fdc483f9e98ae0e461fd58a012584f21c40582
Weiterspielen repariert
2 files modified
62 ■■■■ changed files
src/de/uhilger/tango/api/MediaSteuerung.java 42 ●●●●● patch | view | raw | blame | history
www/ui/js/app.js 20 ●●●● patch | view | raw | blame | history
src/de/uhilger/tango/api/MediaSteuerung.java
@@ -49,9 +49,11 @@
 * 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
 *
 * HTTP GET /mz/api/strg/abspieler/pause 
 * HTTP GET /mz/api/strg/abspieler/stop 
 * HTTP GET /mz/api/strg/abspieler/weiter
 * FALSCH: HTTP GET /mz/api/strg/abspieler/weiter
 * 
 * Faustregel: Anzahl Elemente eines URL plus 1 ist die Anzahl der Elemente des 
 * Ergebnisses von String.split.
@@ -71,7 +73,7 @@
  public static final String PL_CMD_ENDE = "ende";
  public static final String PL_CMD_STOP = "stop";
  public static final String PL_CMD_PAUSE = "pause";
  public static final String PL_CMD_PLAYON = "playon";
  public static final String PL_CMD_PLAYON = "weiter";
  public static final String PL_CMD_CALYPSO_STOP = "stop";
  public static final String PL_CMD_CALYPSO_PAUSE = "pause";
  public static final String PL_CMD_CALYPSO_PLAYON = "playon";
@@ -98,8 +100,8 @@
          response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_STOP);
        } else if(elems[5].equalsIgnoreCase(PL_CMD_PAUSE)) {
          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_PLAYON)) {
        //  response = kommandoSenden(fs, elems[4], PL_CMD_CALYPSO_PLAYON);
        } else {
          response = meldung("Ungueltiges Kommando: " + elems[5], AbstractHandler.RTC_NOT_FOUND);
        }
@@ -117,8 +119,17 @@
  @Override
  protected String post(HttpExchange e) {
    String response;
    String abspielerKmd = PL_CMD_PLAY;
    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)){
      abspielerKmd = PL_CMD_PLAY;
    }
    try {
      return urlAbspielen(e);
      return urlAbspielen(e, abspielerKmd);
    } catch (IOException ex) {
      logger.log(Level.SEVERE, null, ex);
      return meldung(ex.getLocalizedMessage(), 404);
@@ -126,11 +137,11 @@
  }
  
  // titel.katalogUrl + titel.pfad + titel.name
  private String urlAbspielen(HttpExchange e) throws IOException {
  private String urlAbspielen(HttpExchange e, String abspielerKmd) 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)));
    if(elems[5].equalsIgnoreCase("titel")) {
    if(elems[6].equalsIgnoreCase("titel")) {
      String titelJson = bodyLesen(e);
      Gson gson = new Gson();
      Object o = gson.fromJson(titelJson, fs.typeFromName(Titel.class.getSimpleName()).getType());
@@ -141,7 +152,7 @@
        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();
          String signal = abspielKommando(fs, abspieler, server, titelUrl, abspielerKmd).toString();
          abspielerKommandoSenden(signal);
          return signal + "gesendet.";
        } else {
@@ -150,7 +161,7 @@
      } else {
        return meldung("Ungueltiger Titel.", 404);
      }
    } else if(elems[5].equalsIgnoreCase("stream")) {
    } else if(elems[6].equalsIgnoreCase("stream")) {
      String streamJson = bodyLesen(e);
      Gson gson = new Gson();
      Object o = gson.fromJson(streamJson, fs.typeFromName(Livestream.class.getSimpleName()).getType());
@@ -162,7 +173,7 @@
          if (entity instanceof Abspieler) {
            Abspieler abspieler = (Abspieler) entity;
            String server = "";
            String signal = abspielKommando(fs, abspieler, server, stream.getUrl()).toString();
            String signal = abspielKommando(fs, abspieler, server, stream.getUrl(), PL_CMD_PLAY).toString();
            abspielerKommandoSenden(signal);
            return signal + "gesendet.";
          } else {
@@ -179,6 +190,7 @@
    }
  }
  
  private String kommandoSenden(Storage s, String aName, String kommando) {
    Entity entity = s.read(FileStorage.ST_ABSPIELER, aName);
    if (entity instanceof Abspieler) {
@@ -187,12 +199,15 @@
      kmd.append(abspieler.getUrl());
      kmd.append(kommando);
      String signal = kmd.toString();
      //String server = getEinstellung(s, App.getRs(App.RB_HOST), DEFAULT_HOST);
      //String signal = abspielKommando(s, abspieler, server, stream.getUrl(), PL_CMD_PLAY).toString();
      abspielerKommandoSenden(signal);
      return signal + " gesendet.";
    } else {
      return meldung("Abspielliste nicht gefunden.", AbstractHandler.RTC_NOT_FOUND);
    }
  }
  
  private String ersterTitel(Storage s, String aName, String lName) {
    String response;
@@ -285,7 +300,7 @@
    kmd.append(server);
    kmd.append(titelUrl);
    */
    StringBuilder kmd = abspielKommando(s, abspieler, server, titelUrl);
    StringBuilder kmd = abspielKommando(s, abspieler, server, titelUrl, PL_CMD_PLAY);
    kmd.append(PL_PARAM_RUECK);
    kmd.append(server);
    kmd.append(PL_API_STRG);
@@ -295,12 +310,13 @@
    return kmd.toString();
  }
  private StringBuilder abspielKommando(Storage s, Abspieler abspieler, String server, String titelUrl) {
  private StringBuilder abspielKommando(Storage s, Abspieler abspieler, String server, String titelUrl, String abspielKmd) {
    
    // Kommando an den Abspieler zusammenbauen
    StringBuilder kmd = new StringBuilder();
    kmd.append(abspieler.getUrl());
    kmd.append(PL_CMD_PLAY);
    //kmd.append(PL_CMD_PLAY);
    kmd.append(abspielKmd);
    // Parameter fuer den Abspieler holen
    kmd.append(getEinstellung(s, App.getRs(App.RB_PLAYERPARAMS), PL_DEFAULT_PARAMS));
    kmd.append(server);
www/ui/js/app.js
@@ -358,9 +358,7 @@
      self.addEvtListener('#pause-btn', 'click', function() {
        self.kommando('pause');
      });
      self.addEvtListener('#weiter-btn', 'click', function() {
        self.kommando('weiter');
      });
      self.addEvtListener('#weiter-btn', 'click', self.weiter);
      self.addEvtListener('#hier-btn', 'click', self.hier_spielen);
      
@@ -408,14 +406,14 @@
      var titel = self.titelErmitteln(document.querySelector(".selected"));
      var playername = document.querySelector('#abspieler').value;
      console.log('plname: ' + playername + ' url: ' + titel.katalogUrl + titel.pfad + titel.name);
      self.http_post('../api/strg/' + playername + '/titel', JSON.stringify(titel), function(responseText) {
      self.http_post('../api/strg/' + playername + '/play/titel', JSON.stringify(titel), function(responseText) {
        self.meldung_mit_timeout(responseText, 1500);
      });   
    } else if(bereichName === 'Livestream-Auswahl') {
      var streamName = document.querySelector(".selected").textContent;
      var playername = document.querySelector('#abspieler').value;
      var stream = new Livestream(streamName, '-');
      self.http_post('../api/strg/' + playername + '/stream', JSON.stringify(stream), function(responseText) {
      self.http_post('../api/strg/' + playername + '/play/stream', JSON.stringify(stream), function(responseText) {
        self.meldung_mit_timeout(responseText, 1500);
      });   
    } else {
@@ -430,6 +428,18 @@
    }
  };
  
  this.weiter = function() {
    var bereichName = document.querySelector('.bereich-name').textContent;
    if(bereichName === '') {
      var titel = self.titelErmitteln(document.querySelector(".selected"));
      var playername = document.querySelector('#abspieler').value;
      console.log('plname: ' + playername + ' url: ' + titel.katalogUrl + titel.pfad + titel.name);
      self.http_post('../api/strg/' + playername + '/weiter/titel', JSON.stringify(titel), function(responseText) {
        self.meldung_mit_timeout(responseText, 1500);
      });
    }
  };
  this.kommando = function(kommando) {
    var abs = document.querySelector('#abspieler').value;
    self.http_get('../api/strg/' + abs + '/' + kommando, function(responseText) {