X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/24ac423a92cf63ed6a8a09fa1ef48bef2c9382a6..a029953596adaed49a5b0346acd5a867eff91a57:/lib/dvb/epgcache.cpp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 550561e2..8cdfa0c9 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -1508,33 +1508,30 @@ RESULT eEPGCache::lookupEventId(const eServiceReference &service, int event_id, RESULT eEPGCache::startTimeQuery(const eServiceReference &service, time_t begin, int minutes) { const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)handleGroup(service); + if (begin == -1) + begin = eDVBLocalTimeHandler::getInstance()->nowTime(); Lock(); eventCache::iterator It = eventDB.find(ref); if ( It != eventDB.end() && It->second.second.size() ) { - if ( begin != -1 ) + m_timemap_cursor = It->second.second.lower_bound(begin); + if ( m_timemap_cursor != It->second.second.end() ) { - m_timemap_cursor = It->second.second.lower_bound(begin); - if ( m_timemap_cursor != It->second.second.end() ) + if ( m_timemap_cursor->first != begin ) { - if ( m_timemap_cursor->first != begin ) + timeMap::iterator x = m_timemap_cursor; + --x; + if ( x != It->second.second.end() ) { - timeMap::iterator x = m_timemap_cursor; - --x; - if ( x != It->second.second.end() ) - { - time_t start_time = x->first; - if ( begin > start_time && begin < (start_time+x->second->getDuration())) - m_timemap_cursor = x; - } + time_t start_time = x->first; + if ( begin > start_time && begin < (start_time+x->second->getDuration())) + m_timemap_cursor = x; } } } - else - m_timemap_cursor = It->second.second.begin(); - if (minutes != -1 && m_timemap_cursor != It->second.second.end()) - m_timemap_end = It->second.second.upper_bound(m_timemap_cursor->first+minutes*60); + if (minutes != -1) + m_timemap_end = It->second.second.upper_bound(begin+minutes*60); else m_timemap_end = It->second.second.end(); @@ -1587,7 +1584,7 @@ RESULT eEPGCache::getNextTimeEntry(ePtr &result) return -1; } -void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service, ePtr &ptr, ePyObject nowTime, ePyObject service_name ) +void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service, eServiceEvent *ptr, ePyObject nowTime, ePyObject service_name ) { ePyObject tmp; int pos=0; @@ -1641,7 +1638,7 @@ void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service } } -int handleEvent(ePtr &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, char* argstring, int argcount, ePyObject service, ePyObject nowTime, ePyObject service_name, ePyObject convertFunc, ePyObject convertFuncArgs) { if (convertFunc) { @@ -1799,6 +1796,10 @@ PyObject *eEPGCache::lookupEvent(ePyObject list, ePyObject convertFunc) break; } } + + if (minutes && stime == -1) + stime = eDVBLocalTimeHandler::getInstance()->nowTime(); + eServiceReference ref(handleGroup(eServiceReference(PyString_AS_STRING(service)))); if (ref.type != eServiceReference::idDVB) { @@ -1861,29 +1862,39 @@ PyObject *eEPGCache::lookupEvent(ePyObject list, ePyObject convertFunc) Lock(); if (!startTimeQuery(ref, stime, minutes)) { - ePtr ptr; - while (!getNextTimeEntry(ptr)) + while ( m_timemap_cursor != m_timemap_end ) { - if (handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) + Event ev((uint8_t*)m_timemap_cursor++->second->get()); + eServiceEvent evt; + evt.parseFrom(&ev, currentQueryTsidOnid); + if (handleEvent(&evt, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) { Unlock(); return 0; // error } } } + else + handleEvent(0, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs); Unlock(); } else { - ePtr ptr; + eServiceEvent evt; + Event *ev=0; if (stime) { if (type == 2) - lookupEventId(ref, event_id, ptr); + lookupEventId(ref, event_id, ev); else - lookupEventTime(ref, stime, ptr, type); + lookupEventTime(ref, stime, ev, type); + if (ev) + { + const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref; + evt.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); + } } - if (handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) + if (handleEvent(ev ? &evt : 0, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) return 0; // error } if (service_changed) @@ -1901,7 +1912,7 @@ skip_entry: return dest_list; } -void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData *evData, ePtr &ptr, ePyObject service_name, ePyObject service_reference) +void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData *evData, eServiceEvent *ptr, ePyObject service_name, ePyObject service_reference) { ePyObject tmp; int pos=0; @@ -2239,12 +2250,17 @@ PyObject *eEPGCache::search(ePyObject arg) if (ref.valid()) { // create servive event - ePtr ptr; + eServiceEvent ptr; + Event *ev=0; if (needServiceEvent) { - lookupEventId(ref, evid, ptr); - if (!ptr) + if (lookupEventId(ref, evid, ev)) eDebug("event not found !!!!!!!!!!!"); + else + { + const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref; + ptr.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); + } } // create service name if (!service_name) @@ -2292,7 +2308,7 @@ PyObject *eEPGCache::search(ePyObject arg) // create tuple ePyObject tuple = PyTuple_New(argcount); // fill tuple - fillTuple2(tuple, argstring, argcount, evit->second, ptr, service_name, service_reference); + fillTuple2(tuple, argstring, argcount, evit->second, ev ? &ptr : 0, service_name, service_reference); PyList_Append(ret, tuple); Py_DECREF(tuple); --maxcount;