X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/41c9e42e428c0216ef2e011985c060f79fcf8ebc..556d6244747ea2b4b3590e682948e9f708b0a069:/lib/service/servicedvbrecord.cpp diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index 1b83a4c4..294315e9 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -94,61 +94,85 @@ RESULT eDVBServiceRecord::prepare(const char *filename, time_t begTime, time_t e int ret = doPrepare(); if (!ret) { - eEPGCache::getInstance()->Lock(); - const eit_event_struct *event = 0; eServiceReferenceDVB ref = m_ref.getParentServiceReference(); + ePtr res_mgr; + eDVBMetaParser meta; + std::string service_data; if (!ref.valid()) ref = m_ref; - if ( eit_event_id != -1 ) - { - eDebug("query epg event id %d", eit_event_id); - eEPGCache::getInstance()->lookupEventId(ref, eit_event_id, event); - } - if ( !event && (begTime != -1 && endTime != -1) ) + if (!eDVBResourceManager::getInstance(res_mgr)) { - time_t queryTime = begTime + ((endTime-begTime)/2); - tm beg, end, query; - localtime_r(&begTime, &beg); - localtime_r(&endTime, &end); - localtime_r(&queryTime, &query); - eDebug("query stime %d:%d:%d, etime %d:%d:%d, qtime %d:%d:%d", - beg.tm_hour, beg.tm_min, beg.tm_sec, - end.tm_hour, end.tm_min, end.tm_sec, - query.tm_hour, query.tm_min, query.tm_sec); - eEPGCache::getInstance()->lookupEventTime(ref, queryTime, event); - } - if ( event ) - { - eDebug("found event.. store to disc"); - std::string fname = filename; - fname.erase(fname.length()-2, 2); - fname+="eit"; - int fd = open(fname.c_str(), O_CREAT|O_WRONLY, 0777); - if (fd>-1) + ePtr db; + if (!res_mgr->getChannelList(db)) { - int evLen=HILO(event->descriptors_loop_length)+12/*EIT_LOOP_SIZE*/; - int wr = ::write( fd, (unsigned char*)event, evLen ); - if ( wr != evLen ) - eDebug("eit write error (%m)"); - ::close(fd); + ePtr service; + if (!db->getService(ref, service)) + { + char tmp[255]; + sprintf(tmp, "f:%x", service->m_flags); + service_data += tmp; + // cached pids + for (int x=0; x < eDVBService::cacheMax; ++x) + { + int entry = service->getCacheEntry((eDVBService::cacheID)x); + if (entry != -1) + { + sprintf(tmp, ",c:%02d%04x", x, entry); + service_data += tmp; + } + } + } } } - eEPGCache::getInstance()->Unlock(); - - } - if (ret) - return ret; - else - { - eDVBMetaParser meta; meta.m_time_create = begTime; meta.m_ref = m_ref; meta.m_data_ok = 1; + meta.m_service_data = service_data; if (name) meta.m_name = name; if (descr) meta.m_description = descr; ret = meta.updateMeta(filename) ? -255 : 0; + if (!ret) + { + const eit_event_struct *event = 0; + eEPGCache::getInstance()->Lock(); + if ( eit_event_id != -1 ) + { + eDebug("query epg event id %d", eit_event_id); + eEPGCache::getInstance()->lookupEventId(ref, eit_event_id, event); + } + if ( !event && (begTime != -1 && endTime != -1) ) + { + time_t queryTime = begTime + ((endTime-begTime)/2); + tm beg, end, query; + localtime_r(&begTime, &beg); + localtime_r(&endTime, &end); + localtime_r(&queryTime, &query); + eDebug("query stime %d:%d:%d, etime %d:%d:%d, qtime %d:%d:%d", + beg.tm_hour, beg.tm_min, beg.tm_sec, + end.tm_hour, end.tm_min, end.tm_sec, + query.tm_hour, query.tm_min, query.tm_sec); + eEPGCache::getInstance()->lookupEventTime(ref, queryTime, event); + } + if ( event ) + { + eDebug("found event.. store to disc"); + std::string fname = filename; + fname.erase(fname.length()-2, 2); + fname+="eit"; + int fd = open(fname.c_str(), O_CREAT|O_WRONLY, 0777); + if (fd>-1) + { + int evLen=HILO(event->descriptors_loop_length)+12/*EIT_LOOP_SIZE*/; + int wr = ::write( fd, (unsigned char*)event, evLen ); + if ( wr != evLen ) + eDebug("eit write error (%m)"); + ::close(fd); + } + } + eEPGCache::getInstance()->Unlock(); + } } return ret; }