mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Channels that are no longer contained in the current SDT of a transponder are now marked with the keyword OBSOLETE in their name and provider fields
This commit is contained in:
parent
7cbced0c12
commit
c7256c1c11
7
HISTORY
7
HISTORY
@ -8032,7 +8032,7 @@ Video Disk Recorder Revision History
|
||||
the last replayed recording (if any) by pressing Ok repeatedly in the Recordings
|
||||
menu.
|
||||
|
||||
2014-01-01: Version 2.1.3
|
||||
2014-01-05: Version 2.1.3
|
||||
|
||||
- Changed the return value of cPositioner::HorizonLongitude() to 0 in case the
|
||||
latitude of the antenna location is beyond +/-81 degrees.
|
||||
@ -8110,3 +8110,8 @@ Video Disk Recorder Revision History
|
||||
-PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc))
|
||||
+PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." pkg-config --variable=$(1) vdr))
|
||||
- Eliminated MAXDVBDEVICES (suggested by Oliver Endriss).
|
||||
- Channels that are no longer contained in the current SDT of a transponder are now
|
||||
marked with the keyword OBSOLETE in their name and provider fields. That way you can
|
||||
identify obsolete channels when you switch to them, and you can get the complete
|
||||
overview of all obsolete channels by sorting the Channels list by provider (by
|
||||
pressing the 0 key twice). Automatic deletion of obsolete channels may follow later.
|
||||
|
22
channels.c
22
channels.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: channels.c 3.3 2013/12/28 11:33:08 kls Exp $
|
||||
* $Id: channels.c 3.4 2014/01/04 15:01:52 kls Exp $
|
||||
*/
|
||||
|
||||
#include "channels.h"
|
||||
@ -64,6 +64,7 @@ cChannel::cChannel(void)
|
||||
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
|
||||
parameters = "";
|
||||
modification = CHANNELMOD_NONE;
|
||||
seen = 0;
|
||||
schedule = NULL;
|
||||
linkChannels = NULL;
|
||||
refChannel = NULL;
|
||||
@ -411,6 +412,11 @@ void cChannel::SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *Compos
|
||||
}
|
||||
}
|
||||
|
||||
void cChannel::SetSeen(void)
|
||||
{
|
||||
seen = time(NULL);
|
||||
}
|
||||
|
||||
void cChannel::SetCaIds(const int *CaIds)
|
||||
{
|
||||
if (caids[0] && caids[0] <= CA_USER_MAX)
|
||||
@ -1019,6 +1025,7 @@ cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, c
|
||||
NewChannel->CopyTransponderData(Transponder);
|
||||
NewChannel->SetId(Nid, Tid, Sid, Rid);
|
||||
NewChannel->SetName(Name, ShortName, Provider);
|
||||
NewChannel->SetSeen();
|
||||
Add(NewChannel);
|
||||
ReNumber();
|
||||
return NewChannel;
|
||||
@ -1026,6 +1033,19 @@ cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, c
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define CHANNELMARKOBSOLETE "OBSOLETE"
|
||||
#define CHANNELTIMEOBSOLETE 3600 // seconds to wait before declaring a channel obsolete (in case it has actually been seen before)
|
||||
|
||||
void cChannels::MarkObsoleteChannels(int Source, int Nid, int Tid)
|
||||
{
|
||||
for (cChannel *channel = First(); channel; channel = Next(channel)) {
|
||||
if (time(NULL) - channel->Seen() > CHANNELTIMEOBSOLETE && channel->Source() == Source && channel->Nid() == Nid && channel->Tid() == Tid) {
|
||||
if (!endswith(channel->Name(), CHANNELMARKOBSOLETE))
|
||||
channel->SetName(cString::sprintf("%s %s", channel->Name(), CHANNELMARKOBSOLETE), channel->ShortName(), cString::sprintf("%s %s", CHANNELMARKOBSOLETE, channel->Provider()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cString ChannelString(const cChannel *Channel, int Number)
|
||||
{
|
||||
char buffer[256];
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: channels.h 3.1 2013/11/04 09:52:02 kls Exp $
|
||||
* $Id: channels.h 3.2 2014/01/04 15:01:21 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CHANNELS_H
|
||||
@ -128,6 +128,7 @@ private:
|
||||
mutable cString shortNameSource;
|
||||
cString parameters;
|
||||
int modification;
|
||||
time_t seen; // When this channel was last seen in the SDT of its transponder
|
||||
mutable const cSchedule *schedule;
|
||||
cLinkChannels *linkChannels;
|
||||
cChannel *refChannel;
|
||||
@ -187,6 +188,7 @@ public:
|
||||
tChannelID GetChannelID(void) const { return tChannelID(source, nid, (nid || tid) ? tid : Transponder(), sid, rid); }
|
||||
bool HasTimer(void) const;
|
||||
int Modification(int Mask = CHANNELMOD_ALL);
|
||||
time_t Seen(void) { return seen; }
|
||||
void CopyTransponderData(const cChannel *Channel);
|
||||
bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
|
||||
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
|
||||
@ -198,6 +200,7 @@ public:
|
||||
void SetLinkChannels(cLinkChannels *LinkChannels);
|
||||
void SetRefChannel(cChannel *RefChannel);
|
||||
void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
|
||||
void SetSeen(void);
|
||||
};
|
||||
|
||||
class cChannels : public cRwLock, public cConfig<cChannel> {
|
||||
@ -237,6 +240,7 @@ public:
|
||||
///< 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);
|
||||
void MarkObsoleteChannels(int Source, int Nid, int Tid);
|
||||
};
|
||||
|
||||
extern cChannels Channels;
|
||||
|
6
sdt.c
6
sdt.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: sdt.c 2.5 2010/05/16 14:23:21 kls Exp $
|
||||
* $Id: sdt.c 3.1 2014/01/04 15:02:31 kls Exp $
|
||||
*/
|
||||
|
||||
#include "sdt.h"
|
||||
@ -43,6 +43,8 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()));
|
||||
if (!channel)
|
||||
channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId()));
|
||||
if (channel)
|
||||
channel->SetSeen();
|
||||
|
||||
cLinkChannels *LinkChannels = NULL;
|
||||
SI::Descriptor *d;
|
||||
@ -139,5 +141,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
||||
delete LinkChannels;
|
||||
}
|
||||
}
|
||||
if (sdt.getSectionNumber() == sdt.getLastSectionNumber())
|
||||
Channels.MarkObsoleteChannels(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
|
||||
Channels.Unlock();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user