diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2004-02-29 18:00:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2004-02-29 18:00:00 +0100 |
commit | 5a4eb3f1041b8a53826cebe570f9d201f3d35826 (patch) | |
tree | 4444f7bec812600713430e7f0570dfdd0bf9136e /epg.h | |
parent | 3fc29659759abb10154b78f9e3568407e523e1fc (diff) | |
download | vdr-patch-lnbsharing-5a4eb3f1041b8a53826cebe570f9d201f3d35826.tar.gz vdr-patch-lnbsharing-5a4eb3f1041b8a53826cebe570f9d201f3d35826.tar.bz2 |
Version 1.3.5vdr-1.3.5
- Fixed reading the EPG preferred language parameter from 'setup.conf'.
- Fixed switching to a visible programme in case the current channel has neither
a video nor an audio PID.
- Fixed editing channels (SID now range checked) and creating new channels (NID,
TID and RID are now set to 0).
- Fixed transponder handling to make it work with satellites that provide two
transponders on the same frequency, with different polarization, like Hispasat
at S30.0W (thanks to Thomas Bergwinkl for pointing this out). See man vdr(5)
for details about the enhanced channel ID format.
- Since there appears to be no general solution for the UPT error yet, a recording
now initiates an "emergency exit" if the number of UPT errors during one
recording exceeds 10 (suggested by Gregoire Favre). Since the UPT error doesn't
happen on my system, this has not been explicitly tested.
The "preliminary fix" for the UPT error in VDR/dvbdevice.c has been disabled
by default, since it makes channel switching unpleasently slow. If you want
to have that workaround back, you can uncomment the line
//#define WAIT_FOR_LOCK_AFTER_TUNING 1
in VDR/dvbdevice.c.
- Adapted the 'sky' plugin to use the actual channel IDs, and to fetch EPG data
from www.bleb.org.
- Limited automatic retuning to devices that actually provide the transponder
(necessary for the 'sky' plugin).
- Fixed handling receivers in the 'sky' plugin, so that a recording on the same
channel won't interrupt an ongoing Transfer Mode.
- Added subtable ID and TSDT handling to 'libsi' (thanks to Marcel Wiesweg).
- Fixed some Russian OSD texts (thanks to Vyacheslav Dikonov).
- Added the 'running status' to the EPG events. This is necessary for implementing
the VPS function for recording.
- Removed the obsolete 'present' and 'following' handling from the EPG data.
- The EPG data is now always kept sorted chronologically in the internal data
structures. This also means that any EPG data retrieved through the SVRDP
command LSTE is guaranteed to be sorted by start time.
- Now using the 'running status' in the channel display, so that a programme
that has an end time that is before the current time, but is still running,
will still be shown in the display (provided the broadcasters handle the
'running status' flag correctly). This also applies to programmes that have
a start time that is in the future, but are already running.
- Implemented an "EPG linger time", which can be set to have older EPG information
still displayed in the "Schedule" menu (thanks to Jaakko Hyvätti).
- Added PDCDescriptor handling to 'libsi'.
- Implemented handling the VPS timestamps (aka "Programme Identification Label")
for full VPS support for timers (provided the tv stations actually broadcast
this information). The VPS time is displayed in the event info page if it exists
and is different than the event's start time.
- Extended the SVDRP command LSTE to allow limiting the listed data to a given
channel, the present or following events, or events at a given time (thanks to
Thomas Heiligenmann).
- Fixed a typo in libsi/si.h (thanks to Stéphane Esté-Gracias).
- Timers can now be set to use the VPS information to control recording a programme.
The new setup options "Recording/Use VPS" and "Recording/VPS margin", as well as
the "VPS" option in the individual timers, can be used to control this feature
(see MANUAL for details).
Note that this feature will certainly need a lot of testing before it can be
called "safe"!
- The "Schedule" and "What's on now/next?" menus now have an additional column
which displays information on whether there is a timer defined for an event,
whether an event has a VPS time that's different than its start time, and
whether an event is currently running (see MANUAL under "The "Schedule" Menu"
for details).
Diffstat (limited to 'epg.h')
-rw-r--r-- | epg.h | 38 |
1 files changed, 18 insertions, 20 deletions
@@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $Id: epg.h 1.4 2004/01/09 15:21:05 kls Exp $ + * $Id: epg.h 1.10 2004/02/22 14:34:04 kls Exp kls $ */ #ifndef __EPG_H @@ -19,6 +19,8 @@ #define MAXEPGBUGFIXLEVEL 2 +enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime }; + class cSchedule; class cEvent : public cListObject { @@ -27,45 +29,43 @@ private: u_int16_t eventID; // Event ID of this event uchar tableID; // Table ID this event came from uchar version; // Version number of section this event came from - //XXX present/following obsolete??? - bool isPresent; // true if this is the present event running - bool isFollowing; // true if this is the next event on this channel + int runningStatus; // 0=undefined, 1=not running, 2=starts in a few seconds, 3=pausing, 4=running char *title; // Title of this event char *shortText; // Short description of this event (typically the episode name in case of a series) char *description; // Description of this event time_t startTime; // Start time of this event int duration; // Duration of this event in seconds - //XXX find an other solution, avoiding channelNumber??? - int channelNumber; // the actual channel number from VDR's channel list (used in cMenuSchedule for sorting by channel number) + time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) public: cEvent(tChannelID ChannelID, u_int16_t EventID); ~cEvent(); + virtual bool operator< (const cListObject &ListObject); tChannelID ChannelID(void) const { return channelID; } u_int16_t EventID(void) const { return eventID; } uchar TableID(void) const { return tableID; } uchar Version(void) const { return version; } - bool IsPresent(void) const { return isPresent; } - bool IsFollowing(void) const { return isFollowing; } + int RunningStatus(void) const { return runningStatus; } const char *Title(void) const { return title; } const char *ShortText(void) const { return shortText; } const char *Description(void) const { return description; } time_t StartTime(void) const { return startTime; } int Duration(void) const { return duration; } - int ChannelNumber(void) const { return channelNumber; } + time_t Vps(void) const { return vps; } + bool HasTimer(void) const; const char *GetDateString(void) const; const char *GetTimeString(void) const; const char *GetEndTimeString(void) const; + const char *GetVpsString(void) const; void SetEventID(u_int16_t EventID); void SetTableID(uchar TableID); void SetVersion(uchar Version); - void SetIsPresent(bool IsPresent); - void SetIsFollowing(bool IsFollowing); + void SetRunningStatus(int RunningStatus); void SetTitle(const char *Title); void SetShortText(const char *ShortText); void SetDescription(const char *Description); void SetStartTime(time_t StartTime); void SetDuration(int Duration); - void SetChannelNumber(int ChannelNumber) const { ((cEvent *)this)->channelNumber = ChannelNumber; } // doesn't modify the EIT data, so it's ok to make it 'const' //XXX + void SetVps(time_t Vps); void Dump(FILE *f, const char *Prefix = "") const; static bool Read(FILE *f, cSchedule *Schedule); void FixEpgBugs(void); @@ -77,24 +77,22 @@ class cSchedule : public cListObject { private: tChannelID channelID; cList<cEvent> events; - cEvent *present; - cEvent *following; public: cSchedule(tChannelID ChannelID); tChannelID ChannelID(void) const { return channelID; } - bool SetPresentEvent(cEvent *Event); - bool SetFollowingEvent(cEvent *Event); + void SetRunningStatus(cEvent *Event, int RunningStatus); void ResetVersions(void); + void Sort(void); void Cleanup(time_t Time); void Cleanup(void); cEvent *AddEvent(cEvent *Event); - const cEvent *GetPresentEvent(void) const; - const cEvent *GetFollowingEvent(void) const; + const cEvent *GetPresentEvent(bool CheckRunningStatus = false) const; + const cEvent *GetFollowingEvent(bool CheckRunningStatus = false) const; const cEvent *GetEvent(u_int16_t EventID, time_t StartTime = 0) const; const cEvent *GetEventAround(time_t Time) const; const cEvent *GetEventNumber(int n) const { return events.Get(n); } int NumEvents(void) const { return events.Count(); } - void Dump(FILE *f, const char *Prefix = "") const; + void Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0) const; static bool Read(FILE *f, cSchedules *Schedules); }; @@ -125,7 +123,7 @@ public: static void Cleanup(bool Force = false); static void ResetVersions(void); static bool ClearAll(void); - static bool Dump(FILE *f, const char *Prefix = ""); + static bool Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0); static bool Read(FILE *f = NULL); cSchedule *AddSchedule(tChannelID ChannelID); const cSchedule *GetSchedule(tChannelID ChannelID) const; |