/*
* 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.daten;
import com.jidesoft.utils.SystemInfo;
import mSearch.daten.DatenFilm;
import mSearch.tool.Log;
import mediathek.config.Daten;
import mediathek.tool.GuiFunktionenProgramme;
import mediathek.tool.MVMessageDialog;
import javax.swing.*;
import java.awt.*;
import java.util.Iterator;
public class DatenPset extends MVData<DatenPset> {
//Tags Programmgruppen
public static final int PROGRAMMSET_NAME = 0;
public static final int PROGRAMMSET_PRAEFIX_DIREKT = 1;
public static final int PROGRAMMSET_SUFFIX_DIREKT = 2;
public static final int PROGRAMMSET_FARBE = 3;
public static final int PROGRAMMSET_ZIEL_PFAD = 4;
public static final int PROGRAMMSET_ZIEL_DATEINAME = 5;
public static final int PROGRAMMSET_THEMA_ANLEGEN = 6;
public static final int PROGRAMMSET_IST_ABSPIELEN = 7;
public static final int PROGRAMMSET_IST_SPEICHERN = 8;
public static final int PROGRAMMSET_IST_BUTTON = 9;
public static final int PROGRAMMSET_IST_ABO = 10;
public static final int PROGRAMMSET_LAENGE_BESCHRAENKEN = 11;
public static final int PROGRAMMSET_LAENGE_FIELD_BESCHRAENKEN = 12;
public static final int PROGRAMMSET_MAX_LAENGE = 13;
public static final int PROGRAMMSET_MAX_LAENGE_FIELD = 14;
public static final int PROGRAMMSET_AUFLOESUNG = 15;
public static final int PROGRAMMSET_ADD_ON = 16;
public static final int PROGRAMMSET_BESCHREIBUNG = 17;
public static final int PROGRAMMSET_INFO_URL = 18;
public static final int PROGRAMMSET_INFODATEI = 19;
public static final int PROGRAMMSET_SPOTLIGHT = 20;
public static final int PROGRAMMSET_SUBTITLE = 21;
public static final String TAG = "Programmset";
public static final int MAX_ELEM = 22;
public static final String[] COLUMN_NAMES = {"Setname", "Präfix", "Suffix", "Farbe", "Zielpfad", "Zieldateiname", "Thema anlegen",
"Abspielen", "Speichern", "Button", "Abo", "Länge", "Länge Feld", "max Länge", "max Länge Feld", "Auflösung", "AddOn",
"Beschreibung", "Url Info", "Infodatei", "Spotlight", "Untertitel"};
public static final String[] XML_NAMES = {"Name", "Praefix", "Suffix", "Farbe", "Zielpfad", "Zieldateiname", "Thema-anlegen",
"Abspielen", "Speichern", "Button", "Abo", "Laenge", "Laenge-Feld", "max-Laenge", "max-Laenge-Feld", "Aufloesung", "AddOn",
"Beschreibung", "Info-URL", "Infodatei", "Spotlight", "Untertitel"};
private ListeProg listeProg = new ListeProg();
public static boolean[] spaltenAnzeigen = new boolean[MAX_ELEM];
public String[] arr;
public DatenPset() {
makeArray();
}
public DatenPset(String name) {
// neue Pset sind immer gleich Button
makeArray();
arr[PROGRAMMSET_NAME] = name;
arr[PROGRAMMSET_IST_BUTTON] = Boolean.TRUE.toString();
}
// public
public boolean addProg(DatenProg prog) {
return listeProg.add(prog);
}
public ListeProg getListeProg() {
return listeProg;
}
public DatenProg getProg(int i) {
return listeProg.get(i);
}
public boolean progsContainPath() {
// ein Programmschalter mit
// "**" (Pfad/Datei) oder %a (Pfad) oder %b (Datei)
// damit ist es ein Set zum Speichern
boolean ret = false;
Iterator<DatenProg> it = listeProg.iterator();
DatenProg prog;
while (it.hasNext()) {
prog = it.next();
if (prog.arr[DatenProg.PROGRAMM_SCHALTER].contains("**")
|| prog.arr[DatenProg.PROGRAMM_SCHALTER].contains("%a")
|| prog.arr[DatenProg.PROGRAMM_SCHALTER].contains("%b")) {
ret = true;
break;
}
}
return ret;
}
public boolean isEmpty() {
boolean ret = true;
for (String s : arr) {
if (!s.isEmpty()) {
ret = false;
}
}
if (!listeProg.isEmpty()) {
ret = false;
}
return ret;
}
public boolean istAbspielen() {
return Boolean.parseBoolean(arr[PROGRAMMSET_IST_ABSPIELEN]);
}
public boolean istSpeichern() {
return Boolean.parseBoolean(arr[PROGRAMMSET_IST_SPEICHERN]);
}
public boolean istButton() {
return Boolean.parseBoolean(arr[PROGRAMMSET_IST_BUTTON]);
}
public boolean istAbo() {
return Boolean.parseBoolean(arr[PROGRAMMSET_IST_ABO]);
}
public boolean isLable() {
// wenn die Programmliste leer ist und einen Namen hat, ist es ein Lable
if (this.listeProg.isEmpty()) {
if (!this.arr[PROGRAMMSET_NAME].equals("")) {
return true;
}
}
return false;
}
public boolean isFreeLine() {
//Wenn die Programmgruppe keinen Namen hat, leere Zeile
return this.arr[PROGRAMMSET_NAME].equals("");
}
public void setAbspielen(Daten daten) {
for (DatenPset datenPset : Daten.listePset) {
datenPset.arr[DatenPset.PROGRAMMSET_IST_ABSPIELEN] = Boolean.FALSE.toString();
}
arr[DatenPset.PROGRAMMSET_IST_ABSPIELEN] = Boolean.TRUE.toString();
}
public void setSpeichern(boolean set) {
arr[DatenPset.PROGRAMMSET_IST_SPEICHERN] = Boolean.toString(set);
}
public void setButton(boolean set) {
arr[DatenPset.PROGRAMMSET_IST_BUTTON] = Boolean.toString(set);
}
public void setAbo(boolean set) {
arr[DatenPset.PROGRAMMSET_IST_ABO] = Boolean.toString(set);
}
public DatenProg getProgUrl(String url) {
//mit einer Url das Passende Programm finden
//passt nichts, wird das letzte Programm genommen
//ist nur ein Programm in der Liste wird dieses genommen
DatenProg ret = null;
if (listeProg.isEmpty()) {
MVMessageDialog.showMessageDialog(null, "Programme einrichten!",
"Kein Programm", JOptionPane.INFORMATION_MESSAGE);
} else if (listeProg.size() == 1) {
ret = listeProg.getFirst();
} else {
Iterator<DatenProg> it = listeProg.iterator();
DatenProg prog;
while (it.hasNext()) {
prog = it.next();
if (prog.urlTesten(url)) {
ret = prog;
break;
}
}
if (!listeProg.isEmpty() && ret == null) {
ret = listeProg.getLast();
}
}
return ret;
}
public String getZielDateiname(String url) {
//gibt den Zieldateinamen für den Film zurück
DatenProg prog = this.getProgUrl(url);
String ret = arr[PROGRAMMSET_ZIEL_DATEINAME];
if (!checkDownloadDirekt(url) && prog != null) {
// nur wenn kein direkter Download und ein passendes Programm
if (!prog.arr[DatenProg.PROGRAMM_ZIEL_DATEINAME].equals("")) {
ret = prog.arr[DatenProg.PROGRAMM_ZIEL_DATEINAME];
}
}
return ret;
}
public String getZielPfad() {
//gibt den Zielpfad für den Film zurück
return arr[PROGRAMMSET_ZIEL_PFAD];
}
public DatenPset copy() {
DatenPset ret = new DatenPset();
System.arraycopy(this.arr, 0, ret.arr, 0, arr.length);
//es darf nur einen geben!
ret.arr[PROGRAMMSET_NAME] = "Kopie-" + arr[PROGRAMMSET_NAME];
ret.arr[PROGRAMMSET_IST_ABSPIELEN] = Boolean.toString(false);
for (DatenProg prog : getListeProg()) {
ret.addProg(prog.copy());
}
return ret;
}
public Color getFarbe() {
Color ret = null;
String r, g, b;
if (!arr[PROGRAMMSET_FARBE].equals("")) {
r = arr[PROGRAMMSET_FARBE].substring(0, arr[PROGRAMMSET_FARBE].indexOf(','));
g = arr[PROGRAMMSET_FARBE].substring(arr[PROGRAMMSET_FARBE].indexOf(',') + 1,
arr[PROGRAMMSET_FARBE].lastIndexOf(','));
b = arr[PROGRAMMSET_FARBE].substring(arr[PROGRAMMSET_FARBE].lastIndexOf(',') + 1);
try {
ret = new Color(Integer.parseInt(r), Integer.parseInt(g), Integer.parseInt(b));
} catch (Exception ex) {
Log.errorLog(669254033, ex);
}
}
return ret;
}
public void setFarbe(Color farbe) {
arr[PROGRAMMSET_FARBE]
= farbe.getRed() + "," + farbe.getGreen() + "," + farbe.getBlue();
}
public boolean checkDownloadDirekt(String url) {
//auf direkte prüfen, pref oder suf: wenn angegeben dann muss es stimmen
if (!this.arr[PROGRAMMSET_PRAEFIX_DIREKT].equals("")
|| !this.arr[PROGRAMMSET_SUFFIX_DIREKT].equals("")) {
if (GuiFunktionenProgramme.praefixTesten(this.arr[PROGRAMMSET_PRAEFIX_DIREKT], url, true)
&& GuiFunktionenProgramme.praefixTesten(this.arr[PROGRAMMSET_SUFFIX_DIREKT], url, false)) {
return true;
}
}
return false;
}
@Override
public String toString() {
String ret = "";
ret += "================================================" + Daten.LINE_SEPARATOR;
ret += "| Programmset" + Daten.LINE_SEPARATOR;
for (int i = 0; i < MAX_ELEM; ++i) {
ret += "| " + COLUMN_NAMES[i] + ": " + arr[i] + Daten.LINE_SEPARATOR;
}
for (Object aListeProg : listeProg) {
ret += "|" + Daten.LINE_SEPARATOR;
ret += aListeProg.toString();
}
ret += "|_______________________________________________" + Daten.LINE_SEPARATOR;
return ret;
}
//===================================
// Private
//===================================
private void makeArray() {
arr = new String[MAX_ELEM];
for (int i = 0; i < arr.length; ++i) {
arr[i] = "";
}
arr[PROGRAMMSET_THEMA_ANLEGEN] = Boolean.toString(true);
arr[PROGRAMMSET_IST_ABSPIELEN] = Boolean.toString(false);
arr[PROGRAMMSET_IST_SPEICHERN] = Boolean.toString(false);
arr[PROGRAMMSET_IST_BUTTON] = Boolean.toString(false);
arr[PROGRAMMSET_IST_ABO] = Boolean.toString(false);
arr[PROGRAMMSET_LAENGE_BESCHRAENKEN] = Boolean.toString(false);
arr[PROGRAMMSET_LAENGE_FIELD_BESCHRAENKEN] = Boolean.toString(false);
arr[PROGRAMMSET_INFODATEI] = Boolean.toString(false);
arr[PROGRAMMSET_SPOTLIGHT] = Boolean.toString(SystemInfo.isMacOSX());
arr[PROGRAMMSET_SUBTITLE] = Boolean.toString(false);
arr[PROGRAMMSET_AUFLOESUNG] = DatenFilm.AUFLOESUNG_NORMAL;
}
}