summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.cpp145
1 files changed, 81 insertions, 64 deletions
diff --git a/parse.cpp b/parse.cpp
index f750182..0bfb6c2 100644
--- a/parse.cpp
+++ b/parse.cpp
@@ -837,101 +837,118 @@ bool cParse::Process(char *buffer, int bufsize)
if ((!xmlStrcasecmp(node->name, (const xmlChar *) "programme")))
{
xmlChar *channelid=xmlGetProp(node,(const xmlChar *) "channel");
- cEPGMapping *map=NULL;
- if (channelid && (map=EPGMapping((const char *) channelid)))
+ if (channelid)
{
- time_t end=begin+(86000*map->Days())+3600; // 1 hour overlap
- if (oldmap!=map)
+ cEPGMapping *map=EPGMapping((const char *) channelid);
+ if (map)
{
- dsyslog("xmltv2vdr: '%s' processing '%s'",name,channelid);
- dsyslog("xmltv2vdr: '%s' from %s",name,ctime(&begin));
- dsyslog("xmltv2vdr: '%s' till %s",name,ctime(&end));
- }
- oldmap=map;
- xmlChar *start,*stop;
- time_t starttime=(time_t) 0;
- time_t stoptime=(time_t) 0;
- start=xmlGetProp(node,(const xmlChar *) "start");
- if (start)
- {
- starttime=ConvertXMLTVTime2UnixTime((char *) start);
- if (starttime)
+ time_t end=begin+(86000*map->Days())+3600; // 1 hour overlap
+ if (oldmap!=map)
+ {
+ dsyslog("xmltv2vdr: '%s' processing '%s'",name,channelid);
+ dsyslog("xmltv2vdr: '%s' from %s",name,ctime(&begin));
+ dsyslog("xmltv2vdr: '%s' till %s",name,ctime(&end));
+ }
+ oldmap=map;
+ xmlChar *start,*stop;
+ time_t starttime=(time_t) 0;
+ time_t stoptime=(time_t) 0;
+ start=xmlGetProp(node,(const xmlChar *) "start");
+ if (start)
{
- stop=xmlGetProp(node,(const xmlChar *) "stop");
- if (stop)
+ starttime=ConvertXMLTVTime2UnixTime((char *) start);
+ if (starttime)
{
- stoptime=ConvertXMLTVTime2UnixTime((char *) stop);
- xmlFree(stop);
+ stop=xmlGetProp(node,(const xmlChar *) "stop");
+ if (stop)
+ {
+ stoptime=ConvertXMLTVTime2UnixTime((char *) stop);
+ xmlFree(stop);
+ }
}
+ xmlFree(start);
}
- xmlFree(start);
- }
-
- if (starttime && (starttime>begin) && (starttime<end))
- {
- xevent.Clear();
- xmlChar *vpsstart=xmlGetProp(node,(const xmlChar *) "vps-start");
- if (vpsstart)
+ if (starttime && (starttime>begin) && (starttime<end))
{
- time_t vps=ConvertXMLTVTime2UnixTime((char *) vpsstart);
- xevent.SetVps(vps);
- xmlFree(vpsstart);
- }
+ xevent.Clear();
- xevent.SetStartTime(starttime);
- if (stoptime) xevent.SetDuration(stoptime-starttime);
- FetchEvent(node);
-
- cSchedulesLock *schedulesLock = new cSchedulesLock(true,2000); // to be safe ;)
- const cSchedules *schedules = cSchedules::Schedules(*schedulesLock);
- if (schedules)
- {
- for (int i=0; i<map->NumChannelIDs(); i++)
+ xmlChar *vpsstart=xmlGetProp(node,(const xmlChar *) "vps-start");
+ if (vpsstart)
{
- bool addevents=false;
- if ((map->Flags() & OPT_APPEND)==OPT_APPEND) addevents=true;
+ time_t vps=ConvertXMLTVTime2UnixTime((char *) vpsstart);
+ xevent.SetVps(vps);
+ xmlFree(vpsstart);
+ }
+
+ xevent.SetStartTime(starttime);
+ if (stoptime) xevent.SetDuration(stoptime-starttime);
+ FetchEvent(node);
- cChannel *channel=Channels.GetByChannelID(map->ChannelIDs()[i]);
- if (channel)
+ cSchedulesLock *schedulesLock = new cSchedulesLock(true,2000); // to be safe ;)
+ const cSchedules *schedules = cSchedules::Schedules(*schedulesLock);
+ if (schedules)
+ {
+ for (int i=0; i<map->NumChannelIDs(); i++)
{
- cSchedule* schedule = (cSchedule *) schedules->GetSchedule(channel,addevents);
- if (schedule)
+ bool addevents=false;
+ if ((map->Flags() & OPT_APPEND)==OPT_APPEND) addevents=true;
+
+ cChannel *channel=Channels.GetByChannelID(map->ChannelIDs()[i]);
+ if (channel)
{
- cEvent *event=NULL;
- if ((event=SearchEvent(schedule,&xevent)))
+ cSchedule* schedule = (cSchedule *) schedules->GetSchedule(channel,addevents);
+ if (schedule)
{
- PutEvent(schedule,event,&xevent,map);
- }
- else
- {
- if (addevents)
+ cEvent *event=NULL;
+ if ((event=SearchEvent(schedule,&xevent)))
{
PutEvent(schedule,event,&xevent,map);
}
else
{
- time_t start=xevent.StartTime();
- esyslog("xmltv2vdr: cannot find existing event in epg.data for xmltv-event %s@%s",
- xevent.Title(),ctime(&start));
+ if (addevents)
+ {
+ PutEvent(schedule,event,&xevent,map);
+ }
+ else
+ {
+ time_t start=xevent.StartTime();
+ esyslog("xmltv2vdr: '%s' cannot find existing event in epg.data for xmltv-event %s@%s",
+ name,xevent.Title(),ctime(&start));
+ }
}
}
+ else
+ {
+ esyslog("xmltv2vdr: '%s' cannot get schedule for channel %s (no import)",
+ name,channel->Name());
+ }
}
else
{
- esyslog("xmltv2vdr: cannot get schedule for channel %s (no import)",channel->Name());
+ esyslog("xmltv2vdr: '%s' channel %s not found in channels.conf",
+ name,*map->ChannelIDs()[i].ToString());
}
}
- else
- {
- esyslog("xmltv2vdr: channel %s not found in channels.conf",*map->ChannelIDs()[i].ToString());
- }
}
+ else
+ {
+ esyslog("xmltv2vdr: '%s' cannot get schedules",name);
+ }
+ delete schedulesLock;
}
- delete schedulesLock;
+ }
+ else
+ {
+ esyslog("xmltv2vdr: '%s' no mapping for channelid %s",name,channelid);
}
xmlFree(channelid);
}
+ else
+ {
+ esyslog("xmltv2vdr: '%s' missing channelid in xmltv file",name);
+ }
}
}
node=node->next;