summaryrefslogtreecommitdiff
path: root/xmltv2vdr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xmltv2vdr.cpp')
-rw-r--r--xmltv2vdr.cpp170
1 files changed, 68 insertions, 102 deletions
diff --git a/xmltv2vdr.cpp b/xmltv2vdr.cpp
index e79d428..2f2ac9e 100644
--- a/xmltv2vdr.cpp
+++ b/xmltv2vdr.cpp
@@ -225,7 +225,13 @@ cGlobals::cGlobals()
epcodeset=NULL;
imgdir=NULL;
codeset=NULL;
+ srcorder=NULL;
+ wakeup=false;
+ epghandler=NULL;
+ epgtimer=NULL;
+ epall=0;
epgsearchexists=(cPluginManager::GetPlugin("epgsearch")!=NULL);
+ order=strdup(GetDefaultOrder());
imgdelafter=30;
if (asprintf(&epgfile,"%s/epg.db",VideoDirectory)==-1) {};
@@ -280,11 +286,23 @@ cGlobals::~cGlobals()
free(epdir);
free(imgdir);
free(codeset);
+ free(order);
+ free(srcorder);
+ if (epgtimer)
+ {
+ epgtimer->Stop();
+ delete epgtimer;
+ }
epgsources.Remove();
epgmappings.Remove();
textmappings.Remove();
}
+char *cGlobals::GetDefaultOrder()
+{
+ return (char *) "LOT,CRS,CAD,ORT,CAT,VID,AUD,SEE,RAT,STR,REV";
+}
+
void cGlobals::SetImgDir(const char* ImgDir)
{
if (!ImgDir) return;
@@ -704,47 +722,41 @@ cPluginXmltv2vdr::cPluginXmltv2vdr(void) : housekeeping(&g),epgexecutor(g.EPGSou
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
// VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
logfile=NULL;
- srcorder=NULL;
- epghandler=NULL;
- epgtimer=NULL;
- epgseasonepisode=NULL;
last_maintime_t=0;
last_timer_t=last_epcheck_t=last_housetime_t=time(NULL); // start this threads later!
- wakeup=0;
- insetup=false;
- SetEPAll(0);
- TEXTMappingAdd(new cTEXTMapping("country",tr("country")));
- TEXTMappingAdd(new cTEXTMapping("year",tr("year")));
- TEXTMappingAdd(new cTEXTMapping("originaltitle",tr("originaltitle")));
- TEXTMappingAdd(new cTEXTMapping("category",tr("category")));
- TEXTMappingAdd(new cTEXTMapping("actor",tr("actor")));
- TEXTMappingAdd(new cTEXTMapping("adapter",tr("adapter")));
- TEXTMappingAdd(new cTEXTMapping("commentator",tr("commentator")));
- TEXTMappingAdd(new cTEXTMapping("composer",tr("composer")));
- TEXTMappingAdd(new cTEXTMapping("director",tr("director")));
- TEXTMappingAdd(new cTEXTMapping("editor",tr("editor")));
- TEXTMappingAdd(new cTEXTMapping("guest",tr("guest")));
- TEXTMappingAdd(new cTEXTMapping("presenter",tr("presenter")));
- TEXTMappingAdd(new cTEXTMapping("producer",tr("producer")));
- TEXTMappingAdd(new cTEXTMapping("writer",tr("writer")));
- TEXTMappingAdd(new cTEXTMapping("video",tr("video")));
- TEXTMappingAdd(new cTEXTMapping("blacknwhite",tr("blacknwhite")));
- TEXTMappingAdd(new cTEXTMapping("audio",tr("audio")));
- TEXTMappingAdd(new cTEXTMapping("dolby",tr("dolby")));
- TEXTMappingAdd(new cTEXTMapping("dolbydigital",tr("dolbydigital")));
- TEXTMappingAdd(new cTEXTMapping("bilingual",tr("bilingual")));
- TEXTMappingAdd(new cTEXTMapping("review",tr("review")));
- TEXTMappingAdd(new cTEXTMapping("starrating",tr("starrating")));
- TEXTMappingAdd(new cTEXTMapping("season",tr("season")));
- TEXTMappingAdd(new cTEXTMapping("episode",tr("episode")));
- TEXTMappingAdd(new cTEXTMapping("episodeoverall",tr("episodeoverall")));
+ g.SetEPAll(0);
+ g.TEXTMappings()->Add(new cTEXTMapping("country",tr("country")));
+ g.TEXTMappings()->Add(new cTEXTMapping("year",tr("year")));
+ g.TEXTMappings()->Add(new cTEXTMapping("originaltitle",tr("originaltitle")));
+ g.TEXTMappings()->Add(new cTEXTMapping("category",tr("category")));
+ g.TEXTMappings()->Add(new cTEXTMapping("actor",tr("actor")));
+ g.TEXTMappings()->Add(new cTEXTMapping("adapter",tr("adapter")));
+ g.TEXTMappings()->Add(new cTEXTMapping("commentator",tr("commentator")));
+ g.TEXTMappings()->Add(new cTEXTMapping("composer",tr("composer")));
+ g.TEXTMappings()->Add(new cTEXTMapping("director",tr("director")));
+ g.TEXTMappings()->Add(new cTEXTMapping("editor",tr("editor")));
+ g.TEXTMappings()->Add(new cTEXTMapping("guest",tr("guest")));
+ g.TEXTMappings()->Add(new cTEXTMapping("presenter",tr("presenter")));
+ g.TEXTMappings()->Add(new cTEXTMapping("producer",tr("producer")));
+ g.TEXTMappings()->Add(new cTEXTMapping("writer",tr("writer")));
+ g.TEXTMappings()->Add(new cTEXTMapping("video",tr("video")));
+ g.TEXTMappings()->Add(new cTEXTMapping("blacknwhite",tr("blacknwhite")));
+ g.TEXTMappings()->Add(new cTEXTMapping("audio",tr("audio")));
+ g.TEXTMappings()->Add(new cTEXTMapping("dolby",tr("dolby")));
+ g.TEXTMappings()->Add(new cTEXTMapping("dolbydigital",tr("dolbydigital")));
+ g.TEXTMappings()->Add(new cTEXTMapping("bilingual",tr("bilingual")));
+ g.TEXTMappings()->Add(new cTEXTMapping("review",tr("review")));
+ g.TEXTMappings()->Add(new cTEXTMapping("starrating",tr("starrating")));
+ g.TEXTMappings()->Add(new cTEXTMapping("season",tr("season")));
+ g.TEXTMappings()->Add(new cTEXTMapping("episode",tr("episode")));
+ g.TEXTMappings()->Add(new cTEXTMapping("episodeoverall",tr("episodeoverall")));
}
cPluginXmltv2vdr::~cPluginXmltv2vdr()
{
// Clean up after yourself!
#if VDRVERSNUM < 10726 && (!EPGHANDLER)
- delete epghandler;
+ delete g.epghandler;
#endif
}
@@ -775,41 +787,6 @@ int cPluginXmltv2vdr::GetLastImportSource()
return idx;
}
-bool cPluginXmltv2vdr::EPGSourceMove(int From, int To)
-{
- if (From==To) return false;
-
- sqlite3 *db=NULL;
- if (sqlite3_open_v2(g.EPGFile(),&db,SQLITE_OPEN_READWRITE,NULL)==SQLITE_OK)
- {
- char *sql=NULL;
- if (asprintf(&sql,"BEGIN TRANSACTION;" \
- "UPDATE epg SET srcidx=98 WHERE srcidx=%i;" \
- "UPDATE epg SET srcidx=%i WHERE srcidx=%i;" \
- "UPDATE epg SET srcidx=%i WHERE srcidx=98;" \
- "COMMIT;", To, From, To, From)==-1)
- {
- sqlite3_close(db);
- return false;
- }
- if (sqlite3_exec(db,sql,NULL,NULL,NULL)!=SQLITE_OK)
- {
- free(sql);
- sqlite3_close(db);
- return false;
- }
- free(sql);
- }
- else
- {
- return false;
- }
- sqlite3_close(db);
- g.EPGSources()->Move(From,To);
- return true;
-}
-
-
const char *cPluginXmltv2vdr::CommandLineHelp(void)
{
// Return a string that describes all known command line options.
@@ -824,7 +801,6 @@ const char *cPluginXmltv2vdr::CommandLineHelp(void)
" (default is /var/cache/vdr/epgimages)\n"
" -l FILE --logfile=FILE write trace logs into the given FILE (default is\n"
" no trace log\n";
-
}
bool cPluginXmltv2vdr::ProcessArgs(int argc, char *argv[])
@@ -879,34 +855,25 @@ bool cPluginXmltv2vdr::Start(void)
if (g.EPDir())
{
isyslog("using dir '%s' (%s) for episodes",g.EPDir(),g.EPCodeset());
- epgtimer = new cEPGTimer(&g);
- epgseasonepisode = new cEPGSeasonEpisode(&g);
+ g.AllocateEPGSeasonThread();
+ }
+ if (g.EPAll())
+ {
+ g.AllocateEPGTimerThread();
}
if (g.ImgDir()) isyslog("using dir '%s' for epgimages (%i)",g.ImgDir(),g.ImgDelAfter());
- ReadInEPGSources();
- epghandler = new cEPGHandler(&g);
+ g.EPGSources()->ReadIn(&g);
+ g.epghandler = new cEPGHandler(&g);
+ g.SetEPAll(g.EPAll());
if (sqlite3_threadsafe()==0) esyslog("sqlite3 not threadsafe!");
cParse::InitLibXML();
- SetEPAll(epall);
return true;
}
void cPluginXmltv2vdr::Stop(void)
{
// Stop any background activities the plugin is performing.
- if (epgtimer)
- {
- epgtimer->Stop();
- delete epgtimer;
- epgtimer=NULL;
- }
- if (epgseasonepisode)
- {
- epgseasonepisode->Stop();
- delete epgseasonepisode;
- epgseasonepisode=NULL;
- }
epgexecutor.Stop();
housekeeping.Stop();
cParse::CleanupLibXML();
@@ -915,11 +882,6 @@ void cPluginXmltv2vdr::Stop(void)
free(logfile);
logfile=NULL;
}
- if (srcorder)
- {
- free(srcorder);
- srcorder=NULL;
- }
}
void cPluginXmltv2vdr::Housekeeping(void)
@@ -954,15 +916,15 @@ void cPluginXmltv2vdr::MainThreadHook(void)
/*
if (now>=(last_epcheck_t+900))
{
- if (epgseasonepisode) epgseasonepisode->Start();
+ if (g.EPGSeasonEpisode()) g.EPGSeasonEpisode()->Start();
last_epcheck_t=(now/900)*900;
}
- */
- if (epall)
+ */
+ if (g.EPAll())
{
if (now>=(last_timer_t+600))
{
- if (epgtimer) epgtimer->Start();
+ if (g.EPGTimer()) g.EPGTimer()->Start();
last_timer_t=(now/600)*600;
}
}
@@ -982,7 +944,7 @@ cString cPluginXmltv2vdr::Active(void)
time_t cPluginXmltv2vdr::WakeupTime(void)
{
// Return custom wakeup time for shutdown script
- if (!wakeup) return (time_t) 0;
+ if (!g.WakeUp()) return (time_t) 0;
time_t nextruntime=g.EPGSources()->NextRunTime();
if (nextruntime) nextruntime-=(time_t) 180;
#ifdef VDRDBG
@@ -1006,7 +968,7 @@ cOsdObject *cPluginXmltv2vdr::MainMenuAction(void)
cMenuSetupPage *cPluginXmltv2vdr::SetupMenu(void)
{
// Return a setup menu in case the plugin supports one.
- return new cMenuSetupXmltv2vdr(this);
+ return new cMenuSetupXmltv2vdr(&g);
}
bool cPluginXmltv2vdr::SetupParse(const char *Name, const char *Value)
@@ -1020,7 +982,7 @@ bool cPluginXmltv2vdr::SetupParse(const char *Name, const char *Value)
else if (!strncasecmp(Name,"textmap",7))
{
if (strlen(Name)<10) return false;
- cTEXTMapping *textmap=TEXTMapping(&Name[8]);
+ cTEXTMapping *textmap=g.TEXTMappings()->GetMap(&Name[8]);
if (textmap)
{
textmap->ChangeValue(Value);
@@ -1032,19 +994,23 @@ bool cPluginXmltv2vdr::SetupParse(const char *Name, const char *Value)
}
else if (!strcasecmp(Name,"options.epall"))
{
- epall=atoi(Value); // set value later again in Start()
+ g.SetEPAll(atoi(Value));
}
else if (!strcasecmp(Name,"options.wakeup"))
{
- wakeup=(bool) atoi(Value);
+ g.SetWakeUp((bool) atoi(Value));
}
else if (!strcasecmp(Name,"options.imgdelafter"))
{
- SetImgDelAfter(atoi(Value));
+ g.SetImgDelAfter(atoi(Value));
+ }
+ else if (!strcasecmp(Name,"options.order"))
+ {
+ g.SetOrder(Value);
}
else if (!strcasecmp(Name,"source.order"))
{
- srcorder=strdup(Value);
+ g.SetSrcOrder(Value);
}
else return false;
return true;