diff options
-rw-r--r-- | epghandler.c | 17 | ||||
-rw-r--r-- | epghandler.h | 1 | ||||
-rw-r--r-- | equivhandler.c | 96 | ||||
-rw-r--r-- | equivhandler.h | 1 |
4 files changed, 42 insertions, 73 deletions
diff --git a/epghandler.c b/epghandler.c index ecf5de9..e323ed1 100644 --- a/epghandler.c +++ b/epghandler.c @@ -30,17 +30,16 @@ bool cEEpgHandler::HandleEitEvent(cSchedule* Schedule, if ((nid >= 0x1001 && nid <= 0x100B) || nid == 0x101 || nid == 0x100) return true; - //TODO!!! not for commit upsteram - if (EitEvent->getDurationHour() > 10) { - LogD(3, prep("Event longer than 10h Duration:%d DurationHour:%d StartTimeHour:%d"), EitEvent->getDuration(), EitEvent->getDurationHour(), EitEvent->getStartTimeHour()); - const cEvent* exEvent = Schedule->GetEventAround(EitEvent->getStartTime()+EitEvent->getDuration()/2); - if (exEvent) { - LogD(3, prep("10h Existing event %s startTime %d"), exEvent->Title(), exEvent->StartTime()); + //TODO Should it be added in setup? + if (EitEvent->getDurationHour() > _LONG_EVENT_HOURS) { + LogD(4, prep("Event longer than 10h Duration:%d DurationHour:%d StartTimeHour:%d"), EitEvent->getDuration(), EitEvent->getDurationHour(), EitEvent->getStartTimeHour()); + const cEvent* exEvent = Schedule->GetEventAround(EitEvent->getStartTime()+EitEvent->getDuration()/3); + const cEvent* exEvent2 = (const cEvent*)exEvent->Next(); + if (exEvent && exEvent2 && difftime (exEvent2->EndTime(),EitEvent->getStartTime()+EitEvent->getDuration()) <= 0 ) { + LogD(3, prep("EitEvent overrides existing events '%s', '%s' ... Skipping"), exEvent->Title(), exEvent2->Title()); return true; } } - //if (EitEvent->getDurationHour() > 3) -// return true; return false; // return true; @@ -54,7 +53,7 @@ bool cEEpgHandler::SetEventID(cEvent* Event, tEventID EventID) { bool cEEpgHandler::SetTitle(cEvent* Event, const char* Title) { LogD(3, prep("Event id:%d title:%s new title:%s"), Event->EventID(), Event->Title(), Title); - if (!Event->Title() || Title && (!strcmp(Event->Title(),"") || (strcmp(Title,"") && strcmp(Event->Title(),Title)))) + if (!Event->Title() || (Title && (!strcmp(Event->Title(),"") || (strcmp(Title,"") && strcmp(Event->Title(),Title))))) Event->SetTitle(Title); return true; } diff --git a/epghandler.h b/epghandler.h index e1c6915..3219f58 100644 --- a/epghandler.h +++ b/epghandler.h @@ -38,6 +38,7 @@ private: std::string origShortText; std::string origDescription; cEquivHandler* equivHandler; + static const int _LONG_EVENT_HOURS = 10; }; #endif /*APIVERSNUM > 10725*/ diff --git a/equivhandler.c b/equivhandler.c index b10c004..e449b1f 100644 --- a/equivhandler.c +++ b/equivhandler.c @@ -144,18 +144,7 @@ void cEquivHandler::updateEquivalent(cSchedules * Schedules, tChannelID channelI LogD(2, prep("remove equivalent")); pSchedule->DelEvent(pEqvEvent); cEvent* newEvent = new cEvent (pEvent->EventID()); - newEvent->SetTableID (pEvent->TableID()); - newEvent->SetStartTime (pEvent->StartTime()); - newEvent->SetDuration (pEvent->Duration()); - newEvent->SetVersion (pEvent->Version()); -// newEvent->SetContents(pEvent->Contents()); - newEvent->SetParentalRating(pEvent->ParentalRating()); - newEvent->SetVps (pEvent->Vps()); - newEvent->SetTitle (pEvent->Title ()); - newEvent->SetShortText (pEvent->ShortText ()); - newEvent->SetDescription (pEvent->Description ()); -// newEvent->SetComponents (pEvent->Components()); - newEvent->FixEpgBugs (); + cloneEvent(newEvent, pEvent); pSchedule->AddEvent(newEvent); @@ -164,18 +153,7 @@ void cEquivHandler::updateEquivalent(cSchedules * Schedules, tChannelID channelI } else { LogD(3, prep("equivalent event does not exist")); cEvent* newEvent = new cEvent (pEvent->EventID()); - newEvent->SetTableID (pEvent->TableID()); - newEvent->SetStartTime (pEvent->StartTime()); - newEvent->SetDuration (pEvent->Duration()); - newEvent->SetVersion (pEvent->Version()); -// newEvent->SetContents(pEvent->Contents()); - newEvent->SetParentalRating(pEvent->ParentalRating()); - newEvent->SetVps (pEvent->Vps()); - newEvent->SetTitle (pEvent->Title ()); - newEvent->SetShortText (pEvent->ShortText ()); - newEvent->SetDescription (pEvent->Description ()); -// newEvent->SetComponents (pEvent->Components()); - newEvent->FixEpgBugs (); + cloneEvent(newEvent, pEvent); pSchedule->AddEvent(newEvent); @@ -195,51 +173,13 @@ void cEquivHandler::updateEquivalent(tChannelID channelID, cEvent *pEvent){ LogD(2, prep("equivalent channel exists")); tChannelID equChannelID (tChannelID::FromString((*it).second.c_str())); cEvent* newEvent = new cEvent (pEvent->EventID()); - newEvent->SetTableID (pEvent->TableID()); - newEvent->SetStartTime (pEvent->StartTime()); - newEvent->SetDuration (pEvent->Duration()); - newEvent->SetVersion (pEvent->Version()); -// newEvent->SetContents(pEvent->Contents()); - newEvent->SetParentalRating(pEvent->ParentalRating()); - newEvent->SetVps (pEvent->Vps()); - newEvent->SetTitle (pEvent->Title ()); - newEvent->SetShortText (pEvent->ShortText ()); - newEvent->SetDescription (pEvent->Description ()); -// newEvent->SetComponents (pEvent->Components()); + cloneEvent(newEvent, pEvent); + AddEvent(newEvent, equChannelID); } } -//cSchedule * findFisrtSchedule (cSchedule * Schedule) { -// if (Schedule->Prev()) -// return findFisrtSchedule((cSchedule *)Schedule->Prev()); -// else -// return Schedule; -//} -// -//cSchedule * findSchedule (cSchedule * Schedule, tChannelID channelID) { -// if (Schedule->ChannelID() == channelID) -// return Schedule; -// -// if (Schedule->Next()) -// return findSchedule((cSchedule *)Schedule->Next(), channelID); -// else -// return NULL; -//} -// -//cSchedule * findEqvSchedule (cSchedule * Schedule, tChannelID channelID) { -// cSchedule* foundSchedule = findSchedule(findFisrtSchedule(Schedule),channelID); -// -// if (foundSchedule) -// return foundSchedule; -// -// cSchedule* sch = new cSchedule(channelID); -// Schedule->Insert(sch); -// return sch; -//} - - void cEquivHandler::sortEquivalents(tChannelID channelID, cSchedules* Schedules) { multimap<string, string>::iterator it; @@ -263,3 +203,31 @@ void cEquivHandler::sortEquivalents(tChannelID channelID, cSchedules* Schedules) } } } + +void cEquivHandler::cloneEvent(cEvent *Source, cEvent *Dest) { + + Dest->SetEventID(Source->EventID()); + Dest->SetTableID(Source->TableID()); + Dest->SetVersion(Source->Version()); + Dest->SetRunningStatus(Source->RunningStatus()); + Dest->SetTitle(Source->Title()); + Dest->SetShortText(Source->ShortText()); + Dest->SetDescription(Source->Description()); + cComponents *components = new cComponents(); + if (Source->Components()) { + for (int i = 0; i < Source->Components()->NumComponents(); ++i) + components->SetComponent(i, Source->Components()->Component(i)->ToString()); + } + Dest->SetComponents(components); + uchar contents[MaxEventContents]; + for (int i = 0; i < MaxEventContents; ++i) + contents[i] = Source->Contents(i); + Dest->SetContents(contents); + Dest->SetParentalRating(Source->ParentalRating()); + Dest->SetStartTime(Source->StartTime()); + Dest->SetDuration(Source->Duration()); + Dest->SetVps(Source->Vps()); + if (Source->Seen()) + Dest->SetSeen(); +} + diff --git a/equivhandler.h b/equivhandler.h index 7e7cad7..25e6f37 100644 --- a/equivhandler.h +++ b/equivhandler.h @@ -27,6 +27,7 @@ public: void updateEquivalent(cSchedules * Schedules, tChannelID channelID, cEvent *pEvent); void updateEquivalent(tChannelID channelID, cEvent *pEvent); void sortEquivalents(tChannelID channelID, cSchedules* Schedules); + void cloneEvent(cEvent *Source, cEvent *Dest) static multimap<string, string> getEquiChanMap() { return cEquivHandler::equiChanMap; }; |