Wäre es möglich, auch noch den Kanal mit zu übergeben? Oder kann der EpgHandler das irgendwie anders herausfinden?
Aber cEIT hat den Kanal sowieso schon geholt, wäre also doppelte Arbeit, wenn der EpgHandler das auch noch mal machen müsste.
Sollte evtl. noch der cSchedule-Pointer übergeben werden? Was braucht der EpgHandler eigentlich alles vom vdr, damit er arbeiten kann?
Ich kann noch den cSchedule-Pointer an die HandleEitEvent-Funktion mit übergeben.
cSchedule hat die Channel-ID, damit müsste dann alles bekannt sein, was benötigt wird.
Zitat
Ich wiederhole noch mal in meinen Worten, damit ich weiß, ob ich das richtig verstanden habe:
- Der vdr holt die EIT-Daten aus dem DVB-Stream und fragt den EpgHandler, ob er damit was anfangen kann. Der kann dann selbst ein cEvent-Objekt erstellen/modifizieren und dem vdr die Arbeit abnehmen (Rückgabewert "true").
- Wenn nicht, verarbeitet der vdr die Daten wie bisher und erstellt/modifiziert das entsprechende cEvent-Objekt.
- Wenn der vdr die Daten selbst verarbeitet, wird dem EpgHandler beim Modifizieren des cEvent-Objekts die Möglichkeit geboten, nur den Title, ShortText und Description zu überschreiben (Rückgabewert "true"). Wenn "false", setzt der vdr die Texte aus den EIT-Daten.
- Zusätzlich kann der EpgHandler dann noch mal das fertige cEvent sehen und ggf. noch mal ändern (falls er die Set-Funktionen nicht überschrieben hat bzw. irgendwas anderes daran ändern will)
Ein "noEPG" ließe sich damit realisieren, indem der EpgHandler einfach "true" für die entsprechenden Kanäle an den vdr zurückgibt und gar kein cEvent anlegt.
Stimmt alles.
Zitat
Da es unterschiedliche EPG-Quellen gibt und evtl. manche für bestimmte Kanäle besser sind als andere, sollte es möglich sein, mehrere EpgHandler zu registrieren.
Sobald einer "true" zurückgibt, werden die übrigen einfach nicht mehr gefragt. Die Reihenfolge ergibt sich auch der Ladereihenfolge der Plugins.
OK.
Zitat
Dem EpgHandler sollte ermöglicht werden, eine eigene ID an das cEvent zu hängen, damit er es leichter wiedererkennen kann.
Ungern, denn dann bräuchte wahrscheinlich wieder jeder EPG-Handler seine eigene ID. Es gibt ja bereits die Channel-ID und die Event-ID, das ist ja eigentlich eindeutig.
Hier mal cEpgHandler, soweit bis jetzt vereinbart:
class cEpgHandler : public cListObject {
public:
cEpgHandler(void) {}
virtual ~cEpgHandler() {}
virtual bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent) { return false; }
virtual bool SetTitle(cEvent *Event, const char *Title) { return false; }
virtual bool SetShortText(cEvent *Event, const char *ShortText) { return false; }
virtual bool SetDescription(cEvent *Event, const char *Description) { return false; }
virtual bool HandleEvent(cEvent *Event) { return false; }
};
Klaus
Edit: s/cListBase/cLIstObject/