BeanShell Produktionsjahr - Exception

Bei Problemen mit der Bedienung von TV-Browser, bitte hier posten.
Antworten
drophex

BeanShell Produktionsjahr - Exception

Beitrag von drophex »

Hi, ich hab ein Problem mit BeanShell. Ich versuche, einen Filter zu basteln, der mir nur Sendungen liefert, die ab z.B. 2017 produziert wurden.
Mein Code sieht so aus:

Code: Alles auswählen

import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;

accept(Program p) {

	int year = p.gettField(ProgramFieldType.PRODUCTION_YEAR_TYPE);
	if (year != null && year > 2017) {

	return true;
	}
}

return (BeanShellProgramFilterIf) this;
Leider bekomme ich eine Exception, Grund schein folgendes zu sein:

Code: Alles auswählen

Typed variable declaration : Error in method invocation: Method gettField( devplugin.ProgramFieldType ) not found in class'tvdataservice.MutableProgram' : at Line: 7 : in file: inline evaluation of: ``import devplugin.beanshell.BeanShellProgramFilterIf; import devplugin.Program; i . . . '' : p .gettField ( ProgramFieldType .PRODUCTION_YEAR_TYPE ) 
In der API Doku steht aber die Funktion drin:
www_tvbrowser_org/dev/api/tvbrowser_v2.7.6/doc/tvdataservice/MutableProgram.html#getIntField(devplugin.ProgramFieldType)

Bitte um Hilfe. Was mach ich denn falsch :/

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

Re: BeanShell Produktionsjahr - Exception

Beitrag von ds10 »

Du nutzt da eine ziemlich alte API, in neueren Versionen kann das bedeuten, dass bestimmte Methoden nicht mehr existieren. Außerdem ist der Zugriff auf die genannte Methode protected, d.h. da könntest du gar nicht ohne Reflection drauf zugreifen.

Du musst stattdessen die Methode für int-Felder benutzen:

Code: Alles auswählen

p.getIntField(ProgramFieldType.PRODUCTION_YEAR_TYPE)
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
drophex

Re: BeanShell Produktionsjahr - Exception

Beitrag von drophex »

Hi ds10,

danke für die schnelle Antwort. Ich stelle mich eventuell etwas blöd an. Ich habs jetzt wie folgt abgeändert:

Code: Alles auswählen

import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;

accept(Program p) {

	try {
		int year = p.getIntField(ProgramFieldType.PRODUCTION_YEAR_TYPE);
		if (year != null && year > 2017) {
		return true;
		}
	}
	catch(Exception e) {
		return false;
	}
	return false;
}

return (BeanShellProgramFilterIf) this;
Syntax wird jetzt als OK angenommen. Aber Tv-Browser sagt mir anschließend, dass der gewählte Filter nicht für eine Suche verwendet werden kann?

LG drophex
drophex

Re: BeanShell Produktionsjahr - Exception

Beitrag von drophex »

Sorry, die Code-Formatierung hat nicht funktioniert und ich kann nicht editieren ^^
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell Produktionsjahr - Exception

Beitrag von ds10 »

BeanShell-Filter sind grundsätzlich von der Verwendung in der Suche nach Lieblingssendungen ausgeschlossen. Wenn du einen BeanShell-Filter verwenden möchtest, dann kannst du die Datei settings.prop im Homeverzeichnis mit einem Editor öffnen (wenn TV-Browser nicht läuft) und am Ende eine neue Zeile mit folgenden Text hinzufügen:

Code: Alles auswählen

favoriteBlockedFilterComponents=
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
drophex

Re: BeanShell Produktionsjahr - Exception

Beitrag von drophex »

Hey, danke Dir vielmals, es funktioniert :-)
Jetzt hab ich einen Lieblinssendungseintrag, die mir Dokus/Reportagen ab dem Produktionsjahr 2017 auf 3sat und Arte liefert :-)

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

Re: BeanShell Produktionsjahr - Exception

Beitrag von ds10 »

Es gibt übrigens einen guten Grund, warum bestimmte Filter von der Suche nach Lieblingssendungen ausgeschlossen sind. Bei den entsprechenden Filter besteht die Gefahr, dass eine Endlosschleife einprogrammiert wird und TV-Browser dann einfriert. Da du die Einschränkung jetzt aufgehoben hast, solltest du besonders darauf achten, solche Endlosschleifen nicht einzubauen.
"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