if ( data[ptr-1] < 0x40 )
--ptr;
- uniqueEPGKey service( HILO(eit->service_id), HILO(eit->original_network_id), HILO(eit->transport_stream_id) );
+ // Cablecom HACK .. tsid / onid in eit data are incorrect.. so we use
+ // it from running channel (just for current transport stream eit data)
+ bool use_transponder_chid = source == SCHEDULE || (source == NOWNEXT && data[0] == 0x4E);
+ eDVBChannelID chid = channel->channel->getChannelID();
+ uniqueEPGKey service( HILO(eit->service_id),
+ use_transponder_chid ? chid.original_network_id.get() : HILO(eit->original_network_id),
+ use_transponder_chid ? chid.transport_stream_id.get() : HILO(eit->transport_stream_id));
+
eit_event_struct* eit_event = (eit_event_struct*) (data+ptr);
int eit_event_size;
int duration;
return -1;
}
-void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service, eServiceEvent *ptr, ePyObject nowTime, ePyObject service_name )
+void fillTuple(ePyObject tuple, const char *argstring, int argcount, ePyObject service, eServiceEvent *ptr, ePyObject nowTime, ePyObject service_name )
{
ePyObject tmp;
int spos=0, tpos=0;
}
}
-int handleEvent(eServiceEvent *ptr, ePyObject dest_list, char* argstring, int argcount, ePyObject service, ePyObject nowTime, ePyObject service_name, ePyObject convertFunc, ePyObject convertFuncArgs)
+int handleEvent(eServiceEvent *ptr, ePyObject dest_list, const char* argstring, int argcount, ePyObject service, ePyObject nowTime, ePyObject service_name, ePyObject convertFunc, ePyObject convertFuncArgs)
{
if (convertFunc)
{
{
ePyObject convertFuncArgs;
int argcount=0;
- char *argstring=NULL;
+ const char *argstring=NULL;
if (!PyList_Check(list))
{
PyErr_SetString(PyExc_StandardError,
else
{
eServiceEvent evt;
- Event *ev=0;
+ const eventData *ev_data=0;
if (stime)
{
singleLock s(cache_lock);
if (type == 2)
- lookupEventId(ref, event_id, ev);
+ lookupEventId(ref, event_id, ev_data);
else
- lookupEventTime(ref, stime, ev, type);
- if (ev)
+ lookupEventTime(ref, stime, ev_data, type);
+ if (ev_data)
{
const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref;
- evt.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get());
+ Event ev((uint8_t*)ev_data->get());
+ evt.parseFrom(&ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get());
}
}
- if (ev)
+ if (ev_data)
{
if (handleEvent(&evt, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs))
return 0; // error
{
// create servive event
eServiceEvent ptr;
- Event *ev=0;
+ const eventData *ev_data=0;
if (needServiceEvent)
{
- if (lookupEventId(ref, evid, ev))
+ if (lookupEventId(ref, evid, ev_data))
eDebug("event not found !!!!!!!!!!!");
else
{
const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref;
- ptr.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get());
+ Event ev((uint8_t*)ev_data->get());
+ ptr.parseFrom(&ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get());
}
}
// create service name
// create tuple
ePyObject tuple = PyTuple_New(argcount);
// fill tuple
- fillTuple2(tuple, argstring, argcount, evit->second, ev ? &ptr : 0, service_name, service_reference);
+ fillTuple2(tuple, argstring, argcount, evit->second, ev_data ? &ptr : 0, service_name, service_reference);
PyList_Append(ret, tuple);
Py_DECREF(tuple);
--maxcount;