Filter relativ zur aktuellen Zeit

Ideen, wie TV-Browser verbessert werden kann
Antworten
Bud

Filter relativ zur aktuellen Zeit

Beitrag von Bud »

Hi,

derzeit ist es möglich einen Filter vom Typ "Zeit" mit absoluter Beginn- und Endzeit zu definieren (z. B. Beginn: 20:00 Uhr, Ende: 23:00 Uhr).

Ich würde es gut finden, wenn optional auch relative Werte zur aktuellen Systemzeit als Filter definiert und danach gefiltert werden könnte.

Z. B.
Beginn: -1 Stunde in Bezug zur aktuellen Systemzeit
Ende: +2 Stunden in Bezug zur aktuellen Systemzeit

LG
ds10
Site Admin
Beiträge: 19119
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Filter relativ zur aktuellen Zeit

Beitrag von ds10 »

Dafür gibt es die BeanShell-Filterkomponente, einfach folgen Code benutzen:

Code: Alles auswählen

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

accept(Program p) {
    Calendar start = Calendar.getInstance();    
    start.set(p.getDate().getYear(), p.getDate().getMonth()-1, p.getDate().getDayOfMonth(), p.getHours(), p.getMinutes());
    
    long startMinute = start.getTimeInMillis() / 60000;
    long endMinute = startMinute + p.getLength();
    long nowMinute = System.currentTimeMillis() / 60000;
    
    // time in minutes before start of program that is acceptable
    int acceptablePreTime = 60;
    // time in minutes after start of program that is acceptable
    int acceptablePostTime = 120;
    
    return ((nowMinute - acceptablePreTime <= startMinute) && (nowMinute + acceptablePostTime >= endMinute));
}

return (BeanShellProgramFilterIf) this;
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
ds10
Site Admin
Beiträge: 19119
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Filter relativ zur aktuellen Zeit

Beitrag von ds10 »

Ich habe das mal in eine einfach konfigurierbare und mehrfach verwendbare Filterkomponente, als Plugin programmiert:
http://www.tvbrowser.org/index.php?id=o ... 290451_235
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Bud

Re: Filter relativ zur aktuellen Zeit

Beitrag von Bud »

Die "RelativeZeitFilterKomponente" habe ich installiert und anschließend einen Filter mit diesem Plugin definiert, jedoch werden keine Sendungen angezeigt. Einstellungen konnte ich auch nirgends vornehmen. Habe ich da irgendwo etwas übersehen?

--------------------------

Danke für den o. a. Code für die BeanShell-Filterkomponente. Nach dem Ausprobieren habe ich mich noch um entschieden und daher den Code geringfügig abgeändert. Erklärung steht am Anfang des nachfolgenden Codes.

Code: Alles auswählen

// Dieser Code für die BeanShell-Filterkomponente im TV-Browser filtert alle Sendungen, welche
// • nach der aktuellen System-Uhrzeit enden (= inkl. laufender Sendung), und
// • vor der aktuellen System-Uhrzeit plus 3 Stunden beginnen, 
// • unabhänig vom Datum (also für jeden Tag).
// Funktioniert allerdings nicht immer korrekt:
// • ca.23:00 bis 2:00 Uhr … Fehlende Sendungen wegen Datumsprung um 24:00 bzw. 0:00 Uhr
// • ca. 3:00 bis 9:00 Uhr … Zuviele Sendungen wegen Tageswechsel um 6:00 Uhr

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

accept(Program p) {
    Calendar start = Calendar.getInstance();   
    start.set(p.getDate().getYear(), p.getDate().getMonth()-1, p.getDate().getDayOfMonth(), p.getHours(), p.getMinutes());
   
    long startMinute = (start.getTimeInMillis() / 60000) % (24 * 60);
    long endMinute = startMinute + p.getLength();
    long nowMinute = (System.currentTimeMillis() / 60000) % (24 * 60);
   
    long acceptablePreTimeMinutes = 0;
    long acceptablePostTimeMinutes = 180;
   
    return ((endMinute >= (nowMinute - acceptablePreTimeMinutes)) && (startMinute <= (nowMinute + acceptablePostTimeMinutes)));
}

return (BeanShellProgramFilterIf) this;
Mir ist klar, dass "% (24 * 60)" nicht für jede Tageszeit funktioniert. Ich möchte daher fragen, ob sich irgendwie mit java das Sendungs-Tagesdatum (= aktuell angezeigter Sendungstag) - welches in der Fenstertitelzeile des TV-Browsers links oben steht - auslesen lassen könnte (ev. als Zahl). Damit könnte ich die Aufgabe wahrscheinlich besser lösen. Ein Codeschnipsel der dieses Datum als Zahl zur Verfügung stellt - welchen ich in den o. a. Code einfügen könnte - würde mir genügen. Die Berechnungen damit würde ich dann wahrscheinlich auch als Nicht-Java-Experte hinbekommen.
Danke noch mal für deine Bemühungen und dass du dir dafür Zeit genommen hast.
ds10
Site Admin
Beiträge: 19119
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Filter relativ zur aktuellen Zeit

Beitrag von ds10 »

Bud hat geschrieben:Die "RelativeZeitFilterKomponente" habe ich installiert und anschließend einen Filter mit diesem Plugin definiert, jedoch werden keine Sendungen angezeigt. Einstellungen konnte ich auch nirgends vornehmen. Habe ich da irgendwo etwas übersehen?
Die Einstellungen befinden sich beim Erstellen einer Filterkomponente von Typ "RelativeZeitFilterKomponente". Ein Filter mit diesem Plugin hört sich falsch an, denn das Plugin fügt nur eine Filterkomponente hinzu, die man dann verwenden kann.
Bud hat geschrieben:Ein Codeschnipsel der dieses Datum als Zahl zur Verfügung stellt - welchen ich in den o. a. Code einfügen könnte - würde mir genügen.

Code: Alles auswählen

Plugin.getPluginManager().getCurrentDate();
stellt das aktuell angezeigte Datum als TV-Browser Date zur Verfügung, das kann man wie beim Calendar start verarbeiten. Man muss dazu dann noch Plugin in den Code importieren:

Code: Alles auswählen

import devplugin.Plugin;
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
ds10
Site Admin
Beiträge: 19119
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Filter relativ zur aktuellen Zeit

Beitrag von ds10 »

Ich habe jetzt ein Update für das Plugin RelativeZeitFilterKomponente hochgeladen. Die Filterkomponente heißt jetzt "Zeit relativ" und man kann dort einstellen, dass der Bezugspunkt nicht die aktuelle Zeit ist, sondern der angezeigte Tag und die aktuelle Tageszeit.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Antworten