Da das Thema "Externer EPG" immer wieder hochkommt und bis hin zu "die EPG-Behandlung soll völlig vom VDR getrennt werden" eskaliert (was nicht stattfinden wird, denn der EPG ist eine zentrale VDR-Funktion), mache ich hier mal einen Vorschlag, wie ich mir eine Plugin-Schnittstelle hierfür vorstellen könnte.
- Die bisherige Sonderbehandlung für Table-ID 0x00 bleibt aus Gründen der Kompatibilität wie gehabt.
- Die in Version 1.7.25 eingeführte Eigenschaft, daß die komplette Liste ignoriert wird, wenn der erste Event Table-ID 0x00 hat, wird wieder zurückgenommen.
- Ein Objekt der neuen Klasse cEpgHandler kann von einem Plugin implementiert werden, um externen EPG einzuspeisen.
- In eit.c passiert folgendes:
- Unmittelbar zu Beginn der for-Schleife über die SiEitEvents wird die Funktion
virtual bool cEpgHandler::HandleEitEvent(const SI::EIT::Event *EitEvent);
aufgerufen. Diese kann den Event entweder selber behandeln und 'true' zurückliefern, woraufhin VDR selber den Event nicht weiter behandelt. Das Plugin muß sich dann aber auch wirklich um alles selber kümmern. Liefert die Funktion 'false' zurück, so wird der normale VDR-Code für diesen Event ausgeführt.
- Title, ShortText und Description werden über die Funktionen
virtual bool cEpgHandler::SetTitle(cEvent *Event, const char *Title);
virtual bool cEpgHandler::SetShortText(cEvent *Event, const char *ShortText);
virtual bool cEpgHandler::SetDescription(cEvent *Event, const char *Description);
gesetzt. Die Default-Implementierung ruft wie bisher die entsprechende Set...()-Function des Events auf. Ein Plugin kann diese Funktionen überschreiben und nach eigenem Gutdünken verfahren.
- Am Ende der for-Schleife wird die Funktion
virtual void cEpgHandler::HandleEvent(cEvent *Event);
aufgerufen. Hier kann das Plugin den fertig bearbeiteten Event nochmal "sehen" und letzte Veränderungen durchführen.
Würde das für diejenigen, die "externen EPG" verwenden wollen, brauchbar sein?
Klaus