Filter auf Datum

Bei Problemen mit der Bedienung von TV-Browser, bitte hier posten.
Antworten
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Filter auf Datum

Beitrag von semko »

Die Filterkomponente 'Datum' geht anscheinend vom aktuellen (PC-)Datum aus. In der Programmtabelle kann ich ja tageweise vorblättern und mir Programme in der nahen Zukunft anschauen. Gibt es eine Möglichkeit, Datumsfilter zu generieren, die sich auf den gerade angezeigten Tag beziehen? Wäre da etwas mit Bean möglich und wie müsste das aussehen?
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Filter auf Datum

Beitrag von Sheldon2012 »

Hi,

was willst Du denn eigentlich erreichen?

Gruß

Sheldon
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Filter auf Datum

Beitrag von ds10 »

Ein Datumsfilter der auf dem angezeigten Tag arbeitet, scheint mir aber gar kein Datumsfilter zu sein, sondern ein Zeitfilter. Zeitfilter werden bereits mitgeliefert und weitere Filterkomponenten können als Plugin nachinstalliert werden, wie z.B. RelativeZeitFilterKomponente.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

Sheldon2012 hat geschrieben: was willst Du denn eigentlich erreichen?
Zum Beispiel will ich mir eine Sendungsliste der Filme am angezeigten Tag zwischen 20:00 Uhr und 05:00 Uhr am folgenden Tag anzeigen lassen.
Für das aktuelle Datum habe ich bereits einen gut funktionierenden Filter, der aber den Nachteil hat, dass er nur "heute" funktioniert, also nicht beim tageweise vorblättern.
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

ds10 hat geschrieben:Filterkomponenten können als Plugin nachinstalliert werden, wie z.B. RelativeZeitFilterKomponente.
Danke, den schaue ich mir mal an.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Filter auf Datum

Beitrag von Sheldon2012 »

Das läuft wohl auf eine BeanShell-Lösung hinaus. Damit geht es auf jeden Fall.
Aber vielleicht reicht Dir ja auch schon der relative Zeitfilter.
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

Sheldon2012 hat geschrieben: Aber vielleicht reicht Dir ja auch schon der relative Zeitfilter.
Leider nicht, weil die Relativität leider nur eindimensional ist. Ich kann darin zwar einstellen, dass sich die Zeitspanne auf den gerade angezeigten Tag beziehen soll, aber Zeitbasis ist auch dann die bei der Betrachtung gerade aktuelle Zeit (14 Uhr bleibt 14 Uhr, auch am nächsten etc. Tag).

Mein Problem wäre gelöst, wenn es die Einstellung "Angezeigten Tag für die Berechnung benutzen" auch beim Filtertyp "Datum" gäbe.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Filter auf Datum

Beitrag von Sheldon2012 »

Mit einem BeanShell-Filter läßt sich das Problem aber leicht lösen.
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

Da ich von BeanShell-Programmierung Null Ahnung habe, bin da leider ziemlich aufgeschmissen :-(
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Filter auf Datum

Beitrag von Sheldon2012 »

Wenn ich behaupte, dass es leicht sei, muß ich es ja auch beweisen. :)

Dieses Script zeigt Dir alle Sendungen die zwischen 20:00 Uhr heute und 5:00 Uhr morgen beginnen an (Dein Beispiel).
Du kannst es natürlich immer beliebig anpassen.

Vielleicht noch ein paar Erläuteruhgen:

long gmtOffset = 2 * hour; -> 2 Stunden Zeitverschiebung zur GMT
long searchStartHour = 20; -> Beginn 20 Uhr
long searchEndHour = 5; -> Ende 5 Uhr
long searchNumberOfDaysForward = 1; -> 1 Tag soll nach vorne gesprungen werden

Code: Alles auswählen

    import devplugin.beanshell.BeanShellProgramFilterIf;
    import devplugin.Program;
    import devplugin.ProgramFieldType;
    import java.util.Calendar;

    accept(Program p) {	
	
        Calendar programStart = Calendar.getInstance();   
        programStart.set(p.getDate().getYear(), p.getDate().getMonth()-1, p.getDate().getDayOfMonth(), p.getHours(), p.getMinutes());
        long programStartTime = programStart.getTimeInMillis();
      
        long hour = 60*60*1000;
        long day = 24*hour;
        long gmtOffset = 2 * hour;

        long currentDay = System.currentTimeMillis() - (System.currentTimeMillis() % day)  - gmtOffset;	
      		
        long searchStartHour = 20;
        long searchEndHour = 5;
        long searchNumberOfDaysForward = 1;		
		
        long searchIntervalBegin = currentDay + searchStartHour * hour;  
        long searchIntervalEnd = currentDay + searchNumberOfDaysForward * day + searchEndHour * hour;  
       
        return ((searchIntervalBegin <= programStartTime) && (programStartTime <= searchIntervalEnd));
    }

    return (BeanShellProgramFilterIf) this;
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

Sheldon2012, ganz herzlichen Dank für deine Mühe. Leider funktioniert dein Script nicht wie gewünscht. Es klappt für heute (Sonntag), gehe ich aber vor auf Montag, werden nur noch Sendungen zwischen 00 und 05 Uhr angezeigt, gehe ich weiter vor auf Dienstag, wird gar nichts mehr angezeigt.

Das Problem dürfte bei programStartTime liegen. Stattdessen würde ich als Ausgangspunkt den Zeitpunkt des gerade angezeigten Tages benötigen. Geht das auch?
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Filter auf Datum

Beitrag von Sheldon2012 »

Das ist wohl, was Du meinst.

Code: Alles auswählen

    import devplugin.beanshell.BeanShellProgramFilterIf;
    import devplugin.Program;
    import devplugin.ProgramFieldType;
    import java.util.Calendar;

    accept(Program p) {

        boolean result = false;	
	
        Calendar programStart = Calendar.getInstance();   
        programStart.set(p.getDate().getYear(), p.getDate().getMonth()-1, p.getDate().getDayOfMonth(), p.getHours(), p.getMinutes());
        long programStartTime = programStart.getTimeInMillis();
      
        long hour = 60*60*1000;
        long day = 24*hour;
        long gmtOffset = 1 * hour;

        long currentDay = 0;	
      		
        long searchStartHour = 20;
        long searchEndHour = 5;
        long searchNumberOfDaysForward = 1;		
		
        long searchIntervalBegin = 0;
        long searchIntervalEnd = 0;                  

        for (int i = 0; i<=30; i++) {
          currentDay = System.currentTimeMillis() - (System.currentTimeMillis() % day) - gmtOffset + i * day;
          searchIntervalBegin = currentDay + searchStartHour * hour;  
          searchIntervalEnd = currentDay + searchNumberOfDaysForward * day + searchEndHour * hour; 
          
          result = ((searchIntervalBegin <= programStartTime) && (programStartTime <= searchIntervalEnd));

          if (result) {
             break;
          }
        }
 
        return result;
    }

    return (BeanShellProgramFilterIf) this;
semko
Junior Member
Beiträge: 24
Registriert: 27 Feb 2011, 19:57

Re: Filter auf Datum

Beitrag von semko »

Super! Jetzt klappt es wie gewollt. Nochmal ganz heißen Dank!
Antworten