Falsch-Positive Filterung in CSV-Dateifilter-Komponente

Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Schau Dir doch mal die ProgrammIDs an. Die gehören doch gar nicht zu Syfy.
Die Filterkomponente sagt doch nur ja oder nein zu einer ProgrammID, filtert aber nicht.
Das macht der resultierende Filter.

Die oben aufgeführten ProgrammIDs führen exakt zu den Sendungen auf Syfy.
Mit diesen ProgrammIDs kann ich aber gar nicht bei Syfy landen.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Irgendwie verstehst du da etwas nicht. TV-Browser gibt ALLE neuen oder geänderten Sendungen bei einem Datenupdate an die Lieblingssendungen weiter und die Lieblingssendung filtert dann die Sendungen nach den Suchbedingungen, bevor sie einen evtl. vorhandenen Filter abfragt. Bei einer Filter-Lieblingssendung werden aber sämtliche Sendungen durchgelassen und dann an den Filter weitergereicht. Die beteiligten Filter-Komponenten eines Filters werden dann logischerweise auch alle Sendungen erhalten, das ist der Sinn der Sache. Und die Filter-Komponente sagt entweder, dass die Sendung akzeptiert wird oder nicht, das wird nach den Regeln des Filters dann zu einem Endergebnis zusammen gefügt und die Lieblingssendungen erhalten dann als Antwort true oder false. Es KANN NICHT an den Lieblingssendungen oder der Sendungsliste liegen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Es liegt wohl auch nicht an der Sendungsliste oder den Lieblingssendungen, sondern an den Daten.

Die CSV-Datei-Filterkomponente gibt für die ProgrammID

Code: Alles auswählen


tvbrowserdataservice.TvBrowserDataService_digital_de_SFI_2016-01-30_20:15:60


ein true zurück. Dann muß derTV-Broweser die Sendung als Sendung auf SF1 anzeigen.
Sie wird aber als Sendung auf Syfy angezeigt. Das kannst Du an allen Einzelfällen prüfen.

Die Filterkomponente hat keinen Einfluß auf die Senderzuordnung. Das macht der TV-Browser.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Kümmere dich nicht um IDs von Sendungen, die spielen hier überhaupt keine Rolle. Die ID eines Senders muss nicht mit dem Namen des Senders übereinstimmen, denn Sendernamen werden auch mal geändert. TV-Browser gibt auch keine IDs an die Filterkomponenten weiter, sondern Instanzen von Sendungen und für diese Instanzen gibt die Filterkomponente ein Ergebnis zurück. Die IDs kommen nur bei Speicherung und Laden der Daten ins Spiel, aber wenn die Sendungsliste die Sendungen an die Filter weiterleitet, sind die Sendungen schon geladen und damit die ID für die Funktionalität des Filters belanglos. Du speicherst die IDs zwar in deiner Filterkomponente, aber mit dem Ergebnis dass die Filterung der Instanz zuvor ergeben hat, also hast du beim ersten Filtern der Sendung die ID nicht verwendet, und das Ergebnis der ersten Filterung wird dann nur zwischengespeichert. Die Anzeige in der Sendungsliste basiert also beim ersten Aufruf des Filters nicht auf den IDs und auch dann werden die falschen Sendungen angezeigt.

Es kann schon aus logischen Gesichtspunkten nur an der CSV-Dateifilter-Komponente liegen, denn die einzige Änderung zwischen Auflisten der falschen Sendungen und Nicht-Auflisten ist das Ändern eines Eintrags in der CSV-Datei und die wird nunmal nur von der CSV-Dateifilter-Komponente verwaltet. Die Filter sind für die Sendungsliste eine BlackBox es wird etwas hineingegeben, dann passiert darin irgendetwas, und es kommt ein Ergebnis zurück, wie das Ergebnis zustande gekommen ist weiß die Sendungsliste nicht, die verarbeitet nur das Ergebnis.

Wäre in der Erstellung der IDs ein Fehler, dann würde der nicht so spezifisch auftreten, sondern vollkommen chaotisch. Es gibt nur eine Stelle an der es theoretisch Probleme mit den IDs gibt, und das ist wenn auf einem Sender zwei Sendungen zur gleichen Zeit beginnen, die haben dann tatsächlich beide die gleiche ID.

Und um das Abzuschließen, der Sender SyFy hat als ID SFI, denn früher hieß der mal anders.
de;CET;SFI;Syfy;© by Sky/TV-Browser;http://www.sky.de;http://logos.tvbrowser.org/premiere_scifi-03.png;769;"Syfy";de
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Schau Dir das mal an. So sieht das bei allen betroffenen Sendungen aus.

Code: Alles auswählen


ProgrammID: tvbrowserdataservice.TvBrowserDataService_digital_de_SFI_2016-01-30_20:15:60
Title: raumschiffenterprise
Description: 2staffelfolge19dieenterprisebesuchteinendererdeaehnlichenplanetendiebewohnerbefindensichnochaufeinerniedrigenentwicklungsstufekirkisterstauntdassdieurspruenglichfriedliebendenbewohnermitgewehrenausgeruestetsinddasraetselloestsichschnellalsdiecrewaufklingonentrifft
SeasonNrFromDescription: 2
EpisodeNrFromDescription: 19
SeasonNr: -1 
EpisodeNr: -1

