summaryrefslogtreecommitdiff
path: root/tools.c
diff options
context:
space:
mode:
authorMatti Lehtimäki <matti.lehtimaki@gmail.com>2012-05-12 22:28:09 +0300
committerMatti Lehtimäki <matti.lehtimaki@gmail.com>2012-05-12 22:28:09 +0300
commite5cbb3e43d92af2d56d886e3ddf304ac0ea4ec3a (patch)
treea7a96ec93c29b358465b1ab43a2604aa3a7580b7 /tools.c
parent67fa657e483b171fe9d951cbb00bb550241d86c7 (diff)
downloadvdr-plugin-epgfixer-e5cbb3e43d92af2d56d886e3ddf304ac0ea4ec3a.tar.gz
vdr-plugin-epgfixer-e5cbb3e43d92af2d56d886e3ddf304ac0ea4ec3a.tar.bz2
Fix ordering of cloned EPG events and purging old event.
Further optimisations of event handling thread, thanks to Rolf Ahrenberg.
Diffstat (limited to 'tools.c')
-rw-r--r--tools.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/tools.c b/tools.c
index 4c02c8c..4616c4b 100644
--- a/tools.c
+++ b/tools.c
@@ -198,29 +198,21 @@ cAddEventThread::~cAddEventThread(void)
void cAddEventThread::Action(void)
{
SetPriority(19);
- cList<cAddEventListItem> *tmplist = new cList<cAddEventListItem>;
while (Running() && !LastHandleEvent.TimedOut()) {
+ cAddEventListItem *e = NULL;
+ cSchedulesLock SchedulesLock(true, 10);
+ cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock);
Lock();
- cAddEventListItem *e = list->First();
- while (e) {
- tmplist->Add(new cAddEventListItem(e->GetEvent(), e->GetChannelID()));
+ while (schedules && (e = list->First()) != NULL) {
+ cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true);
+ schedule->AddEvent(e->GetEvent());
+ EpgHandlers.SortSchedule(schedule);
+ EpgHandlers.DropOutdated(schedule, e->GetEvent()->StartTime(), e->GetEvent()->EndTime(), e->GetEvent()->TableID(), e->GetEvent()->Version());
list->Del(e);
- e = list->First();
}
Unlock();
- e = tmplist->First();
- while (e) {
- cSchedulesLock SchedulesLock(true, 10);
- cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock);
- if (schedules) {
- ((cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true))->AddEvent(e->GetEvent());
- tmplist->Del(e);
- }
- e = tmplist->First();
- }
cCondWait::SleepMs(10);
}
- delete tmplist;
}
void cAddEventThread::AddEvent(cEvent *Event, tChannelID ChannelID)