Radio/TV channel switch

Message ID 422AE018.7050701@ventoso.org
State New
Headers

Commit Message

Luca Olivetti March 6, 2005, 10:48 a.m. UTC
  Uwe Ortner wrote:
> I know this isnt on the top priority list ...
> 
> I have about 2500 channels available, if I could fade out or switch
> between radio and tv channels this would be a great help managing the
> channel list

This is how I do it (I include the source-dependent patch because 
otherwise the channel filter patch wouldn't apply).
You have to go to the dvb setup to select if you want to see only tv, 
only radio or all channels. In spite of the name they both apply to 
1.3.21/1.3.22

Bye
  

Comments

Uwe Ortner March 6, 2005, 4:39 p.m. UTC | #1
Am So, den 06.03.2005 schrieb Luca Olivetti um 11:48:
> Uwe Ortner wrote:
> > I know this isnt on the top priority list ...
> > 
> > I have about 2500 channels available, if I could fade out or switch
> > between radio and tv channels this would be a great help managing the
> > channel list
> 
> This is how I do it (I include the source-dependent patch because 
> otherwise the channel filter patch wouldn't apply).
> You have to go to the dvb setup to select if you want to see only tv, 
> only radio or all channels. In spite of the name they both apply to 
> 1.3.21/1.3.22
> 
> Bye

Thank you, but I forget to mention Im working with 1.3.20 ;)

Nethertheless could this function be applied to the next vdr?

uwe
  

Patch

--- channels.c.newchannels	2005-02-06 10:44:53.000000000 +0100
+++ channels.c	2005-02-13 16:48:07.825253533 +0100
@@ -536,6 +536,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 +914,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();
@@ -944,7 +959,33 @@ 
      cChannel *NewChannel = new cChannel(*Transponder);
      NewChannel->SetId(Nid, Tid, Sid, Rid);
      NewChannel->SetName(Name, ShortName, Provider);
+#if 0
      Add(NewChannel);
+#else
+     /* find group separator for the source of this channel */
+     {
+         char buffer[64];
+         snprintf(buffer, sizeof(buffer), "New Channels @ %s",
+         *cSource::ToString(NewChannel->Source()) );
+         cChannel *groupSep = GetByName(buffer);
+         if(!groupSep) // group separator for this source doesn't exist, so lets create it
+         {
+             groupSep = new cChannel();
+             groupSep->SetName(buffer, "", "");
+             groupSep->SetGroupSep(true);
+             Add(groupSep);
+         } else  // find next separator or last channel 
+         {
+             cChannel *nextChannel=Next(groupSep);
+             while (nextChannel &&  !nextChannel->GroupSep())
+             {
+                groupSep=nextChannel;
+                nextChannel=Next(nextChannel);
+             }
+         }
+         Add(NewChannel, groupSep);
+     }
+#endif
      ReNumber();
      return NewChannel;
      }
--- channels.h.newchannels	2005-01-16 14:46:41.000000000 +0100
+++ channels.h	2005-02-13 16:45:39.327608385 +0100
@@ -191,6 +191,7 @@ 
   void SetCaDescriptors(int Level);
   void SetLinkChannels(cLinkChannels *LinkChannels);
   void SetRefChannel(cChannel *RefChannel);
+  void SetGroupSep(bool Sep = true);
   };
 
 class cChannels : public cRwLock, public cConfig<cChannel> {
@@ -208,6 +209,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--; }