Ich habe mir mal die sourcen des nhttpd, speziell die controlapi.cpp genauer angesehen.
Für meinen zweiten feuture-request müsste man nur eine Zeile (wie schon gesagt) austauschen. Und zwar in der controlapi.cpp in der Funktion CControlAPI::EpgCGI. Kurz vor Ende der Funktion gibt es folgenden Code:
Code: Alles auswählen
else if (!(request->ParameterList["id"].empty()))
{
t_channel_id channel_id;
sscanf(request->ParameterList["id"].c_str(),
SCANF_CHANNEL_ID_TYPE,
&channel_id);
Parent->eList = Parent->Sectionsd->getEventsServiceKey(channel_id);
CChannelEventList::iterator eventIterator;
for (eventIterator = Parent->eList.begin(); eventIterator != Parent->eList.end(); eventIterator++)
{
CShortEPGData epg;
if (Parent->Sectionsd->getEPGidShort(eventIterator->eventID,&epg))
{
request->printf("%llu %ld %d\n", eventIterator->eventID, eventIterator->startTime, eventIterator->duration);
request->printf("%s\n",epg.title.c_str());
request->printf("%s\n",epg.info1.c_str());
request->printf("%s\n\n",epg.info2.c_str()); // <--- Markierung
}
}
return true;
}
Die markierte Zeile müsste mit
Code: Alles auswählen
request->printf("%s----------fvjnflkvodfjsaefgajodfjg\n\n",epg.info2.c_str());
ausgetauscht werden. Dadurch dass der "\n\n"-Teil erhalten bleibt wird es auch kein Problem mit alten Programmen geben (sofern überhaupt jmd ausser mir diese Funktion verwendet). In allen alten Programmen wird halt in der Erweiterten Info eines EPGs eben immer noch zusätzlich die Boundary, nämlich "----------fvjnflkvodfjsaefgajodfjg" angezeigt, allerdings werden sie trotzdem funktionieren das sie ja das alte "\n\n" doch finden. Neue Programme können nun aber präzise nach dem string suchen und habe kein Problem mehr mit "\n" innerhalb der EPG Daten...
Noch besser würde sich auch folgendes machen:
Code: Alles auswählen
request->printf("%s----------dklfjgdlkjgdfghasdffasd\n",epg.title.c_str());
request->printf("%s----------dklfjgdlkjgdfghasdffasd\n",epg.info1.c_str());
request->printf("%s----------fvjnflkvodfjsaefgajodfjg\n\n",epg.info2.c_str());
Damit kann man auch die einzelne Datenfelder ein-eindeutig auseinander halten. Allerdings würde das evtl bei alten Anwendungen tatsächlich stören, da diese nun den Titel einer Sendung z.B. mit "Tagesschau----------dklfjgdlkjgdfghasdffasd" angeben würden (aber wie schon gesagt, ich denke fast, dass speziell die Variante epg?id=<channel-id> von keinem Programm genutzt wird, weil sie eben schwer zu parsen ist) Andererseits ist diese Fukntion aber die beste Möglichkeit schnell mit nur einer Verbindung an den detailierten EPG einers Senders zu kommen)
Was denkt ihr? Würde das einer der devs einpflegen?
Mein request für /control/zapto?getallsubchannels besteht immer noch
Grüßle
A.