• Ich stehe gerade vollkommen auf dem Schlauch und es gibt einen Dissens zwischen meiner Erwartung und dem beobachteten Verhalten.
    Oder ich verstehe den cEpgHandler überhaupt komplett falsch.

    Plugins habe ich nur das Minimum geladen und keines, daß irgendetwas mit den EPG Daten macht. Die epg.data auch extra gelöscht, damit keine Altlasten im System sind.
    Implementiert habe ich die Methode cEpgHandler::HandleEvent(cEvent* Event).

    Meine Erwartung wäre: Sobald ein Event sich ändert oder neu angelegt wird, dann wird diese Methode aufgerufen.
    Meine Beobachtung: Die Methode wird bei VDR Start mehrfach aufgerufen für eine handvoll Events. Und danach wird die Methode nie wieder aufgerufen - auch nach einem längeren Testlauf.

    Schaue ich dann in das Programm, sind erheblich mehr Daten zu finden, für die aber kein Aufruf stattgefunden hat.

    Jetzt die Fragen: Was habe ich falsch verstanden oder könnte ich falsch machen? Oder ist der Handler für etwas vollkommen anderes gedacht?

  • Ich fürchte, ich bin hier seit Stunden auf Gespensterjagd :wand *Ghostbuster Melodie einspiel*

    Ich habe tatsächlich nur HandleEvent implementiert und sonst nix anderes. Und darin nur die Ausgabe getätigt, um zu sehen, was so ankommt:
    std::cout << EventIds, ChannelIds und so weiter << std::endl;
    Und auf der Konsole waren so insgesamt nur 120 Event zu sehen, trotz svdrpsend scan. Es wurden einfach nicht mehr.

    Jetzt habe ich die Ausgabe geändert auf
    fprintf(stderr, "....", alle Werte);
    fflush(stderr);

    Und siehe da. Auf der Konsole tanzt der Bär. Keine Ahnung, was ich jetzt davon halten soll, aber der Aufruf wird wie erwartet durchgeführt.

    Ich habe VDR auch nochmal komplett neu übersetzen lassen, aber ob das Auswirkungen hatte, weiß ich nicht.

  • VDR ruft HandleEvent() ja nur auf wenn sich die TableId oder Version geändert hat (also neue oder geänderte Events wie kls schon schrieb).

    Du kannst ja mal BeginSegmentTransfer() implementieren (muss true zurückliefern damit VDR weiter macht) um zu sehen welchen Sender und Zeitsegment VDR gerade bearbeitet. Wenn IsUpdate() für einen Event false zurück liefert wird er nicht weiter bearbeitet. Irgendwann gabs auch Pausen IIRC (hatte ich beim Debuggen bemerkt), kann aber nicht mehr sagen wann.
    Das Umschalten auf einen anderen Transponder sollte auch einen "Event-Storm" sichtbar machen, nicht nur der Scan.

    Du kannts auch mal in handler.cpp meines xmltv4vdr-Plugins schauen wie ich das implementiert habe

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!