summaryrefslogtreecommitdiff
path: root/xmltv2vdr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xmltv2vdr.cpp')
-rw-r--r--xmltv2vdr.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/xmltv2vdr.cpp b/xmltv2vdr.cpp
index 450a79d..1ef897a 100644
--- a/xmltv2vdr.cpp
+++ b/xmltv2vdr.cpp
@@ -9,6 +9,7 @@
#include <vdr/videodir.h>
#include <unistd.h>
#include <getopt.h>
+#include <pthread.h>
#include "setup.h"
#include "xmltv2vdr.h"
@@ -156,7 +157,7 @@ bool cEPGHandler::SetShortText(cEvent* Event, const char* UNUSED(ShortText))
// -------------------------------------------------------------
cEPGTimer::cEPGTimer(const char *EpgFile, cEPGSources *Sources, cEPGMappings *Maps,
- cTEXTMappings *Texts) : cThread("xmltv2vdr timer thread")
+ cTEXTMappings *Texts) : cThread("xmltv2vdr timer")
{
epgfile=EpgFile;
sources=Sources;
@@ -212,7 +213,7 @@ void cEPGTimer::Action()
// -------------------------------------------------------------
-cPluginXmltv2vdr::cPluginXmltv2vdr(void) : epgexecutor(&epgsources)
+cPluginXmltv2vdr::cPluginXmltv2vdr(void) : epgexecutor(this, &epgsources)
{
// Initialize any member variables here.
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
@@ -267,6 +268,13 @@ bool cPluginXmltv2vdr::IsIdle()
return false;
}
+void cPluginXmltv2vdr::Wait4TimerThread()
+{
+ if (!epgtimer->Active()) return;
+ dsyslog("xmltv2vdr: wait for timer thread");
+ pthread_join(epgtimer->ThreadId(),NULL);
+}
+
bool cPluginXmltv2vdr::EPGSourceMove(int From, int To)
{
if (From==To) return false;
@@ -390,32 +398,35 @@ void cPluginXmltv2vdr::Housekeeping(void)
time_t now=time(NULL);
if (now>(last_housetime_t+3600))
{
- struct stat statbuf;
- if (stat(epgfile,&statbuf)!=-1)
+ if (IsIdle())
{
- if (statbuf.st_size)
+ struct stat statbuf;
+ if (stat(epgfile,&statbuf)!=-1)
{
- sqlite3 *db=NULL;
- if (sqlite3_open_v2(epgfile,&db,SQLITE_OPEN_READWRITE,NULL)==SQLITE_OK)
+ if (statbuf.st_size)
{
- char *sql;
- if (asprintf(&sql,"delete from epg where ((starttime+duration) < %li)",now)!=-1)
+ sqlite3 *db=NULL;
+ if (sqlite3_open_v2(epgfile,&db,SQLITE_OPEN_READWRITE,NULL)==SQLITE_OK)
{
- char *errmsg;
- if (sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
+ char *sql;
+ if (asprintf(&sql,"delete from epg where ((starttime+duration) < %li)",now)!=-1)
{
- esyslog("xmltv2vdr: %s",errmsg);
- sqlite3_free(errmsg);
+ char *errmsg;
+ if (sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
+ {
+ esyslog("xmltv2vdr: %s",errmsg);
+ sqlite3_free(errmsg);
+ }
+ else
+ {
+ isyslog("xmltv2vdr: removed %i old entries from db",sqlite3_changes(db));
+ sqlite3_exec(db,"VACCUM;",NULL,NULL,NULL);
+ }
+ free(sql);
}
- else
- {
- isyslog("xmltv2vdr: removed %i old entries from db",sqlite3_changes(db));
- sqlite3_exec(db,"VACCUM;",NULL,NULL,NULL);
- }
- free(sql);
}
+ sqlite3_close(db);
}
- sqlite3_close(db);
}
}
last_housetime_t=now;
@@ -429,7 +440,7 @@ void cPluginXmltv2vdr::MainThreadHook(void)
time_t now=time(NULL);
if (now>(last_maintime_t+60))
{
- if (IsIdle())
+ if (!epgexecutor.Active())
{
if (epgsources.RunItNow()) epgexecutor.Start();
}