diff options
author | Matti Lehtimäki <matti.lehtimaki@gmail.com> | 2012-05-12 22:28:09 +0300 |
---|---|---|
committer | Matti Lehtimäki <matti.lehtimaki@gmail.com> | 2012-05-12 22:28:09 +0300 |
commit | e5cbb3e43d92af2d56d886e3ddf304ac0ea4ec3a (patch) | |
tree | a7a96ec93c29b358465b1ab43a2604aa3a7580b7 /tools.c | |
parent | 67fa657e483b171fe9d951cbb00bb550241d86c7 (diff) | |
download | vdr-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.c | 24 |
1 files changed, 8 insertions, 16 deletions
@@ -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) |