void eEPGCache::timeUpdated()
{
- if ( !thread_running() )
+ if (!sync())
{
eDebug("[EPGC] time updated.. start EPG Mainloop");
run();
- }
- else
+ } else
messages.send(Message(Message::timeChanged));
}
void eEPGCache::thread()
{
+ hasStarted();
nice(4);
load();
cleanLoop();
{
if (!isRunning) // epg ready
{
- eDebug("[EPGC] stop caching events(%d)", time(0)+eDVBLocalTimeHandler::getInstance()->difference());
+ eDebug("[EPGC] stop caching events(%ld)", time(0)+eDVBLocalTimeHandler::getInstance()->difference());
zapTimer.start(UPDATE_INTERVAL, 1);
eDebug("[EPGC] next update in %i min", UPDATE_INTERVAL / 60000);
for (int i=0; i < 3; ++i)
void eEPGCache::channel_data::startEPG()
{
- eDebug("[EPGC] start caching events(%d)", eDVBLocalTimeHandler::getInstance()->difference()+time(0));
+ eDebug("[EPGC] start caching events(%ld)", eDVBLocalTimeHandler::getInstance()->difference()+time(0));
state=0;
haveData=0;
can_delete=0;
break;
default: eDebugNoNewLine("unknown");break;
}
- eDebug(" finished(%d)", time(0)+eDVBLocalTimeHandler::getInstance()->difference());
+ eDebug(" finished(%ld)", time(0)+eDVBLocalTimeHandler::getInstance()->difference());
if ( reader )
reader->stop();
isRunning &= ~source;
PyObject *item=PyList_GET_ITEM(list, listIt++); // borrowed reference!
if (PyTuple_Check(item))
{
+ bool service_changed=false;
int type=0;
long event_id=-1;
time_t stime=-1;
eDebug("service reference for epg query is not valid");
continue;
}
+
+ // redirect subservice querys to parent service
+ eServiceReferenceDVB &dvb_ref = (eServiceReferenceDVB&)ref;
+ if (dvb_ref.getParentTransportStreamID().get()) // linkage subservice
+ {
+ eServiceCenterPtr service_center;
+ if (!eServiceCenter::getPrivInstance(service_center))
+ {
+ dvb_ref.setTransportStreamID( dvb_ref.getParentTransportStreamID() );
+ dvb_ref.setServiceID( dvb_ref.getParentServiceID() );
+ dvb_ref.setParentTransportStreamID(eTransportStreamID(0));
+ dvb_ref.setParentServiceID(eServiceID(0));
+ dvb_ref.name="";
+ service = PyString_FromString(dvb_ref.toString().c_str());
+ service_changed = true;
+ }
+ }
+
PyObject *service_name=NULL;
if (must_get_service_name)
{
if (ret)
return ret;
}
+ if (service_changed)
+ Py_DECREF(service);
if (service_name)
Py_DECREF(service_name);
}
if (tmp==3)
{
eServiceReferenceDVB ref;
- if (!pmthandler->getService(ref))
+ if (!pmthandler->getServiceReference(ref))
{
int pid = (*es)->getPid();
messages.send(Message(Message::got_private_pid, ref, pid));
onid |= data[ptr++];
int sid = data[ptr++] << 8;
sid |= data[ptr++];
+
+// WORKAROUND for wrong transmitted epg data
+ if ( onid == 0x85 && tsid == 0x11 && sid == 0xd3 ) // premiere sends wrong tsid here
+ tsid = 0x1;
+ else if ( onid == 0x85 && tsid == 0x3 && sid == 0xf5 ) // premiere sends wrong sid here
+ sid = 0xdc;
+////////////////////////////////////////////
+
uniqueEPGKey service( sid, onid, tsid );
descr_len -= 6;
while( descr_len > 0 )