Blob Blame History Raw
diff -Nurp vdr-2.4.6.orig/channels.c vdr-2.4.6/channels.c
--- vdr-2.4.6.orig/channels.c	2020-04-11 11:22:05.000000000 +0200
+++ vdr-2.4.6/channels.c	2021-01-07 10:05:06.503383738 +0100
@@ -1145,3 +1145,23 @@ cString ChannelString(const cChannel *Ch
      snprintf(buffer, sizeof(buffer), "%s", tr("*** Invalid Channel ***"));
   return buffer;
 }
+
+// --- cChannel cont. --------------------------------------------------------
+
+bool cChannel::ClearObsoleteChannel(void)
+{
+  bool ChannelsModified = false;
+  if (time(NULL) - Seen() <= CHANNELTIMEOBSOLETE && endswith(name, CHANNELMARKOBSOLETE)) {
+     int mlen = strlen(CHANNELMARKOBSOLETE);
+     int e = strlen(name) - mlen - 1;
+     name[e] = '\0';
+     cString clrname = cString::sprintf("%s", name);
+     name[e] = ' ';
+
+     int OldShowChannelNamesWithSource = Setup.ShowChannelNamesWithSource;
+     Setup.ShowChannelNamesWithSource = 0;
+     ChannelsModified |= SetName(clrname, shortName, provider + mlen + 1);
+     Setup.ShowChannelNamesWithSource = OldShowChannelNamesWithSource;
+     }
+  return ChannelsModified;
+}
diff -Nurp vdr-2.4.6.orig/channels.h vdr-2.4.6/channels.h
--- vdr-2.4.6.orig/channels.h	2020-06-10 16:00:36.000000000 +0200
+++ vdr-2.4.6/channels.h	2021-01-06 22:35:28.224118499 +0100
@@ -202,6 +202,7 @@ public:
   void SetRefChannel(cChannel *RefChannel);
   bool SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
   void SetSeen(void);
+  bool ClearObsoleteChannel(void);
   void DelLinkChannel(cChannel *LinkChannel);
   };
 
diff -Nurp vdr-2.4.6.orig/pat.c vdr-2.4.6/pat.c
--- vdr-2.4.6.orig/pat.c	2020-12-18 15:51:57.000000000 +0100
+++ vdr-2.4.6/pat.c	2021-01-07 10:34:00.956778138 +0100
@@ -489,6 +499,7 @@ void cPatFilter::Process(u_short Pid, u_
         SwitchToNextPmtPid();
      cChannel *Channel = Channels->GetByServiceID(Source(), Transponder(), pmt.getServiceId());
      if (Channel) {
+        Channel->SetSeen();
         SI::CaDescriptor *d;
         cCaDescriptors *CaDescriptors = new cCaDescriptors(Channel->Source(), Channel->Transponder(), Channel->Sid(), Pid);
         // Scan the common loop:
@@ -718,6 +729,8 @@ void cPatFilter::Process(u_short Pid, u_
                    }
                }
             }
+        if (Setup.UpdateChannels == 1 || Setup.UpdateChannels >= 3)
+           ChannelsModified |= Channel->ClearObsoleteChannel();
         if (Setup.UpdateChannels >= 2) {
            ChannelsModified |= Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
            ChannelsModified |= Channel->SetCaIds(CaDescriptors->CaIds());