Es liegt an den Daten. Offensichtlich werden die Felder ProgramFieldType.EPISODE_NUMBER_TYPE und ProgramFieldType.SEASON_NUMBER_TYPE bei diesen Sendungen immer mit dem Wert -1 gefüllt.
Daraus wird dann nach der Bereinigung 1. Sehr unschön!

Das erklärt auch, warum die Filterkomponente diese Sendungen als Treffer ausweißt.
Das ist ja aus logischer Sicht auch richtig.

In der Filterkomponente werden die entsprechenden Felder immer neu initialisiert.
Daher können sie keine alten Werte enthalten.

Jetzt gibt es hier 2 mögliche Lösungen.
Entweder ich fange das ab oder der Datenservice schreibt dort den Wert 0 rein.
Zuletzt geändert von Sheldon2012 am 31 Jan 2016, 15:12, insgesamt 1-mal geändert.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Nein die Daten enthalten ganz sicher keine 1 in Episode und/oder Staffelnummer, denn wäre das so, dann würde man diese im Sendungsinfobetrachter sehen (vor dem Namen der Episode). Du kannst noch so lange versuchen den Fehler bei den Daten zu finden, dort liegt er nicht. Er liegt irgendwo in deiner Programmlogik. (Bei den Sendungen auf SyFy, wird übrigens -1 für Staffel und Episode zurück gegeben.)

Das kannst du auch ganz leicht mit folgender Beanshell-Filterkomponente prüfen:

Code: Alles auswählen

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

accept(Program p) {
  return p.getIntField(ProgramFieldType.EPISODE_NUMBER_TYPE) == 1 || p.getIntField(ProgramFieldType.SEASON_NUMBER_TYPE) == 1;
}

return (BeanShellProgramFilterIf) this;
Wenn deine Annahme richtig wäre, müsste ein Filter mit dieser Komponente die entsprechenden Sendungen finden, macht er aber nicht.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

System.out.println("SeasonNr: " + String.valueOf(program.getIntField(ProgramFieldType.SEASON_NUMBER_TYPE)));
System.out.println("EpisodeNr: " + String.valueOf(program.getIntField(ProgramFieldType.EPISODE_NUMBER_TYPE)));

liefert

SeasonNr: -1
EpisodeNr: -1
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Ja, genau das habe ich gesagt.

-1 ist nicht 1.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Wenn Du aus der -1 eine 0 machst, würde alles passen. Oder zerstört das bei dir etwas?
Du könntest natürlich auch die richtigen Daten in die Felder schreiben.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Ich mache da gar nichts. -1 ist immer die Rückgabe für nicht vorhandene Daten, das steht schon so in der API. Es ist die Aufgabe des Plugins das zu berücksichtigen.

EDIT: Und als Hinweis, um die Episode zu prüfen musst du diese unter Umständen zuvor dekodieren (nachdem du geprüft hast, ob dort nicht -1 drin steht):

Code: Alles auswählen

IOUtilities.decodeSingleFieldValueToMultipleEpisodeNumers(fieldValue)
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Dann fange ich das eben ab.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Den reineditierten Hinweis in meinem letzten Post hast du hoffentlich bemerkt.

Die 0 ist übrigens ein Wert der gebraucht wird, denn Sendungen können ja durchaus 0 Uhr anfangen, deshalb kann dort auch nicht 0 zurück gegeben werden, da man dann nicht unterscheiden könnte zwischen 0 und nicht vorhanden.

EDIT:
Es böte sich bei der Gelegenheit auch an gleich die Methode

Code: Alles auswählen

public boolean isBrokenCompletely() {
zu implementieren.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Wie mache ich das? Das kann man ja machen. Das Problem ist ja gerade nicht kritisch.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

@Anderella:

Ich habe die Ursache für die falschen Treffer gefunden.
Mit dem nächsten Update der CSV-Datei-Filterkomponente wird das Problem nicht mehr auftreten.
Das Update stelle ich, nach abschließenden Tests, in den nächsten Tagen online.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Also du fügst einfach nur die Methode zur Klasse der Filterkomponente hinzu:

Code: Alles auswählen

public boolean isBrokenCompletely() {
  return CSV_FILE == null || !CSV_FILE.isFile();
}
Und zusätzlich könntest du auch noch

Code: Alles auswählen

public boolean isBrokenPartially() {
  return CSV_FILE != null && (CSV_FILE.isFile() && CSV_FILE.length() == 0);
}
hinzufügen, um anzuzeigen, wenn die CSV-Datei zwar existiert, aber leer ist (CSV_FILE musst du natürlich überall mit dem richtigen Namen der File-Variablen ersetzen). Falls du eine bessere Idee hast, wie man teilweise defekt bzw. ganz defekt besser heraus finden kann, musst du das nur entsprechend anpassen.
"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