summaryrefslogtreecommitdiff
path: root/searchtimer_thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'searchtimer_thread.c')
-rw-r--r--searchtimer_thread.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/searchtimer_thread.c b/searchtimer_thread.c
index 7aa4250..bd93803 100644
--- a/searchtimer_thread.c
+++ b/searchtimer_thread.c
@@ -477,6 +477,7 @@ void cSearchTimerThread::Action(void)
}
searchExt = localSearchExts->Next(searchExt);
}
+
if (localSearchExts) delete localSearchExts;
if (pOutdatedTimers)
@@ -522,6 +523,8 @@ void cSearchTimerThread::Action(void)
}
}
+ CheckEPGHours();
+
LogFile.iSysLog("search timer update finished");
// check for conflicts
@@ -965,3 +968,71 @@ void cSearchTimerThread::CheckManualTimers()
LogFile.Log(1, "manual timer check finished");
}
+// check if EPG is present for the configured hours
+void cSearchTimerThread::CheckEPGHours()
+{
+ if (EPGSearchConfig.checkEPGHours <= 0 ||
+ (EPGSearchConfig.checkEPGWarnByOSD == 0 && EPGSearchConfig.checkEPGWarnByMail == 0) ||
+ EPGSearchConfig.checkEPGchannelGroupNr <= 0)
+ return;
+
+ LogFile.Log(2,"check if relevant EPG exists for the next %d hours", EPGSearchConfig.checkEPGHours);
+ cChannelGroup* channelGroup = ChannelGroups.Get(EPGSearchConfig.checkEPGchannelGroupNr-1); // not zero-based!
+ if (!channelGroup)
+ {
+ LogFile.Log(1,"channel group with index %d does not exist!", EPGSearchConfig.checkEPGchannelGroupNr);
+ return;
+ }
+
+ LogFile.Log(2,"checking channel group '%s'", channelGroup->name);
+
+ time_t checkTime = time(NULL) + EPGSearchConfig.checkEPGHours * 60 * 60;
+
+ cSchedulesLock schedulesLock;
+ const cSchedules *schedules;
+ schedules = cSchedules::Schedules(schedulesLock);
+
+ cChannelGroup channelsWithSmallEPG;
+ cChannelGroupItem* channelInGroup = channelGroup->channels.First();
+ while (channelInGroup)
+ {
+ cChannel* channel = channelInGroup->channel;
+ // get the channels schedule
+ const cSchedule* schedule = schedules->GetSchedule(channel);
+ if (!schedule || !schedule->GetEventAround(checkTime))
+ {
+ LogFile.Log(3,"less than %d hours of EPG for channel %s!", EPGSearchConfig.checkEPGHours, channel->Name());
+ cChannelGroupItem* channelitem = new cChannelGroupItem(channel);
+ channelsWithSmallEPG.channels.Add(channelitem);
+ }
+ channelInGroup = channelGroup->channels.Next(channelInGroup);
+ }
+
+ // create a string list of the channels found
+ if (channelsWithSmallEPG.channels.Count() > 0)
+ {
+ string sBuffer;
+ channelInGroup = channelsWithSmallEPG.channels.First();
+ while (channelInGroup)
+ {
+ cChannel* channel = channelInGroup->channel;
+ if (channel)
+ sBuffer += " " + string(channel->ShortName(true));
+ channelInGroup = channelsWithSmallEPG.channels.Next(channelInGroup);
+ }
+
+
+ if (EPGSearchConfig.checkEPGWarnByOSD)
+ {
+ cString msgfmt = cString::sprintf(tr("small EPG content on:%s"), sBuffer.c_str());
+ SendMsg(msgfmt);
+ }
+ if (EPGSearchConfig.checkEPGWarnByMail)
+ {
+ cString msgfmt = cString::sprintf(tr("small EPG content on:%s"), sBuffer.c_str());
+ cMailNotifier M(string(tr("VDR EPG check warning")), string(msgfmt));
+ }
+ }
+
+ LogFile.Log(2,"check for relevant EPG finished - %d channels with small EPG content", channelsWithSmallEPG.channels.Count());
+}