/* * MediathekView * Copyright (C) 2008 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; import java.awt.SplashScreen; import java.io.File; import java.nio.file.Path; import java.util.concurrent.TimeUnit; import mSearch.filmeSuchen.ListenerFilmeLaden; import mSearch.filmeSuchen.ListenerFilmeLadenEvent; import mSearch.filmlisten.FilmlisteLesen; import mSearch.tool.Log; import static mSearch.tool.Log.LILNE; import mSearch.tool.SysMsg; import mediathek.config.Daten; import mediathek.config.MVConfig; import mediathek.controller.IoXmlLesen; import mediathek.daten.DatenDownload; import mediathek.tool.MVFilmSize; import static mediathek.tool.MVFunctionSys.startMeldungen; public class MediathekAuto { private Daten daten; private String pfad = ""; private boolean bFastAuto = false; public MediathekAuto(String[] ar) { if (ar != null) { if (ar.length > 0) { if (!ar[0].startsWith("-")) { if (!ar[0].endsWith(File.separator)) { ar[0] += File.separator; } pfad = ar[0]; } } } try { final SplashScreen splash = SplashScreen.getSplashScreen(); if (splash != null) { splash.close(); } } catch (Exception ignored) { SysMsg.sysMsg("NoSplashscreen"); } } /** * Set fast auto mode for reading film list. * In this mode no film descriptions will be stored in memory. * Speeds up startup significantly on low power machines. * * @param bFastAuto if true, don´t read descriptions. */ public void setFastAuto(boolean bFastAuto) { this.bFastAuto = bFastAuto; } public void starten() { daten = Daten.getInstance(pfad); daten.setAuto(true); startMeldungen(); if (!IoXmlLesen.einstellungenExistieren()) { // Programm erst mit der GuiVersion einrichten Log.errorLog(834986137, "Das Programm muss erst mit der Gui-Version eingerichtet werden!"); System.exit(1); } // Einstellungen laden Path xmlFilePath = Daten.getMediathekXmlFilePath(); SysMsg.sysMsg("Einstellungen laden: " + xmlFilePath.toString()); if (!IoXmlLesen.datenLesen(xmlFilePath)) { // dann hat das Laden nicht geklappt Log.errorLog(834986137, "Einstellungen konnten nicht geladen werden: " + xmlFilePath.toString()); System.exit(1); } // Filmliste laden FilmlisteLesen filmList = new FilmlisteLesen(); if (bFastAuto) { //do not read film descriptions in FASTAUTO mode as they won´t be used... FilmlisteLesen.setWorkMode(FilmlisteLesen.WorkMode.FASTAUTO); } filmList.readFilmListe(Daten.getDateiFilmliste(), daten.getListeFilme(), Integer.parseInt(MVConfig.get(MVConfig.Configs.SYSTEM_ANZ_TAGE_FILMLISTE))); if (daten.getListeFilme().isTooOld()) { // erst neue Filmliste laden SysMsg.sysMsg("Neue Filmliste laden"); daten.getFilmeLaden().addAdListener(new ListenerFilmeLaden() { @Override public void fertig(ListenerFilmeLadenEvent event) { download(); } }); daten.getFilmeLaden().loadFilmlist("", true); } else { // mit aktueller Filmliste starten SysMsg.sysMsg("aktuelle Filmliste verwenden"); // Liste erst mal aufbereiten daten.getListeAbo().setAboFuerFilm(daten.getListeFilme(), false /*aboLoeschen*/); daten.getListeBlacklist().filterListe(); download(); } } final private static int SLEEP_VALUE = 2_000; final private static int SLEEP_VALUE_TIMES_TWO = 2 * SLEEP_VALUE; private synchronized void download() { try { SysMsg.playerMeldungenAus = true; daten.getListeDownloads().abosSuchen(null); daten.getListeDownloads().filmEintragen(); //für gespeicherte Downloads SysMsg.sysMsg(daten.getListeDownloads().size() + " Filme zum Laden"); SysMsg.sysMsg(""); // erst mal die Filme schreiben int i = 1; for (DatenDownload d : daten.getListeDownloads()) { SysMsg.sysMsg("Film " + (i++) + ": "); SysMsg.sysMsg("\tSender: " + d.arr[DatenDownload.DOWNLOAD_SENDER]); SysMsg.sysMsg("\tThema: " + d.arr[DatenDownload.DOWNLOAD_THEMA]); SysMsg.sysMsg("\tTitel: " + d.arr[DatenDownload.DOWNLOAD_TITEL]); String size = MVFilmSize.getGroesse(d.mVFilmSize.getSize()); if (!size.isEmpty()) { SysMsg.sysMsg("\tGröße: " + size + " MByte"); } SysMsg.sysMsg(""); } SysMsg.sysMsg(LILNE); // und jetzt starten for (DatenDownload d : daten.getListeDownloads()) { d.startDownload(daten); } while (daten.getListeDownloads().getNumberOfStartsNotFinished() > 0) { long remTime = daten.getListeDownloads().getMaximumFinishTimeOfRunningStarts(); if (remTime == 0 || (remTime < 10)) { remTime = SLEEP_VALUE; } else { //The following hack ensures that when we are close to the end we start polling faster... remTime = TimeUnit.MILLISECONDS.convert(remTime, TimeUnit.SECONDS); remTime /= 2; if (remTime < SLEEP_VALUE_TIMES_TWO) { remTime = SLEEP_VALUE; } } Thread.sleep(remTime); } } catch (Exception ex) { Log.errorLog(769325469, ex); } daten.allesSpeichern(); Log.endMsg(); System.exit(0); } }