X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d0c0c67fa9ad177ea46552d435e525a598fadcca..43cceefa29ad8854b32f041839fc65190b6b3ab7:/lib/dvb/epgcache.cpp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 587d680c..fb121ae8 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -1009,29 +1009,11 @@ RESULT eEPGCache::lookupEventTime(const eServiceReference &service, time_t t, co if (!t) t = time(0)+eDVBLocalTimeHandler::getInstance()->difference(); -// TODO: optimize this.. why we here search first in timemap.. and then in eventmap?? timeMap::iterator i = It->second.second.lower_bound(t); - if ( i != It->second.second.end() ) + if ( i != It->second.second.end() && t <= i->first+i->second->getDuration() ) { - if ( i != It->second.second.end() ) - { - if ( t <= i->first+i->second->getDuration() ) - { - result = i->second; - return 0; - } - } - } - - for ( eventMap::iterator i( It->second.first.begin() ); i != It->second.first.end(); i++) - { - int duration = i->second->getDuration(); - time_t begTime = i->second->getStartTime(); - if ( t >= begTime && t <= begTime+duration) // then we have found - { - result = i->second; - return 0; - } + result = i->second; + return 0; } } return -1; @@ -1066,7 +1048,8 @@ RESULT eEPGCache::lookupEventTime(const eServiceReference &service, time_t t, eP { Event ev((uint8_t*)data->get()); result = new eServiceEvent(); - ret = result->parseFrom(&ev); + const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)service; + ret = result->parseFrom(&ev, (ref.getTransportStreamID().get()<<16)|ref.getOriginalNetworkID().get()); } return ret; } @@ -1123,7 +1106,8 @@ RESULT eEPGCache::lookupEventId(const eServiceReference &service, int event_id, { Event ev((uint8_t*)data->get()); result = new eServiceEvent(); - ret = result->parseFrom(&ev); + const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)service; + ret = result->parseFrom(&ev, (ref.getTransportStreamID().get()<<16)|ref.getOriginalNetworkID().get()); } return ret; } @@ -1147,6 +1131,8 @@ RESULT eEPGCache::startTimeQuery(const eServiceReference &service, time_t begin, } else m_timemap_cursor = It->second.second.begin(); + const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)service; + currentQueryTsidOnid = (ref.getTransportStreamID().get()<<16) | ref.getOriginalNetworkID().get(); return 0; } return -1; @@ -1188,7 +1174,7 @@ RESULT eEPGCache::getNextTimeEntry(ePtr &result) { Event ev((uint8_t*)m_timemap_cursor++->second->get()); result = new eServiceEvent(); - return result->parseFrom(&ev); + return result->parseFrom(&ev, currentQueryTsidOnid); } return -1; }