src/de/uhilger/avdirektor/App.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/OMXPlayer.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/PlayHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/PlayOnHandler.java | ●●●●● patch | view | raw | blame | history |
src/de/uhilger/avdirektor/App.java
@@ -51,6 +51,7 @@ public static final String IP_PLAYER = "player"; public static final String VLC_PLAYER = "vlc"; public static final String OMX_PLAYER = "omx"; public static final String OMX_WD = "omx.wd"; private static HashMap initParams; src/de/uhilger/avdirektor/handler/OMXPlayer.java
@@ -49,6 +49,8 @@ private static final Logger logger = Logger.getLogger(OMXPlayer.class.getName()); public static final String NAME = "omxplayer"; public static final String BLANK = " "; public static final String CMD_DEC_SPEED = "1"; public static final String CMD_DEC_VOL = "-"; @@ -87,7 +89,7 @@ tilgen(); } List<String> kommando = new ArrayList(); kommando.add("omxplayer"); kommando.add(NAME); kommando.addAll(Arrays.asList(parameter.split(BLANK))); if(urlStr.startsWith("http")) { kommando.add(urlStr.replace(" ", "%20")); src/de/uhilger/avdirektor/handler/PlayHandler.java
@@ -14,40 +14,41 @@ 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.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.avdirektor.App; import java.io.File; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.io.FileUtils; /** * Play * * * rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&th=60&ti=60&o=local * * OMXPlayer.abspielenMitParameternUndRueckmeldung( * String urlStr, String parameter, String meldeUrlStr, String token) * * Parameter des Aufrufs play als query (th threshold, ti timeout) * OMXPlayer.abspielenMitParameternUndRueckmeldung( String urlStr, String * parameter, String meldeUrlStr, String token) * * ?titel=/Filme/S/sound_city.m4v * &ti=60 * &th=60 * &o=local|hdmi|both * &r=http://uhilger.de/mc/api/usw * Parameter des Aufrufs play als query (th threshold, ti timeout) * * r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist * * ?titel=/Filme/S/sound_city.m4v &ti=60 &th=60 &o=local|hdmi|both * &r=http://uhilger.de/mc/api/usw * * r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist * * @author ulrich */ public class PlayHandler extends CmdHandler { private static final Logger logger = Logger.getLogger(PlayHandler.class.getName()); public PlayHandler(String cmd) { @@ -63,25 +64,52 @@ params.append(" --timeout "); params.append(getParam(map, "ti")); String log = getParam(map, "log"); if(log != null && log.equalsIgnoreCase("true")) { if (log != null && log.equalsIgnoreCase("true")) { params.append(" --genlog"); } return params; } @Override protected String process(HttpExchange t, String params) { if(cmd.equalsIgnoreCase(OMXPlayer.F_PLAY)) { if (cmd.equalsIgnoreCase(OMXPlayer.F_PLAY)) { try { FileUtils.deleteDirectory(new File(System.getProperty("omx.wd"), "omx-logs")); //FileUtils.deleteDirectory(new File(System.getProperty("omx.wd"), "omx-logs")); FileSystem fs = FileSystems.getDefault(); Path path = fs.getPath(System.getProperty("omx.wd"), "omx-logs"); deleteDirectory(path); //Files.delete(path); } catch (IOException ex) { logger.log(Level.SEVERE, null, ex); } } String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; } protected void deleteDirectory(Path start) throws IOException { Files.walkFileTree(start, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { if (e == null) { Files.delete(dir); return FileVisitResult.CONTINUE; } else { // directory iteration failed throw e; } } }); } } src/de/uhilger/avdirektor/handler/PlayOnHandler.java
@@ -1,69 +1,87 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import de.uhilger.avdirektor.App; import de.uhilger.avdirektor.OMXLogLeser; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.io.FileUtils; /** * z.B. * z.B. * http://rpi4-az:9090/avd/playon?th=1&ti=240&o=local&log=true&titel=http://amd-srv:9090/srv/Filme/C/casino_royale.m4v * * @author ulrich */ public class PlayOnHandler extends PlayHandler { private static final Logger logger = Logger.getLogger(PlayOnHandler.class.getName()); private static final Logger logger = Logger.getLogger(PlayOnHandler.class.getName()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd-hh-MM-ss"); public static final String LOG_DIR = "omx-logs"; public static final String LOG_EXT = "log"; public static final String DASH = "-"; public static final String DOT = "."; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); public PlayOnHandler(String cmd) { super(cmd); } /* 1. buildParams 2. process */ */ @Override protected StringBuilder buildParams(HttpExchange t) { String wd = System.getProperty("omx.wd"); File targetDir = new File(wd, "omx-logs"); try { File logFile = new File(wd, "omxplayer.log"); Date date = new Date(logFile.lastModified()); File srcFile = new File(wd, "omxplayer-" + sdf.format(date) + ".log"); logFile.renameTo(srcFile); targetDir.mkdirs(); FileUtils.moveFileToDirectory(srcFile, targetDir, false); } catch (IOException ex) { Logger.getLogger(PlayOnHandler.class.getName()).log(Level.SEVERE, null, ex); } File logDir = logSichern(); StringBuilder params = super.buildParams(t); params.append(" --pos "); try { // hier das Ergebnis der Log-Auswertung angeben params.append(logsLesen(targetDir)); } catch (IOException ex) { Logger.getLogger(PlayOnHandler.class.getName()).log(Level.SEVERE, null, ex); } catch (ParseException ex) { Logger.getLogger(PlayOnHandler.class.getName()).log(Level.SEVERE, null, ex); params.append(dauerBestimmen(logDir)); } catch (IOException | ParseException ex) { logger.log(Level.SEVERE, null, ex); } return params; } } private File logSichern() { String wd = System.getProperty(App.OMX_WD); File zielOrdner = new File(wd, LOG_DIR); try { // omxplayer.log umbenennen FileSystem fs = FileSystems.getDefault(); Path logDatei = fs.getPath(wd, OMXPlayer.NAME + DOT + LOG_EXT); Date now = new Date(); String neuerName = OMXPlayer.NAME + DASH + sdf.format(now) + DOT + LOG_EXT; Files.move(logDatei, logDatei.resolveSibling(neuerName)); private String logsLesen(File logDir) throws IOException, FileNotFoundException, ParseException { // Unterverzeichnis ggf. erzeugen zielOrdner.mkdirs(); // omxplayer-datum.log verschieben Path quellDatei = fs.getPath(wd, neuerName); Path zielPfad = fs.getPath(wd, LOG_DIR); Files.move(quellDatei, zielPfad.resolve(quellDatei.getFileName()), REPLACE_EXISTING); } catch (IOException ex) { logger.log(Level.SEVERE, null, ex); } return zielOrdner; } private String dauerBestimmen(File logDir) throws IOException, FileNotFoundException, ParseException { OMXLogLeser leser = new OMXLogLeser(); return leser.logDirLesen(logDir); } }