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
|
the last replayed recording (if any) by pressing Ok repeatedly in the Recordings
|
||||||
menu.
|
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
|
- Changed the return value of cPositioner::HorizonLongitude() to 0 in case the
|
||||||
latitude of the antenna location is beyond +/-81 degrees.
|
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 --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))
|
+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).
|
- 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
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "channels.h"
|
||||||
@ -64,6 +64,7 @@ cChannel::cChannel(void)
|
|||||||
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
|
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
|
||||||
parameters = "";
|
parameters = "";
|
||||||
modification = CHANNELMOD_NONE;
|
modification = CHANNELMOD_NONE;
|
||||||
|
seen = 0;
|
||||||
schedule = NULL;
|
schedule = NULL;
|
||||||
linkChannels = NULL;
|
linkChannels = NULL;
|
||||||
refChannel = 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)
|
void cChannel::SetCaIds(const int *CaIds)
|
||||||
{
|
{
|
||||||
if (caids[0] && caids[0] <= CA_USER_MAX)
|
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->CopyTransponderData(Transponder);
|
||||||
NewChannel->SetId(Nid, Tid, Sid, Rid);
|
NewChannel->SetId(Nid, Tid, Sid, Rid);
|
||||||
NewChannel->SetName(Name, ShortName, Provider);
|
NewChannel->SetName(Name, ShortName, Provider);
|
||||||
|
NewChannel->SetSeen();
|
||||||
Add(NewChannel);
|
Add(NewChannel);
|
||||||
ReNumber();
|
ReNumber();
|
||||||
return NewChannel;
|
return NewChannel;
|
||||||
@ -1026,6 +1033,19 @@ cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, c
|
|||||||
return NULL;
|
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)
|
cString ChannelString(const cChannel *Channel, int Number)
|
||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __CHANNELS_H
|
||||||
@ -128,6 +128,7 @@ private:
|
|||||||
mutable cString shortNameSource;
|
mutable cString shortNameSource;
|
||||||
cString parameters;
|
cString parameters;
|
||||||
int modification;
|
int modification;
|
||||||
|
time_t seen; // When this channel was last seen in the SDT of its transponder
|
||||||
mutable const cSchedule *schedule;
|
mutable const cSchedule *schedule;
|
||||||
cLinkChannels *linkChannels;
|
cLinkChannels *linkChannels;
|
||||||
cChannel *refChannel;
|
cChannel *refChannel;
|
||||||
@ -187,6 +188,7 @@ public:
|
|||||||
tChannelID GetChannelID(void) const { return tChannelID(source, nid, (nid || tid) ? tid : Transponder(), sid, rid); }
|
tChannelID GetChannelID(void) const { return tChannelID(source, nid, (nid || tid) ? tid : Transponder(), sid, rid); }
|
||||||
bool HasTimer(void) const;
|
bool HasTimer(void) const;
|
||||||
int Modification(int Mask = CHANNELMOD_ALL);
|
int Modification(int Mask = CHANNELMOD_ALL);
|
||||||
|
time_t Seen(void) { return seen; }
|
||||||
void CopyTransponderData(const cChannel *Channel);
|
void CopyTransponderData(const cChannel *Channel);
|
||||||
bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
|
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);
|
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
|
||||||
@ -198,6 +200,7 @@ public:
|
|||||||
void SetLinkChannels(cLinkChannels *LinkChannels);
|
void SetLinkChannels(cLinkChannels *LinkChannels);
|
||||||
void SetRefChannel(cChannel *RefChannel);
|
void SetRefChannel(cChannel *RefChannel);
|
||||||
void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
|
void SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
|
||||||
|
void SetSeen(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
class cChannels : public cRwLock, public cConfig<cChannel> {
|
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.
|
///< modification has been made, and 2 if the user has made a modification.
|
||||||
///< Calling this function resets the 'modified' flag to 0.
|
///< 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);
|
||||||
|
void MarkObsoleteChannels(int Source, int Nid, int Tid);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern cChannels Channels;
|
extern cChannels Channels;
|
||||||
|
6
sdt.c
6
sdt.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#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()));
|
cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()));
|
||||||
if (!channel)
|
if (!channel)
|
||||||
channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId()));
|
channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId()));
|
||||||
|
if (channel)
|
||||||
|
channel->SetSeen();
|
||||||
|
|
||||||
cLinkChannels *LinkChannels = NULL;
|
cLinkChannels *LinkChannels = NULL;
|
||||||
SI::Descriptor *d;
|
SI::Descriptor *d;
|
||||||
@ -139,5 +141,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
delete LinkChannels;
|
delete LinkChannels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (sdt.getSectionNumber() == sdt.getLastSectionNumber())
|
||||||
|
Channels.MarkObsoleteChannels(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
|
||||||
Channels.Unlock();
|
Channels.Unlock();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user