X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/0d3b6f2c16aec76d38593a9e01d272817fb7fdd4..d9b91542e07a2296b69141433d863fe8028b148e:/lib/dvb/epgcache.cpp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 46785de1..e8394c40 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -766,7 +766,10 @@ void eEPGCache::gotMessage( const Message &msg ) data->m_PrevVersion = -1; data->m_PrivatePid = msg.pid; data->m_PrivateService = msg.service; - updateMap::iterator It = channelLastUpdated.find( channel->getChannelID() ); + int onid = chid.original_network_id.get(); + onid |= 0x80000000; // we use highest bit as private epg indicator + chid.original_network_id = onid; + updateMap::iterator It = channelLastUpdated.find( chid ); int update = ( It != channelLastUpdated.end() ? ( UPDATE_INTERVAL - ( (eDVBLocalTimeHandler::getInstance()->nowTime()-It->second) * 1000 ) ) : ZAP_DELAY ); if (update < ZAP_DELAY) update = ZAP_DELAY; @@ -1572,7 +1575,7 @@ void fillTuple(PyObject *tuple, char *argstring, int argcount, PyObject *service } } -PyObject *handleEvent(ePtr &ptr, PyObject *dest_list, char* argstring, int argcount, PyObject *service, PyObject *nowTime, PyObject *service_name, PyObject *convertFunc, PyObject *convertFuncArgs) +int handleEvent(ePtr &ptr, PyObject *dest_list, char* argstring, int argcount, PyObject *service, PyObject *nowTime, PyObject *service_name, PyObject *convertFunc, PyObject *convertFuncArgs) { if (convertFunc) { @@ -1586,7 +1589,10 @@ PyObject *handleEvent(ePtr &ptr, PyObject *dest_list, char* argst Py_DECREF(nowTime); Py_DECREF(convertFuncArgs); Py_DECREF(dest_list); - return result; + PyErr_SetString(PyExc_StandardError, + "error in convertFunc execute"); + eDebug("error in convertFunc execute"); + return -1; } PyList_Append(dest_list, result); Py_DECREF(result); @@ -1778,9 +1784,11 @@ PyObject *eEPGCache::lookupEvent(PyObject *list, PyObject *convertFunc) ePtr ptr; while (!getNextTimeEntry(ptr)) { - PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs); - if (ret) - return ret; + if (handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) + { + Unlock(); + return 0; // error + } } } Unlock(); @@ -1795,9 +1803,8 @@ PyObject *eEPGCache::lookupEvent(PyObject *list, PyObject *convertFunc) else lookupEventTime(ref, stime, ptr, type); } - PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs); - if (ret) - return ret; + if (handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) + return 0; // error } if (service_changed) Py_DECREF(service); @@ -2123,7 +2130,8 @@ PyObject *eEPGCache::search(PyObject *arg) // check all events for (timeMap::iterator evit(evmap.begin()); evit != evmap.end() && maxcount; ++evit) { - if (evit->second->getEventID() == eventid) + int evid = evit->second->getEventID(); + if ( evid == eventid) continue; __u8 *data = evit->second->EITdata; int tmp = evit->second->ByteSize-12; @@ -2152,7 +2160,7 @@ PyObject *eEPGCache::search(PyObject *arg) ePtr ptr; if (needServiceEvent) { - lookupEventId(ref, evit->first, ptr); + lookupEventId(ref, evid, ptr); if (!ptr) eDebug("event not found !!!!!!!!!!!"); } @@ -2374,6 +2382,7 @@ void eEPGCache::privateSectionRead(const uniqueEPGKey ¤t_service, const __ { switch( (tsid << 16) | sid ) { + case 0x01030b: sid = 0x1b; tsid = 4; break; // Premiere Win case 0x0300f0: sid = 0xe0; tsid = 2; break; case 0x0300f1: sid = 0xe1; tsid = 2; break; case 0x0300f5: sid = 0xdc; break; @@ -2495,6 +2504,11 @@ void eEPGCache::channel_data::readPrivateData( const __u8 *data) if ( seenPrivateSections.size() == (unsigned int)(data[7] + 1) ) { eDebug("[EPGC] private finished"); + eDVBChannelID chid = channel->getChannelID(); + int tmp = chid.original_network_id.get(); + tmp |= 0x80000000; // we use highest bit as private epg indicator + chid.original_network_id = tmp; + cache->channelLastUpdated[chid] = eDVBLocalTimeHandler::getInstance()->nowTime(); m_PrevVersion = (data[5] & 0x3E) >> 1; startPrivateReader(); } @@ -3213,7 +3227,7 @@ start_summary: } } abort: - isRunning &= ~eEPGCache::MHW; + isRunning &= ~MHW; m_MHWConn2=0; if ( m_MHWReader2 ) m_MHWReader2->stop();