diff options
author | Dimitar Petrovski <dimeptr@gmail.com> | 2012-10-19 14:41:14 +0200 |
---|---|---|
committer | Dimitar Petrovski <dimeptr@gmail.com> | 2012-10-19 14:41:14 +0200 |
commit | 88d15f1630d5fdff6f18394f9ad4a94943696976 (patch) | |
tree | f0fb1ed682ac5975e9451d1f11e71c887b78eede | |
parent | ee3d6a70f2a8ed41acd1d2f7f68843d90679737a (diff) | |
parent | 0e805561c58f3a63448b99b71b23a02caa9641e3 (diff) | |
download | vdr-plugin-eepg-88d15f1630d5fdff6f18394f9ad4a94943696976.tar.gz vdr-plugin-eepg-88d15f1630d5fdff6f18394f9ad4a94943696976.tar.bz2 |
Merge branch 'map-event' into map-event-ceit2
remove initialize some values
still have problems with crash
Conflicts:
equivhandler.c
-rw-r--r-- | eepg.c | 2 | ||||
-rw-r--r-- | epghandler.c | 1 | ||||
-rw-r--r-- | setupeepg.c | 1 | ||||
-rw-r--r-- | util.c | 98 |
4 files changed, 81 insertions, 21 deletions
@@ -238,6 +238,8 @@ public: cFilterEEPG::cFilterEEPG (void) { + nSummaries = 0; + nTitles = 0; Trigger (); //Set (0x00, 0x00); } diff --git a/epghandler.c b/epghandler.c index 3aaec2e..0262d75 100644 --- a/epghandler.c +++ b/epghandler.c @@ -172,6 +172,7 @@ bool cEEpgHandler::HandleEvent(cEvent* Event) { return true; } + bool cEEpgHandler::SortSchedule(cSchedule* Schedule) { Schedule->Sort(); diff --git a/setupeepg.c b/setupeepg.c index 54f8243..ee2565e 100644 --- a/setupeepg.c +++ b/setupeepg.c @@ -14,6 +14,7 @@ cSetupEEPG* cSetupEEPG::_setupEEPG = NULL; cSetupEEPG::cSetupEEPG (void) { + ConfDir = NULL; OptPat = 1; OrderInfo = 1; RatingInfo = 1; @@ -11,6 +11,8 @@ #include <vdr/thread.h> #include <vdr/epg.h> +#include <map> + namespace util { @@ -135,23 +137,33 @@ void CleanString (unsigned char *String) // http://projects.vdr-developer.org/projects/plg-epgfixer // by Matti Lehtimaki -class cAddEventListItem : public cListObject +//class cAddEventListItem : public cListObject +//{ +//protected: +// cEvent *event; +// tChannelID channelID; +//public: +// cAddEventListItem(cEvent *Event, tChannelID ChannelID) { event = Event; channelID = ChannelID; } +// tChannelID GetChannelID() { return channelID; } +// cEvent *GetEvent() { return event; } +// ~cAddEventListItem() { } +//}; + +struct tChannelIDCompare { -protected: - cEvent *event; - tChannelID channelID; -public: - cAddEventListItem(cEvent *Event, tChannelID ChannelID) { event = Event; channelID = ChannelID; } - tChannelID GetChannelID() { return channelID; } - cEvent *GetEvent() { return event; } - ~cAddEventListItem() { } + bool operator() (const tChannelID& lhs, const tChannelID& rhs) const + { + return *lhs.ToString() < *rhs.ToString(); + } }; + class cAddEventThread : public cThread { private: cTimeMs LastHandleEvent; - cList<cAddEventListItem> *list; +// cList<cAddEventListItem> *list; + std::map<tChannelID,cList<cEvent>*,tChannelIDCompare> *map_list; enum { INSERT_TIMEOUT_IN_MS = 10000 }; protected: virtual void Action(void); @@ -164,13 +176,17 @@ public: cAddEventThread::cAddEventThread(void) :cThread("cAddEventThread"), LastHandleEvent() { - list = new cList<cAddEventListItem>; +// list = new cList<cAddEventListItem>; + map_list = new std::map<tChannelID,cList<cEvent>*,tChannelIDCompare>; } cAddEventThread::~cAddEventThread(void) { LOCK_THREAD; - list->cList::Clear(); +// list->cList::Clear(); + std::map<tChannelID,cList<cEvent>*,tChannelIDCompare>::iterator it; + for ( it=map_list->begin() ; it != map_list->end(); it++ ) + (*it).second->cList::Clear(); Cancel(3); } @@ -178,17 +194,44 @@ void cAddEventThread::Action(void) { SetPriority(19); while (Running() && !LastHandleEvent.TimedOut()) { - cAddEventListItem *e = NULL; +// cAddEventListItem *e = NULL; cSchedulesLock SchedulesLock(true, 10); cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock); Lock(); - 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); - } +// 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); +// } + std::map<tChannelID,cList<cEvent>*,tChannelIDCompare>::iterator it; + it=map_list->begin(); + while (schedules && it != map_list->end()) { + cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID((*it).first), true); + while (((*it).second->First()) != NULL) { + cEvent* event = (*it).second->First(); + + cEvent *pEqvEvent = (cEvent *) schedule->GetEvent (event->EventID(), event->StartTime()); + if (pEqvEvent){ + LogD (0, prep("schedule->DelEvent(event)")); + schedule->DelEvent(pEqvEvent); + } + + LogD (0, prep("schedule->AddEvent(event)")); + //cCondWait::SleepMs(10); + if (event) + schedule->AddEvent(event); + (*it).second->Del(event); + } + EpgHandlers.SortSchedule(schedule); + //sortSchedules(schedules, (*it).first); + //schedule->Sort(); + delete (*it).second; + map_list->erase(it); + it=map_list->begin(); + + } Unlock(); cCondWait::SleepMs(10); } @@ -196,9 +239,21 @@ void cAddEventThread::Action(void) void cAddEventThread::AddEvent(cEvent *Event, tChannelID ChannelID) { + LogD (0, prep("AddEventT start")); LOCK_THREAD; - list->Add(new cAddEventListItem(Event, ChannelID)); + LogD (0, prep("AddEventT lock ")); + if (map_list->empty() || map_list->count(ChannelID) == 0) { + LogD (0, prep("AddEventT if")); + cList<cEvent>* list = new cList<cEvent>; + list->Add(Event); + map_list->insert(std::make_pair(ChannelID, list)); + } else { + LogD (0, prep("AddEventT else")); + (*map_list->find(ChannelID)).second->Add(Event); + } +// list->Add(new cAddEventListItem(Event, ChannelID)); LastHandleEvent.Set(INSERT_TIMEOUT_IN_MS); + LogD (0, prep("AddEventT end")); } static cAddEventThread AddEventThread; @@ -207,6 +262,7 @@ static cAddEventThread AddEventThread; void AddEvent(cEvent *Event, tChannelID ChannelID) { + LogD (0, prep("AddEvent")); AddEventThread.AddEvent(Event, ChannelID); if (!AddEventThread.Active()) AddEventThread.Start(); |