package de.uhilger.calypso.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.App; import de.uhilger.calypso.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; /** * 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()); 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) { File logDir = logSichern(); StringBuilder params = super.buildParams(t); params.append(" --pos "); try { 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)); // 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); } }