X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fdvb%2Fepgcache.cpp;h=fb121ae8e4dbadfe32546891e45ed8ab9a8a31ba;hb=c1311444ea249a45d0eceefa15d77fce410a54da;hp=587d680c49bdc8b58664b7201ebac03a5fc65e8f;hpb=d0c0c67fa9ad177ea46552d435e525a598fadcca;p=vuplus_dvbapp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 587d680..fb121ae 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; }