Filter auf Datum
Filter auf Datum
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?
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Filter auf Datum
Hi,
was willst Du denn eigentlich erreichen?
Gruß
Sheldon
was willst Du denn eigentlich erreichen?
Gruß
Sheldon
Re: Filter auf Datum
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
Unterstütze die Weiterentwicklung von TV-Browser
Re: Filter auf Datum
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.Sheldon2012 hat geschrieben: was willst Du denn eigentlich erreichen?
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.
Re: Filter auf Datum
Danke, den schaue ich mir mal an.ds10 hat geschrieben:Filterkomponenten können als Plugin nachinstalliert werden, wie z.B. RelativeZeitFilterKomponente.
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Filter auf Datum
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.
Aber vielleicht reicht Dir ja auch schon der relative Zeitfilter.
Re: Filter auf Datum
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).Sheldon2012 hat geschrieben: Aber vielleicht reicht Dir ja auch schon der relative Zeitfilter.
Mein Problem wäre gelöst, wenn es die Einstellung "Angezeigten Tag für die Berechnung benutzen" auch beim Filtertyp "Datum" gäbe.
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Filter auf Datum
Mit einem BeanShell-Filter läßt sich das Problem aber leicht lösen.
Re: Filter auf Datum
Da ich von BeanShell-Programmierung Null Ahnung habe, bin da leider ziemlich aufgeschmissen
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Filter auf Datum
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
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;
Re: Filter auf Datum
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?
Das Problem dürfte bei programStartTime liegen. Stattdessen würde ich als Ausgangspunkt den Zeitpunkt des gerade angezeigten Tages benötigen. Geht das auch?
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Filter auf Datum
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;
Re: Filter auf Datum
Super! Jetzt klappt es wie gewollt. Nochmal ganz heißen Dank!