diff options
| -rw-r--r-- | eepg.c | 70 | ||||
| -rw-r--r-- | eit2.c | 43 | ||||
| -rw-r--r-- | eit2.h | 5 | ||||
| -rw-r--r-- | epghandler.c | 4 | ||||
| -rw-r--r-- | equivhandler.c | 17 | ||||
| -rw-r--r-- | util.c | 42 | ||||
| -rw-r--r-- | util.h | 2 | 
7 files changed, 139 insertions, 44 deletions
| @@ -1001,7 +1001,7 @@ int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length)          C->Tid = HILO16 (Channel->TransportId);          C->Sid = HILO16 (Channel->ServiceId);          tChannelID channelID = tChannelID (C->Src, C->Nid, C->Tid, C->Sid); -        cChannel *VC = GetChannelByID(channelID, true); +        const cChannel *VC = GetChannelByID(channelID, true);          bool IsFound = (VC);          if(IsFound) {            C->Src = VC->Source(); @@ -1515,8 +1515,12 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor    unsigned short int CurrentYear = tmCurrent->tm_year;    unsigned short int CurrentMonth = tmCurrent->tm_mon;    //esyslog("EEPGDEBUG: CurrentMonthday=%i, TableIdExtension:%04x, MonthdayTitles=%i.",CurrentMonthday,TableIdExtension, MonthdayTitles); +#if APIVERSNUM >= 20300 +  LOCK_SCHEDULES_WRITE; +#else    cSchedulesLock SchedulesLock (true); -  cSchedules *s = (cSchedules *) cSchedules::Schedules (SchedulesLock); +  cSchedules *Schedules = (cSchedules *) cSchedules::Schedules (SchedulesLock); +#endif    do { //process each block of titles      sTitleBlockNagraGuide *TB = (sTitleBlockNagraGuide *) p;      int ChannelId = HILO16 (TB->ChannelId); @@ -1535,7 +1539,7 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor      sChannel *C = &sChannels[ChannelSeq[ChannelId]]; //find channel      //cSchedule *ps = NULL;//[MAX_EQUIVALENCES]; -    //PrepareToWriteToSchedule (C, s, ps); +    //PrepareToWriteToSchedule (C, Schedules, ps);      for (int i = 0; i < NumberOfTitles; i++) { //process each title within block        sTitleNagraGuide *Title = (sTitleNagraGuide *) p; @@ -1586,7 +1590,7 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor          if (Themes[Title->ThemeId][0] == 0x00) //if detailed themeid is not known, get global themeid            Title->ThemeId &= 0xf0; -        WriteToSchedule (tChannelID (C->Src, C->Nid, C->Tid, C->Sid), s, EventId, StartTime, Title->Duration, Text, SummText, +        WriteToSchedule (tChannelID (C->Src, C->Nid, C->Tid, C->Sid), Schedules, EventId, StartTime, Title->Duration, Text, SummText,                           Title->ThemeId, NAGRA_TABLE_ID, Version);          if (Text != NULL) @@ -1625,7 +1629,7 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor      } //end for titles      //FinishWriteToSchedule (C, s, ps); -    sortSchedules(s, tChannelID (C->Src, C->Nid, C->Tid, C->Sid)); +    sortSchedules(Schedules, tChannelID (C->Src, C->Nid, C->Tid, C->Sid));      p = next_p;    } while (p < DataEnd); //end of TitleBlock  } @@ -1748,7 +1752,7 @@ int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length)      C->Tid = HILO16 (Channel->TransportId);      C->Sid = HILO16 (Channel->ServiceId);      tChannelID channelID = tChannelID(C->Src, C->Nid, C->Tid, C->Sid); -    cChannel *VC = GetChannelByID(channelID, true); +    const cChannel *VC = GetChannelByID(channelID, true);      bool IsFound = (VC);      if(IsFound) {        strncpy((char*)(C->Name), VC->Name (), 64); @@ -2318,7 +2322,7 @@ int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length)                  C->Sid = Sid;                  C->SkyNumber = SkyNumber;                  tChannelID channelID = tChannelID (C->Src, C->Nid, C->Tid, C->Sid); -                cChannel *VC = Channels.GetByChannelID (channelID, true); +                const cChannel *VC = GetChannelByID (channelID, false);                  bool IsFound = (VC);                  if (IsFound)                    strncpy ((char *) C->Name, VC->Name (), 64); @@ -2592,9 +2596,13 @@ void cFilterEEPG::LoadIntoSchedule (void)    bool isOTV = Format == SKY_IT || Format == SKY_UK;    { +#if APIVERSNUM >= 20300 +  LOCK_SCHEDULES_WRITE; +#else    cSchedulesLock SchedulesLock (true); -  cSchedules *s = (cSchedules *) cSchedules::Schedules (SchedulesLock); -  if (s) { +  cSchedules *Schedules = (cSchedules *) cSchedules::Schedules (SchedulesLock); +#endif +  if (Schedules) {      while (i < nTitles) {        S = Summaries[j]; @@ -2646,7 +2654,7 @@ void cFilterEEPG::LoadIntoSchedule (void)            //channelids are sequentially numbered and sent in MHW1 and MHW2, but not in SKY, so we need to lookup the table index            sChannel *C = &sChannels[ChannelSeq[ChannelId]]; //find channel            //cSchedule *p;//[MAX_EQUIVALENCES]; -          //PrepareToWriteToSchedule (C, s, p); +          //PrepareToWriteToSchedule (C, Schedules, p);            tChannelID chanID = tChannelID (C->Src, C->Nid, C->Tid, C->Sid);            char rating = 0x00; @@ -2661,12 +2669,12 @@ void cFilterEEPG::LoadIntoSchedule (void)  //          LogD (0, prep("EventId %08x Titlenr:%d,SummNr:%d,SummAv:%x,Un1:%x,Un2:%x,Un3:%x,Name:%s,STxtLn:%d,Summary:%s."),  //                      T->EventId, i, j, T->SummaryAvailable, T->Unknown1, T->Unknown2, T->Unknown3, T->Text, S->ShortTextLength, S->Text); -          WriteToSchedule (chanID, s, T->EventId, StartTime, T->Duration / 60, (char *) T->Text, +          WriteToSchedule (chanID, Schedules, T->EventId, StartTime, T->Duration / 60, (char *) T->Text,                             (char *) S->Text, T->ThemeId, TableId, 0, rating, S->ShortTextLength); -          sortSchedules(s, chanID); +          sortSchedules(Schedules, chanID);            //if (shortText != NULL) delete [] shortText; -          //FinishWriteToSchedule (C, s, p); +          //FinishWriteToSchedule (C, Schedules, p);            //Replays--;            //if ((S->NumReplays != 0) && (Replays > 0)) { //when replays are used, all summaries of the replays are stored consecutively; currently only CSAT            //j++;  //move to next summary @@ -2704,15 +2712,15 @@ void cFilterEEPG::LoadIntoSchedule (void)              sChannel *C = &sChannels[ChannelSeq[T->ChannelId]]; //find channel              //cSchedule *p;//[MAX_EQUIVALENCES];              tChannelID chanID = tChannelID (C->Src, C->Nid, C->Tid, C->Sid); -            //PrepareToWriteToSchedule (C, s, p); +            //PrepareToWriteToSchedule (C, Schedules, p);              char rating = 0x00;              if (!isOTV &&  T->Rating) { //TODO only works on OTV for now                rating = T->Rating;              } -            WriteToSchedule (chanID, s, T->EventId, T->StartTime, T->Duration / 60, (char *) T->Text, +            WriteToSchedule (chanID, Schedules, T->EventId, T->StartTime, T->Duration / 60, (char *) T->Text,                               NULL, T->ThemeId, DEFAULT_TABLE_ID, 0, rating, S->ShortTextLength); -            //FinishWriteToSchedule (C, s, p); -            sortSchedules(s, chanID); +            //FinishWriteToSchedule (C, Schedules, p); +            sortSchedules(Schedules, chanID);              SummariesNotFound++;            } @@ -2909,12 +2917,19 @@ void cFilterEEPG::ProccessContinuous(u_short Pid, u_char Tid, int Length, const  {    //0x39 Viasat, 0x0300 Dish Network EEPG, 0x0441 Bell ExpressVU EEPG    LogD(4, prep("Pid: 0x%02x Tid: %d Length: %d"), Pid, Tid, Length); +#if APIVERSNUM >= 20300 +  LOCK_SCHEDULES_WRITE; +//  cStateKey SchedulesStateKey; +//  cSchedules *Schedules = cSchedules::GetSchedulesWrite(SchedulesStateKey, 10); +#else    cSchedulesLock SchedulesLock(true, 10);    cSchedules *Schedules = (cSchedules*)(cSchedules::Schedules(SchedulesLock)); +#endif    //Look for other satelite positions only if Dish/Bell ExpressVU for the moment hardcoded pid check    if(Schedules)      SI::cEIT2 EIT(Schedules, Source(), Tid, Data, Format, Pid == EIT_PID); +#if APIVERSNUM < 20300    else//cEIT EIT (Schedules, Source (), Tid, Data);    {      // If we don't get a write lock, let's at least get a read lock, so @@ -2928,6 +2943,7 @@ void cFilterEEPG::ProccessContinuous(u_short Pid, u_char Tid, int Length, const      //cEIT EIT (Schedules, Source (), Tid, Data, true);    } +#endif  }  void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Length) @@ -3295,8 +3311,12 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)    SI::PremiereCIT cit(Data, false);    if (cit.CheckCRCAndParse ()) { +#if APIVERSNUM >= 20300 +    LOCK_SCHEDULES_WRITE; +#else      cSchedulesLock SchedulesLock (true, 10);      cSchedules *Schedules = (cSchedules *) cSchedules::Schedules (SchedulesLock); +#endif      if (Schedules) {        int now = time (0);        int nCount = 0; @@ -3438,7 +3458,12 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)              }            }            tChannelID channelID (Source (), nid, tid, sid); +#if APIVERSNUM >= 20300 +	  LOCK_CHANNELS_READ; +          const cChannel *channel = Channels->GetByChannelID (channelID, true); +#else            cChannel *channel = Channels.GetByChannelID (channelID, true); +#endif            if (!channel)              continue; @@ -3543,7 +3568,11 @@ void cFilterEEPG::ProcessPremiere(const u_char *& Data)            }            if (Modified) {              pSchedule->Sort (); +#if APIVERSNUM >= 20300 +            pSchedule->SetModified(); +#else              Schedules->SetModified (pSchedule); +#endif            }            delete pct;          } @@ -3669,7 +3698,12 @@ bool cPluginEEPG::Start (void)    tables[0][0] = NULL;    //store all available sources, so when a channel is not found on current satellite, we can look for alternate sat positions.    //perhaps this can be done smarter through existing VDR function??? -  for (cChannel * Channel = Channels.First (); Channel; Channel = Channels.Next (Channel)) { +#if APIVERSNUM >= 20300 +  LOCK_CHANNELS_READ; +  for (const cChannel * Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) { +#else +  for (const cChannel * Channel = Channels.First (); Channel; Channel = Channels.Next (Channel)) { +#endif      if (!Channel->GroupSep ()) {        bool found = false;        for (int i = 0; (i < NumberOfAvailableSources) && (!found); i++) @@ -76,14 +76,21 @@ cEvent* cEIT2::ProcessEitEvent(cSchedule* pSchedule,const SI::EIT::Event* EitEve      pSchedule->AddEvent (newEvent);    if (Tid == 0x4E) { // we trust only the present/following info on the actual TS      if (EitEvent->getRunningStatus () >= SI::RunningStatusNotRunning) -      pSchedule->SetRunningStatus (pEvent, EitEvent->getRunningStatus (), channel); +    { +#if APIVERSNUM >= 20300 +        pSchedule->SetRunningStatus (pEvent, EitEvent->getRunningStatus (), channel); +#else +        cChannel* chan = Channels.GetByChannelID(channel->GetChannelID()); +        pSchedule->SetRunningStatus (pEvent, EitEvent->getRunningStatus (), chan); +#endif +    }    }    if (OnlyRunningStatus)      return NULL;  // do this before setting the version, so that the full update can be done later    pEvent->SetVersion (versionNumber);    ProcessEventDescriptors(ExternalData, channel->Source(), Tid, EitEvent, -                          pEvent, Schedules, channel); +                          pEvent, Schedules, channel->GetChannelID());    Modified = true;    return pEvent; @@ -91,7 +98,7 @@ cEvent* cEIT2::ProcessEitEvent(cSchedule* pSchedule,const SI::EIT::Event* EitEve  void cEIT2::ProcessEventDescriptors(bool ExternalData, int Source,                                      u_char Tid, const SI::EIT::Event* SiEitEvent, cEvent* pEvent, -                                    cSchedules* Schedules, cChannel* channel) +                                    cSchedules* Schedules, const tChannelID& channelId)  {    cEvent *rEvent = NULL; @@ -110,6 +117,13 @@ void cEIT2::ProcessEventDescriptors(bool ExternalData, int Source,    cLinkChannels *LinkChannels = NULL;    cComponents *Components = NULL; +#if APIVERSNUM >= 20300 +  LOCK_CHANNELS_WRITE; +  if (!Channels) return; +  cChannel *channel = Channels->GetByChannelID(channelId); +#else +  cChannel *channel = Channels.GetByChannelID(channelId); +#endif    DescriptorLoop dl = SiEitEvent->eventDescriptors;    for (SI::Loop::Iterator it2; (d = dl.getNext(it2)); ) @@ -247,7 +261,11 @@ void cEIT2::ProcessEventDescriptors(bool ExternalData, int Source,            char linkName[ld->privateData.getLength() + 1];            strn0cpy(linkName, (const char *) ld->privateData.getData(), sizeof(linkName));            // TODO is there a standard way to determine the character set of this string? +#if APIVERSNUM >= 20300 +          cChannel *link = Channels->GetByChannelID(linkID); +#else            cChannel *link = Channels.GetByChannelID(linkID); +#endif            if (link != channel) { // only link to other channels, not the same one              //fprintf(stderr, "Linkage %s %4d %4d %5d %5d %5d %5d  %02X  '%s'\n", hit ? "*" : "", channel->Number(), link ? link->Number() : -1, SiEitEvent.getEventId(), ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId(), ld->getLinkageType(), linkName);//XXX              if (link) { @@ -255,10 +273,15 @@ void cEIT2::ProcessEventDescriptors(bool ExternalData, int Source,                  link->SetName(linkName, "", "");              }              else if (Setup.UpdateChannels >= 4) { -              cChannel *transponder = channel; +              const cChannel *transponder = channel;                if (channel->Tid() != ld->getTransportStreamId()) +#if APIVERSNUM >= 20300 +                transponder = Channels->GetByTransponderID(linkID); +              link = Channels->NewChannel(transponder, linkName, "", "", ld->getOriginalNetworkId(), +#else                  transponder = Channels.GetByTransponderID(linkID);                link = Channels.NewChannel(transponder, linkName, "", "", ld->getOriginalNetworkId(), +#endif                  ld->getTransportStreamId(), ld->getServiceId());              }              if (link) { @@ -549,8 +572,16 @@ cEIT2::cEIT2 (cSchedules * Schedules, int Source, u_char Tid, const u_char * Dat    ////    if (Empty && Tid == 0x4E && getSectionNumber () == 0) -    // ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running -    pSchedule->ClrRunningStatus (channel); +  // ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running +  { +#if APIVERSNUM >= 20300 +      LOCK_CHANNELS_WRITE; +      cChannel *chan = Channels->GetByChannelID(channel->GetChannelID()); +#else +      cChannel *chan = Channels.GetByChannelID(channel->GetChannelID()); +#endif +      pSchedule->ClrRunningStatus (chan); +  }    if (Tid == 0x4E)      pSchedule->SetPresentSeen ();    if (OnlyRunningStatus) { @@ -62,7 +62,7 @@ public:  private:    void ProcessEventDescriptors(bool ExternalData, int Source, u_char Tid,                                 const SI::EIT::Event* SiEitEvent, cEvent* pEvent, -                               cSchedules* Schedules, cChannel* channel); +                               cSchedules* Schedules, const tChannelID& channelID);  private:    bool Empty; @@ -73,8 +73,7 @@ private:    time_t SegmentEnd;    cSchedules* Schedules;    EFormat Format; -  cChannel* channel; - +  const cChannel* channel;  };  } //end namespace SI diff --git a/epghandler.c b/epghandler.c index a80600c..1e2db9f 100644 --- a/epghandler.c +++ b/epghandler.c @@ -108,7 +108,7 @@ void cEEpgHandler::FindDuplicate(cEvent* Event, const char* newTitle)  {    if (!newTitle || !searchDuplicates) return; -  for (cEvent *ev = schedule->Events()->First(); ev; ev = schedule->Events()->Next(ev)) { +  for (const cEvent *ev = schedule->Events()->First(); ev; ev = schedule->Events()->Next(ev)) {      //assume that events are already sorted.      if (ev->StartTime() > Event->EndTime()) break;      if (ev->Title() && strcasecmp(ev->Title(), newTitle) == 0 @@ -117,7 +117,7 @@ void cEEpgHandler::FindDuplicate(cEvent* Event, const char* newTitle)        LogD(0, prep("!!!Deleting Event id o:%d n:%d; title o:%s n:%s; start_time o:%d n:%d; duration o:%d n:%d"),            ev->EventID(), Event->EventID(), ev->Title(), newTitle, ev->StartTime(), Event->StartTime(), ev->Duration(), Event->Duration()); -      RemoveEvent(ev); +      RemoveEvent((cEvent*)ev);        break;      }    } diff --git a/equivhandler.c b/equivhandler.c index 745f513..75007ec 100644 --- a/equivhandler.c +++ b/equivhandler.c @@ -77,7 +77,12 @@ void cEquivHandler::loadEquivalentChannelMap (void)        tChannelID OriginalChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid);        bool found = false;        //int i = 0; +#if APIVERSNUM >= 20300 +      LOCK_CHANNELS_READ; +      const cChannel *OriginalChannel = Channels->GetByChannelID(OriginalChID, false); +#else        cChannel *OriginalChannel = Channels.GetByChannelID (OriginalChID, false); +#endif        if (!OriginalChannel) {          LogI(2, prep("Warning, not found EPG channel \'%s\' in channels.conf. Equivalence is assumed to be valid, but perhaps you should check the entry in the equivalents file"), origChanID);          continue; @@ -89,7 +94,11 @@ void cEquivHandler::loadEquivalentChannelMap (void)            rid = 0;          }          tChannelID EquivChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid); +#if APIVERSNUM >= 20300 +        const cChannel *EquivChannel = Channels->GetByChannelID(EquivChID, false); +#else          cChannel *EquivChannel = Channels.GetByChannelID (EquivChID, false); +#endif          if (!EquivChannel) {            LogI(0, prep("Warning, not found equivalent channel \'%s\' in channels.conf"), equiChanID);            continue; @@ -130,7 +139,7 @@ void cEquivHandler::updateEquivalent(cSchedules * Schedules, tChannelID channelI    for (it=ret.first; it!=ret.second; ++it) {      LogD(2, prep("equivalent channel exists"));      tChannelID equChannelID (tChannelID::FromString((*it).second.c_str())); -    cChannel *equChannel = GetChannelByID (equChannelID, false); +    const cChannel *equChannel = GetChannelByID (equChannelID, false);      if (equChannel) {        LogD(2, prep("found Equivalent channel %s"), *equChannelID.ToString());        cSchedule *pSchedule = (cSchedule *) Schedules->GetSchedule (equChannel, true); @@ -192,14 +201,18 @@ void cEquivHandler::sortEquivalents(tChannelID channelID, cSchedules* Schedules)    {      LogD(3, prep("equivalent channel exists"));      tChannelID equChannelID(tChannelID::FromString((*it).second.c_str())); -    cChannel* pChannel = GetChannelByID(equChannelID, false); +    const cChannel* pChannel = GetChannelByID(equChannelID, false);      if (pChannel)      {        LogD(2, prep("found Equivalent channel %s"), *equChannelID.ToString());        cSchedule* pSchedule = (cSchedule *) Schedules->GetSchedule(pChannel, true);        pSchedule->Sort(); +#if APIVERSNUM >= 20300 +      pSchedule->SetModified(); +#else        Schedules->SetModified(pSchedule); +#endif      }    }  } @@ -30,14 +30,23 @@ map<string,string> tableDict;  cEquivHandler* EquivHandler; -cChannel *GetChannelByID(tChannelID & channelID, bool searchOtherPos) +const cChannel *GetChannelByID(const tChannelID & channelID, bool searchOtherPos)  { -  cChannel *VC = Channels.GetByChannelID(channelID, true); +#if APIVERSNUM >= 20300 +  LOCK_CHANNELS_READ; +  const cChannel *VC = Channels->GetByChannelID(channelID, true); +#else +  const cChannel *VC = Channels.GetByChannelID(channelID, true); +#endif    if(!VC && searchOtherPos){      //look on other satpositions      for(int i = 0;i < NumberOfAvailableSources;i++){ -      channelID = tChannelID(AvailableSources[i], channelID.Nid(), channelID.Tid(), channelID.Sid()); -      VC = Channels.GetByChannelID(channelID, true); +      tChannelID chID = tChannelID(AvailableSources[i], channelID.Nid(), channelID.Tid(), channelID.Sid()); +#if APIVERSNUM >= 20300 +      VC = Channels->GetByChannelID(chID, true); +#else +      VC = Channels.GetByChannelID(chID, true); +#endif        if(VC){          //found this actually on satellite nextdoor...          break; @@ -159,7 +168,7 @@ private:    cTimeMs LastHandleEvent;    std::map<tChannelID,cList<cEvent>*,tChannelIDCompare> *map_list;  //  enum { INSERT_TIMEOUT_IN_MS = 10000 }; -  void MergeEquivalents(cEvent* dest, cEvent* src); +  void MergeEquivalents(cEvent* dest, const cEvent* src);  protected:    virtual void Action(void);  public: @@ -189,14 +198,19 @@ void cAddEventThread::Action(void)    while (Running() && !LastHandleEvent.TimedOut()) {      std::map<tChannelID, cList<cEvent>*, tChannelIDCompare>::iterator it; +#if APIVERSNUM >= 20300 +    LOCK_SCHEDULES_WRITE; +    cSchedules *schedules = Schedules; +#else      cSchedulesLock SchedulesLock(true, 10); -    cSchedules *schedules = (cSchedules *) cSchedules::Schedules(SchedulesLock); -    Lock(); +    cSchedules *schedules = (cSchedules*)(cSchedules::Schedules(SchedulesLock)); +#endif +   Lock();      it = map_list->begin();      while (schedules && it != map_list->end()) {        cSchedule *schedule = (cSchedule *) schedules->GetSchedule( -        Channels.GetByChannelID((*it).first), true); +        GetChannelByID((*it).first, false), true);        while (((*it).second->First()) != NULL) {          cEvent* event = (*it).second->First(); @@ -207,7 +221,7 @@ void cAddEventThread::Action(void)             (*it).second->Del(event, false); -           for (cEvent *ev = schedule->Events()->First(); ev; ev = schedule->Events()->Next(ev)) { +           for (const cEvent *ev = schedule->Events()->First(); ev; ev = schedule->Events()->Next(ev)) {               if (ev->StartTime() > event->EndTime()) {                     break;               } @@ -215,7 +229,7 @@ void cAddEventThread::Action(void)                   && ((event->StartTime() >= ev->StartTime() && event->StartTime() < ev->EndTime())                   || (ev->StartTime() >= event->StartTime() && ev->StartTime() < event->EndTime()))){                 MergeEquivalents(event, ev); -               schedule->DelEvent(ev); +               schedule->DelEvent((cEvent*)ev);                 break;               }             } @@ -268,7 +282,7 @@ string ExtractAttributes(string text) {  } -inline void cAddEventThread::MergeEquivalents(cEvent* dest, cEvent* src) +inline void cAddEventThread::MergeEquivalents(cEvent* dest, const cEvent* src)  {    if (!dest->ShortText() || !strcmp(dest->ShortText(),""))      dest->SetShortText(src->ShortText()); @@ -427,12 +441,16 @@ void sortSchedules(cSchedules * Schedules, tChannelID channelID){    LogD(3, prep("Start sortEquivalent %s"), *channelID.ToString()); -  cChannel *pChannel = GetChannelByID (channelID, false); +  const cChannel *pChannel = GetChannelByID (channelID, false);    cSchedule *pSchedule;    if (pChannel) {      pSchedule = (cSchedule *) (Schedules->GetSchedule(pChannel, true));        pSchedule->Sort(); +#if APIVERSNUM >= 20300 +      pSchedule->SetModified(); +#else        Schedules->SetModified(pSchedule); +#endif      }    if (EquivHandler->getEquiChanMap().count(*channelID.ToString()) > 0)      EquivHandler->sortEquivalents(channelID, Schedules); @@ -61,7 +61,7 @@ extern cEquivHandler* EquivHandler;  void AddEvent(cEvent *event, tChannelID ChannelID); -cChannel *GetChannelByID(tChannelID & channelID, bool searchOtherPos); +const cChannel *GetChannelByID(const tChannelID & channelID, bool searchOtherPos);  time_t LocalTime2UTC(time_t t);  time_t UTC2LocalTime(time_t t);  void GetLocalTimeOffset(void); | 
