/* * MediathekView * Copyright (C) 2014 W. Xaver * W.Xaver[at]googlemail.com * http://zdfmediathk.sourceforge.net/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package mediathek.tool; import mSearch.tool.Log; import mSearch.tool.SysMsg; import mSearch.tool.TimedTextMarkupLanguageParser; import mediathek.config.Daten; import mediathek.daten.DatenDownload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.file.Path; import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; public class MVSubtitle { private static final int timeout = 10000; public static final String KODIERUNG_UTF = "UTF-8"; public static void writeSubtitle( DatenDownload datenDownload) { final String SUFFIX_TTML = "ttml"; final String SUFFIX_SRT = "srt"; String suffix = SUFFIX_TTML;// txt käme dem Infofile in die Quere String urlSubtitle = ""; String strSubtitelFile = null; File subtitelFile; HttpURLConnection conn = null; InputStream in = null; String encoding; if (datenDownload.arr[DatenDownload.DOWNLOAD_URL_SUBTITLE].isEmpty()) { return; } try { SysMsg.sysMsg(new String[]{"Untertitel: ", datenDownload.arr[DatenDownload.DOWNLOAD_URL_SUBTITLE], "schreiben nach: ", datenDownload.arr[DatenDownload.DOWNLOAD_ZIEL_PFAD]}); urlSubtitle = datenDownload.arr[DatenDownload.DOWNLOAD_URL_SUBTITLE]; suffix = GuiFunktionen.getSuffixFromUrl(urlSubtitle); if (!suffix.endsWith(SUFFIX_SRT)) { suffix = SUFFIX_TTML; } strSubtitelFile = datenDownload.getFileNameWithoutSuffix() + "." + suffix; subtitelFile = new File(strSubtitelFile); new File(datenDownload.arr[DatenDownload.DOWNLOAD_ZIEL_PFAD]).mkdirs(); conn = (HttpURLConnection) new URL(urlSubtitle).openConnection(); conn.setRequestProperty("User-Agent", Daten.getUserAgent()); conn.setRequestProperty("Accept-Encoding", "gzip, deflate"); conn.setReadTimeout(timeout); conn.setConnectTimeout(timeout); // the encoding returned by the server encoding = conn.getContentEncoding(); if ((conn.getResponseCode()) < 400) { in = conn.getInputStream(); } else { // dann wars das Log.errorLog(752301248, "url: " + urlSubtitle); } if (in == null) { return; } if (encoding != null) { switch (encoding.toLowerCase()) { case "gzip": in = new GZIPInputStream(in); break; case "deflate": in = new InflaterInputStream(in, new Inflater(true)); break; } } try (FileOutputStream fos = new FileOutputStream(subtitelFile)) { final byte[] buffer = new byte[1024]; int n; while ((n = in.read(buffer)) != -1) { fos.write(buffer, 0, n); } SysMsg.sysMsg(new String[]{"Untertitel", " geschrieben"}); } } catch (IOException ex) { strSubtitelFile = null; if (conn != null) { try { if (in != null) { in.close(); } } catch (Exception ignored) { } } } catch (Exception ignored) { strSubtitelFile = null; } finally { try { if (in != null) { in.close(); } } catch (Exception ignored) { } } try { if (strSubtitelFile != null) { if (!strSubtitelFile.endsWith("." + SUFFIX_SRT)) { TimedTextMarkupLanguageParser ttmlp = new TimedTextMarkupLanguageParser(); Path p = new File(strSubtitelFile).toPath(); Path srt = new File(datenDownload.getFileNameWithoutSuffix() + "." + SUFFIX_SRT).toPath(); if (ttmlp.parse(p)) { ttmlp.toSrt(srt); } else if (ttmlp.parseXmlFlash(p)) { ttmlp.toSrt(srt); } ttmlp.cleanup(); } } } catch (Exception ignored) { Log.errorLog(461203210, ignored, "SubtitelUrl: " + urlSubtitle); } } }