/* * MediathekView * Copyright (C) 2013 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.daten.DatenFilm; import mediathek.config.MVColor; import mediathek.daten.DatenAbo; import javax.swing.*; import java.awt.*; import java.util.regex.Pattern; public class Filter { public static boolean aboExistiertBereits(DatenAbo aboExistiert, DatenAbo aboPruefen) { // prüfen ob "aboExistiert" das "aboPrüfen" mit abdeckt, also die gleichen (oder mehr) // Filme findet, dann wäre das neue Abo hinfällig String senderExistiert = aboExistiert.arr[DatenAbo.ABO_SENDER]; String themaExistiert = aboExistiert.arr[DatenAbo.ABO_THEMA]; String[] titelExistiert = aboExistiert.arr[DatenAbo.ABO_TITEL].toLowerCase().split(","); String[] themaTitelExistiert = aboExistiert.arr[DatenAbo.ABO_THEMA_TITEL].toLowerCase().split(","); String[] irgendwoExistiert = aboExistiert.arr[DatenAbo.ABO_IRGENDWO].toLowerCase().split(","); // Abos sollen sich nicht nur in der Länge unterscheiden String senderPruefen = aboPruefen.arr[DatenAbo.ABO_SENDER]; String themaPruefen = aboPruefen.arr[DatenAbo.ABO_THEMA]; String titelPruefen = aboPruefen.arr[DatenAbo.ABO_TITEL]; String irgendwoPruefen = aboPruefen.arr[DatenAbo.ABO_IRGENDWO]; if (senderExistiert.isEmpty() || senderPruefen.equalsIgnoreCase(senderExistiert)) { if (themaExistiert.isEmpty() || themaPruefen.equalsIgnoreCase(themaExistiert)) { if (titelExistiert.length == 0 || pruefen(titelExistiert, titelPruefen)) { if (themaTitelExistiert.length == 0 || pruefen(themaTitelExistiert, themaPruefen) || pruefen(themaTitelExistiert, titelPruefen)) { if (irgendwoExistiert.length == 0 || pruefen(irgendwoExistiert, themaPruefen) || pruefen(irgendwoExistiert, titelPruefen) || pruefen(irgendwoExistiert, irgendwoPruefen)) { return true; } } } } } return false; } public static boolean filterAufFilmPruefen(String senderSuchen, String themaSuchen, String[] titelSuchen, String[] themaTitelSuchen, String[] irgendwoSuchen, int laengeMinutenSuchen, boolean min, DatenFilm film, boolean mitLaenge) { // prüfen ob xxxSuchen im String imXxx enthalten ist, themaTitelSuchen wird mit Thema u. Titel verglichen // senderSuchen exakt mit sender // themaSuchen exakt mit thema // titelSuchen muss im Titel nur enthalten sein if (senderSuchen.isEmpty() || film.arr[DatenFilm.FILM_SENDER].equalsIgnoreCase(senderSuchen)) { if (themaSuchen.isEmpty() || film.arr[DatenFilm.FILM_THEMA].equalsIgnoreCase(themaSuchen)) { if (titelSuchen.length == 0 || pruefen(titelSuchen, film.arr[DatenFilm.FILM_TITEL])) { if (themaTitelSuchen.length == 0 || pruefen(themaTitelSuchen, film.arr[DatenFilm.FILM_THEMA]) || pruefen(themaTitelSuchen, film.arr[DatenFilm.FILM_TITEL])) { if (irgendwoSuchen.length == 0 || pruefen(irgendwoSuchen, film.arr[DatenFilm.FILM_DATUM]) || pruefen(irgendwoSuchen, film.arr[DatenFilm.FILM_THEMA]) || pruefen(irgendwoSuchen, film.arr[DatenFilm.FILM_TITEL]) || pruefen(irgendwoSuchen, film.arr[DatenFilm.FILM_BESCHREIBUNG])) { // || pruefen(irgendwoSuchen, film.arr[DatenFilm.FILM_WEBSEITE_NR])) { kostet 25% Zeit zusätzlich! if (mitLaenge) { // die Länge soll mit gefrüft werden if (laengePruefen(laengeMinutenSuchen, film.dauerL, min)) { return true; } } else { return true; } } } } } } return false; } public static boolean laengePruefen(int filterLaengeInMinuten, long filmLaenge, boolean min) { if (min) { return filterLaengeInMinuten == 0 || filmLaenge == 0 || filmLaenge > (filterLaengeInMinuten * 60); } else { return filterLaengeInMinuten == 0 || filmLaenge == 0 || filmLaenge < (filterLaengeInMinuten * 60); } } private static boolean pruefen(String[] filter, String im) { // wenn einer passt, dann ists gut Pattern p; if (filter.length == 1) { if (filter[0].isEmpty()) { // Filter ist leer, das wars return true; } else if ((p = makePattern(filter[0])) != null) { // dann ists eine RegEx return (p.matcher(im).matches()); } } for (String s : filter) { // dann jeden Suchbegriff checken if (im.toLowerCase().contains(s)) { return true; } } // nix wars return false; } public static boolean isPattern(String textSuchen) { return textSuchen.startsWith("#:"); } public static Pattern makePattern(String textSuchen) { Pattern p = null; try { if (isPattern(textSuchen)) { p = Pattern.compile(textSuchen.substring(2), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); } } catch (Exception ex) { p = null; } return p; } public static void checkPattern1(JTextField tf) { // Hintergrund ändern wenn eine RegEx String text = tf.getText(); if (Filter.isPattern(text)) { if (Filter.makePattern(text) == null) { //soll Pattern sein, ist aber falsch tf.setBackground(MVColor.FILTER_REGEX_FEHLER.color); } else { tf.setBackground(MVColor.FILTER_REGEX.color); } } else { tf.setBackground(Color.WHITE); } } public static void checkPattern2(JTextField tf) { // Schriftfarbe ändern wenn eine RegEx String text = tf.getText(); if (Filter.isPattern(text)) { if (Filter.makePattern(text) == null) { //soll Pattern sein, ist aber falsch tf.setForeground(Color.RED); } else { tf.setForeground(Color.BLUE); } } else { tf.setForeground(Color.BLACK); } } }