Seite 1 von 1

BeanShell Produktionsjahr - Exception

Verfasst: 10 Jul 2020, 21:36
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

Re: BeanShell Produktionsjahr - Exception

Verfasst: 10 Jul 2020, 22:17
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)

Re: BeanShell Produktionsjahr - Exception

Verfasst: 10 Jul 2020, 23:04
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

Re: BeanShell Produktionsjahr - Exception

Verfasst: 10 Jul 2020, 23:06
von drophex
Sorry, die Code-Formatierung hat nicht funktioniert und ich kann nicht editieren ^^

Re: BeanShell Produktionsjahr - Exception

Verfasst: 10 Jul 2020, 23:22
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=

Re: BeanShell Produktionsjahr - Exception

Verfasst: 11 Jul 2020, 09:42
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

Re: BeanShell Produktionsjahr - Exception

Verfasst: 11 Jul 2020, 13:51
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.