DEFINE_REF(eEPGCache)
eEPGCache::eEPGCache()
- :messages(this,1), cleanTimer(this)//, paused(0)
+ :messages(this,1), cleanTimer(eTimer::create(this))//, paused(0)
{
eDebug("[EPGC] Initialized EPGCache");
CONNECT(messages.recv_msg, eEPGCache::gotMessage);
CONNECT(eDVBLocalTimeHandler::getInstance()->m_timeUpdated, eEPGCache::timeUpdated);
- CONNECT(cleanTimer.timeout, eEPGCache::cleanLoop);
+ CONNECT(cleanTimer->timeout, eEPGCache::cleanLoop);
ePtr<eDVBResourceManager> res_mgr;
eDVBResourceManager::getInstance(res_mgr);
int duration;
time_t TM = parseDVBtime( eit_event->start_time_1, eit_event->start_time_2, eit_event->start_time_3, eit_event->start_time_4, eit_event->start_time_5);
- time_t now = eDVBLocalTimeHandler::getInstance()->nowTime();
+ time_t now = ::time(0);
if ( TM != 3599 && TM > -1)
channel->haveData |= source;
{
eDebug("[EPGC] start cleanloop");
- time_t now = eDVBLocalTimeHandler::getInstance()->nowTime();
+ time_t now = ::time(0);
for (eventCache::iterator DBIt = eventDB.begin(); DBIt != eventDB.end(); DBIt++)
{
eDebug("[EPGC] stop cleanloop");
eDebug("[EPGC] %i bytes for cache used", eventData::CacheSize);
}
- cleanTimer.start(CLEAN_INTERVAL,true);
+ cleanTimer->start(CLEAN_INTERVAL,true);
}
eEPGCache::~eEPGCache()
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 );
+ int update = ( It != channelLastUpdated.end() ? ( UPDATE_INTERVAL - ( (::time(0)-It->second) * 1000 ) ) : ZAP_DELAY );
if (update < ZAP_DELAY)
update = ZAP_DELAY;
- data->startPrivateTimer.start(update, 1);
+ data->startPrivateTimer->start(update, 1);
if (update >= 60000)
eDebug("[EPGC] next private update in %i min", update/60000);
else if (update >= 1000)
{
unsigned int magic = 0x98765432;
fwrite( &magic, sizeof(int), 1, f);
- const char *text = "ENIGMA_EPG_V7";
+ const char *text = "UNFINISHED_V7";
fwrite( text, 13, 1, f );
int size = eventDB.size();
fwrite( &size, sizeof(int), 1, f );
}
}
#endif
+ // write version string after binary data
+ // has been written to disk.
+ fsync(fileno(f));
+ fseek(f, sizeof(int), SEEK_SET);
+ fwrite("ENIGMA_EPG_V7", 13, 1, f);
fclose(f);
#if 0
unsigned char md5[16];
eEPGCache::channel_data::channel_data(eEPGCache *ml)
:cache(ml)
- ,abortTimer(ml), zapTimer(ml), state(0)
+ ,abortTimer(eTimer::create(ml)), zapTimer(eTimer::create(ml)), state(0)
,isRunning(0), haveData(0)
#ifdef ENABLE_PRIVATE_EPG
- ,startPrivateTimer(ml)
+ ,startPrivateTimer(eTimer::create(ml))
#endif
#ifdef ENABLE_MHW_EPG
- ,m_MHWTimeoutTimer(ml)
+ ,m_MHWTimeoutTimer(eTimer::create(ml))
#endif
{
#ifdef ENABLE_MHW_EPG
- CONNECT(m_MHWTimeoutTimer.timeout, eEPGCache::channel_data::MHWTimeout);
+ CONNECT(m_MHWTimeoutTimer->timeout, eEPGCache::channel_data::MHWTimeout);
#endif
- CONNECT(zapTimer.timeout, eEPGCache::channel_data::startEPG);
- CONNECT(abortTimer.timeout, eEPGCache::channel_data::abortNonAvail);
+ CONNECT(zapTimer->timeout, eEPGCache::channel_data::startEPG);
+ CONNECT(abortTimer->timeout, eEPGCache::channel_data::abortNonAvail);
#ifdef ENABLE_PRIVATE_EPG
- CONNECT(startPrivateTimer.timeout, eEPGCache::channel_data::startPrivateReader);
+ CONNECT(startPrivateTimer->timeout, eEPGCache::channel_data::startPrivateReader);
#endif
pthread_mutex_init(&channel_active, 0);
}
{
if (!isRunning) // epg ready
{
- eDebug("[EPGC] stop caching events(%ld)", eDVBLocalTimeHandler::getInstance()->nowTime());
- zapTimer.start(UPDATE_INTERVAL, 1);
+ eDebug("[EPGC] stop caching events(%ld)", ::time(0));
+ zapTimer->start(UPDATE_INTERVAL, 1);
eDebug("[EPGC] next update in %i min", UPDATE_INTERVAL / 60000);
for (int i=0; i < 3; ++i)
{
calcedSections[i].clear();
}
singleLock l(cache->cache_lock);
- cache->channelLastUpdated[channel->getChannelID()] = eDVBLocalTimeHandler::getInstance()->nowTime();
+ cache->channelLastUpdated[channel->getChannelID()] = ::time(0);
#ifdef ENABLE_MHW_EPG
cleanup();
#endif
void eEPGCache::channel_data::startEPG()
{
- eDebug("[EPGC] start caching events(%ld)", eDVBLocalTimeHandler::getInstance()->nowTime());
+ eDebug("[EPGC] start caching events(%ld)", ::time(0));
state=0;
haveData=0;
for (int i=0; i < 3; ++i)
m_ScheduleOtherReader->start(mask);
isRunning |= SCHEDULE_OTHER;
- abortTimer.start(7000,true);
+ abortTimer->start(7000,true);
}
void eEPGCache::channel_data::abortNonAvail()
}
#endif
if ( isRunning )
- abortTimer.start(90000, true);
+ abortTimer->start(90000, true);
else
{
++state;
pthread_mutex_lock(&channel_active);
updateMap::iterator It = cache->channelLastUpdated.find( channel->getChannelID() );
- int update = ( It != cache->channelLastUpdated.end() ? ( UPDATE_INTERVAL - ( (eDVBLocalTimeHandler::getInstance()->nowTime()-It->second) * 1000 ) ) : ZAP_DELAY );
+ int update = ( It != cache->channelLastUpdated.end() ? ( UPDATE_INTERVAL - ( (::time(0)-It->second) * 1000 ) ) : ZAP_DELAY );
if (update < ZAP_DELAY)
update = ZAP_DELAY;
- zapTimer.start(update, 1);
+ zapTimer->start(update, 1);
if (update >= 60000)
eDebug("[EPGC] next update in %i min", update/60000);
else if (update >= 1000)
seenSections[i].clear();
calcedSections[i].clear();
}
- abortTimer.stop();
- zapTimer.stop();
+ abortTimer->stop();
+ zapTimer->stop();
if (isRunning)
{
eDebug("[EPGC] abort caching events !!");
break;
default: eDebugNoNewLine("unknown");break;
}
- eDebug(" finished(%ld)", eDVBLocalTimeHandler::getInstance()->nowTime());
+ eDebug(" finished(%ld)", ::time(0));
if ( reader )
reader->stop();
isRunning &= ~source;
if ( It != eventDB.end() && !It->second.first.empty() ) // entrys cached ?
{
if (t==-1)
- t = eDVBLocalTimeHandler::getInstance()->nowTime();
+ t = ::time(0);
timeMap::iterator i = direction <= 0 ? It->second.second.lower_bound(t) : // find > or equal
It->second.second.upper_bound(t); // just >
if ( i != It->second.second.end() )
singleLock s(cache_lock);
const eServiceReferenceDVB &ref = (const eServiceReferenceDVB&)handleGroup(service);
if (begin == -1)
- begin = eDVBLocalTimeHandler::getInstance()->nowTime();
+ begin = ::time(0);
eventCache::iterator It = eventDB.find(ref);
if ( It != eventDB.end() && It->second.second.size() )
{
return -1;
}
-void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service, eServiceEvent *ptr, ePyObject nowTime, ePyObject service_name )
+void fillTuple(ePyObject tuple, const char *argstring, int argcount, ePyObject service, eServiceEvent *ptr, ePyObject nowTime, ePyObject service_name )
{
ePyObject tmp;
int spos=0, tpos=0;
}
}
-int handleEvent(eServiceEvent *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, const char* argstring, int argcount, ePyObject service, ePyObject nowTime, ePyObject service_name, ePyObject convertFunc, ePyObject convertFuncArgs)
{
if (convertFunc)
{
{
ePyObject convertFuncArgs;
int argcount=0;
- char *argstring=NULL;
+ const char *argstring=NULL;
if (!PyList_Check(list))
{
PyErr_SetString(PyExc_StandardError,
}
ePyObject nowTime = strchr(argstring, 'C') ?
- PyLong_FromLong(eDVBLocalTimeHandler::getInstance()->nowTime()) :
+ PyLong_FromLong(::time(0)) :
ePyObject();
int must_get_service_name = strchr(argstring, 'N') ? 1 : strchr(argstring, 'n') ? 2 : 0;
}
if (minutes && stime == -1)
- stime = eDVBLocalTimeHandler::getInstance()->nowTime();
+ stime = ::time(0);
eServiceReference ref(handleGroup(eServiceReference(PyString_AS_STRING(service))));
if (ref.type != eServiceReference::idDVB)
if (must_get_service_name == 1)
{
- unsigned int pos;
+ size_t pos;
// filter short name brakets
while((pos = name.find("\xc2\x86")) != std::string::npos)
name.erase(pos,2);
if (must_get_service_name == 1)
{
- unsigned int pos;
+ size_t pos;
// filter short name brakets
while((pos = name.find("\xc2\x86")) != std::string::npos)
name.erase(pos,2);
ASSERT(ptr <= 4098);
for ( std::map< date_time, std::list<uniqueEPGKey> >::iterator it(start_times.begin()); it != start_times.end(); ++it )
{
- time_t now = eDVBLocalTimeHandler::getInstance()->nowTime();
+ time_t now = ::time(0);
if ( (it->first.tm + duration_sec) < now )
continue;
memcpy(event+2, it->first.data, 5);
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();
+ cache->channelLastUpdated[chid] = ::time(0);
m_PrevVersion = (data[5] & 0x3E) >> 1;
startPrivateReader();
}
// As far as we know all mhw time data is sent in central Europe time zone.
// So, temporarily set timezone to western europe
- time_t dt = eDVBLocalTimeHandler::getInstance()->nowTime();
+ time_t dt = ::time(0);
char *old_tz = getenv( "TZ" );
putenv("TZ=CET-1CEST,M3.5.0/2,M10.5.0/3");
void eEPGCache::channel_data::startTimeout(int msec)
{
- m_MHWTimeoutTimer.start(msec,true);
+ m_MHWTimeoutTimer->start(msec,true);
m_MHWTimeoutet=false;
}
}
}
eDebug("[EPGC] mhw finished(%ld) %d summaries not found",
- eDVBLocalTimeHandler::getInstance()->nowTime(),
+ ::time(0),
m_program_ids.size());
// Summaries have been read, titles that have summaries have been stored.
// Now store titles that do not have summaries.
for (std::map<__u32, mhw_title_t>::iterator itTitle(m_titles.begin()); itTitle != m_titles.end(); itTitle++)
storeTitle( itTitle, "", data );
eDebug("[EPGC] mhw2 finished(%ld) %d summaries not found",
- eDVBLocalTimeHandler::getInstance()->nowTime(),
+ ::time(0),
m_program_ids.size());
}
}