Common subdirectories: vdr-1.3.22/PLUGINS and vdr-1.3.22.patch/PLUGINS diff -ubw vdr-1.3.22/channels.c vdr-1.3.22.patch/channels.c --- vdr-1.3.22/channels.c 2005-02-06 10:44:53.000000000 +0100 +++ vdr-1.3.22.patch/channels.c 2005-03-18 13:06:40.000000000 +0100 @@ -455,6 +455,25 @@ } } +void cChannel::SeparateFreePayTV(char *buffer) +{ + cChannel *groupSep=Channels.GetByName(buffer); + if (!groupSep) + { + groupSep = new cChannel(); + groupSep->SetName(buffer,"",""); + groupSep->SetGroupSep(true); + Channels.Add(groupSep); + } + if (Channels.GetNextGroup(groupSep->Index())>=0) + groupSep=Channels.Get(Channels.GetNextGroup(groupSep->Index())-1); + else + groupSep=Channels.Last(); + Channels.Move(this,groupSep); + Channels.ReNumber(); +} + + void cChannel::SetCaIds(const int *CaIds) { if (caids[0] && caids[0] <= 0x00FF) @@ -470,6 +489,38 @@ if (!CaIds[i]) break; } + cChannel *groupSep=Channels.Get(Channels.GetPrevGroup(Index())); + if (groupSep) { + char buffer[64]; + if (caids[0]==0) { + snprintf(buffer, sizeof(buffer), "New PayRadio-Channels @ %s", *cSource::ToString(Source())); + if (groupSep != Channels.GetByName(buffer)) { + snprintf(buffer, sizeof(buffer), "New PayTV-Channels @ %s", *cSource::ToString(Source())); + if (groupSep == Channels.GetByName(buffer)) { + snprintf(buffer, sizeof(buffer), "New FreeTV-Channels @ %s",*cSource::ToString(Source())); + SeparateFreePayTV(buffer); + } + } + else { + snprintf(buffer, sizeof(buffer), "New Free Radio-Channels @ %s",*cSource::ToString(Source())); + SeparateFreePayTV(buffer); + } + } + else { + snprintf(buffer, sizeof(buffer), "New Free Radio-Channels @ %s", *cSource::ToString(Source())); + if (groupSep != Channels.GetByName(buffer)) { + snprintf(buffer, sizeof(buffer), "New FreeTV-Channels @ %s", *cSource::ToString(Source())); + if (groupSep == Channels.GetByName(buffer)) { + snprintf(buffer, sizeof(buffer), "New PayTV-Channels @ %s",*cSource::ToString(Source())); + SeparateFreePayTV(buffer); + } + } + else { + snprintf(buffer, sizeof(buffer), "New PayRadio-Channels @ %s",*cSource::ToString(Source())); + SeparateFreePayTV(buffer); + } + } + } modification |= CHANNELMOD_CA; Channels.SetModified(); } @@ -536,6 +587,11 @@ refChannel = RefChannel; } +void cChannel::SetGroupSep(bool Sep) +{ + groupSep = Sep; +} + static int PrintParameter(char *p, char Name, int Value) { return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0; @@ -909,6 +965,16 @@ return NULL; } +cChannel *cChannels::GetByName(char *Name) +{ + for (cChannel *channel = First(); channel; channel = Next(channel)) + { + if (strcmp(channel->Name(), Name)==0) + return channel; + } + return NULL; +} + bool cChannels::HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel) { tChannelID NewChannelID = NewChannel->GetChannelID(); @@ -937,14 +1003,34 @@ return Result; } -cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid) +cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid, int Type) { if (Transponder) { dsyslog("creating new channel '%s,%s;%s' on %s transponder %d with id %d-%d-%d-%d", Name, ShortName, Provider, *cSource::ToString(Transponder->Source()), Transponder->Transponder(), Nid, Tid, Sid, Rid); cChannel *NewChannel = new cChannel(*Transponder); NewChannel->SetId(Nid, Tid, Sid, Rid); NewChannel->SetName(Name, ShortName, Provider); - Add(NewChannel); + /* find group seperator for the source of this channel */ + { + char buffer[64]; + if (Type==2) + snprintf(buffer, sizeof(buffer), "New Free Radio-Channels @ %s", *cSource::ToString(NewChannel->Source())); + else + snprintf(buffer, sizeof(buffer), "New FreeTV-Channels @ %s", *cSource::ToString(NewChannel->Source()) ); + cChannel *groupSep = GetByName(buffer); + if(!groupSep) // group sepeator for this source doesn't exist, so lets + { + groupSep = new cChannel(); + groupSep->SetName(buffer,"",""); + groupSep->SetGroupSep(true); + Add(groupSep); + } + if (GetNextGroup(groupSep->Index())>=0) + groupSep=Get(GetNextGroup(groupSep->Index())-1); + else + groupSep=Last(); + Add(NewChannel, groupSep); + } ReNumber(); return NewChannel; } Only in vdr-1.3.22.patch/: channels.c.orig Only in vdr-1.3.22.patch/: channels.c.rej diff -ubw vdr-1.3.22/channels.h vdr-1.3.22.patch/channels.h --- vdr-1.3.22/channels.h 2005-02-20 15:05:24.000000000 +0100 +++ vdr-1.3.22.patch/channels.h 2005-03-18 12:52:28.000000000 +0100 @@ -129,6 +129,7 @@ cChannel *refChannel; cString ParametersToString(void) const; bool StringToParameters(const char *s); + void SeparateFreePayTV(char *buffer); public: cChannel(void); cChannel(const cChannel &Channel); @@ -191,6 +192,7 @@ void SetCaDescriptors(int Level); void SetLinkChannels(cLinkChannels *LinkChannels); void SetRefChannel(cChannel *RefChannel); + void SetGroupSep(bool Sep = true); }; class cChannels : public cRwLock, public cConfig { @@ -208,6 +210,7 @@ cChannel *GetByNumber(int Number, int SkipGap = 0); cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID); cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false); + cChannel *GetByName(char *Name); int BeingEdited(void) { return beingEdited; } void IncBeingEdited(void) { beingEdited++; } void DecBeingEdited(void) { beingEdited--; } @@ -219,7 +222,7 @@ ///< Returns 0 if no channels have been modified, 1 if an automatic ///< modification has been made, and 2 if the user has made a modification. ///< Calling this function resets the 'modified' flag to 0. - cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0); + cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0,int Type = 0); }; extern cChannels Channels; Only in vdr-1.3.22.patch/: channels.h.orig Common subdirectories: vdr-1.3.22/libsi and vdr-1.3.22.patch/libsi diff -ubw vdr-1.3.22/sdt.c vdr-1.3.22.patch/sdt.c --- vdr-1.3.22/sdt.c 2004-10-31 13:10:20.000000000 +0100 +++ vdr-1.3.22.patch/sdt.c 2005-03-18 12:52:28.000000000 +0100 @@ -75,7 +75,7 @@ // channel->SetCa(SiSdtService.getFreeCaMode() ? 0xFFFF : 0); } else if (*pn && Setup.UpdateChannels >= 3) { - channel = Channels.NewChannel(Channel(), pn, ps, pp, sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()); + channel = Channels.NewChannel(Channel(), pn, ps, pp, sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId(),0,sd->getServiceType()); patFilter->Trigger(); } } Common subdirectories: vdr-1.3.22/symbols and vdr-1.3.22.patch/symbols