Seite 2 von 5

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 12:56
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 13:02
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 13:10
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 13:33
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

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 14:53
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:11
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:14
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

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:17
von ds10
Ja, genau das habe ich gesagt.

-1 ist nicht 1.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:19
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:29
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)

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:30
von Sheldon2012
Dann fange ich das eben ab.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:36
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:45
von Sheldon2012
Wie mache ich das? Das kann man ja machen. Das Problem ist ja gerade nicht kritisch.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:49
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.

Re: Staffel/Episoden Filterung & Anzeige

Verfasst: 31 Jan 2016, 15:56
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.