mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
- Fixed setting the OSD size in the 'Confirm' interface call (thanks to
Deti Fliegl).
- Removed the 'read incomplete section...' error message in the EIT processor.
- Fixed channel data for "DW TV" (thanks to Axel Gruber).
- Added DPID to "PREMIERE MOVIE 1" in channels.conf.cable (thanks to Stephan
Schreiber).
- Prepared the OSD functions for multiple overlapping windows.
- Removed the check to see whether the system time is running linearly.
- Improved performance of SVDRP command entry.
- Removed EPGBugfixLevel '3' - after more than a year Pro-7 finally managed to
broadcast the correct timestamps for EPG events between 0:00 and 6:00!
- Fixed failing watchdog timer if program hangs in OSD activities (thanks to
Carsten Koch).
- No longer requiring 'libncurses' if compiling without DEBUG_OSD=1 and
REMOTE=KBD (thanks to Lauri Pesonen).
- The "Recordings" menu now displays a hierarchical structure if there are
subdirectories for the recordings. This can be controlled through the
"RecordingDirs" parameter in the "Setup" menu.
See "MANUAL/Replaying a Recording" for details.
- Improved speed of setting the Help button texts.
- Fixed handling file names that contain single quotes (') or dollar signs ($)
in the call to the shutdown command (option '-s') and the recording command
(option '-r').
- Improved error handling in the editing process; the resulting file will be
deleted if an error occured.
- A message is now prompted at the end of the editing process, indicating
whether the process succeeded or failed.
- Fixed setting the LastActivity timestamp after a shutdown prompt (thanks to
Sergei Haller).
- A message is now prompted if free disk space becomes low during recording.
- The editing process now calls AssertFreeDiskSpace() to remove deleted
recordings if the disk becomes full.
- The "Main" menu now displays in its title the used disk space (in percent)
and the estimated free disk space (in hh:mm), assuming a data rate of 30 MB
per minute.
- Activating the "Recordings" menu now displays "scanning recordings..." to
give the user some feedback in case this takes longer.
- Status messages are now displayed centered.
- Removed the 'Tools' subdirectory from the VDR archive. All contributed tools
can now be found at ftp://ftp.cadsoft.de/pub/people/kls/vdr/Tools.
156 lines
5.5 KiB
C++
156 lines
5.5 KiB
C++
/***************************************************************************
|
|
eit.h - description
|
|
-------------------
|
|
begin : Fri Aug 25 2000
|
|
copyright : (C) 2000 by Robert Schneider
|
|
email : Robert.Schneider@web.de
|
|
|
|
2001-08-15: Adapted to 'libdtv' by Rolf Hakenes <hakenes@hippomi.de>
|
|
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* $Id: eit.h 1.13 2002/01/13 16:18:23 kls Exp $
|
|
***************************************************************************/
|
|
|
|
#ifndef __EIT_H
|
|
#define __EIT_H
|
|
|
|
#include "thread.h"
|
|
#include "tools.h"
|
|
|
|
#define MAXEPGBUGFIXLEVEL 2
|
|
|
|
class cEventInfo : public cListObject {
|
|
friend class cSchedule;
|
|
friend class cEIT;
|
|
private:
|
|
unsigned char uTableID; // Table ID this event came from
|
|
unsigned short uServiceID; // Service ID of program for that event
|
|
bool bIsFollowing; // true if this is the next event on this channel
|
|
bool bIsPresent; // true if this is the present event running
|
|
char *pExtendedDescription; // Extended description of this event
|
|
char *pSubtitle; // Subtitle of event
|
|
char *pTitle; // Title of event
|
|
unsigned short uEventID; // Event ID of this event
|
|
long lDuration; // duration of event in seconds
|
|
time_t tTime; // Start time
|
|
int nChannelNumber; // the actual channel number from VDR's channel list (used in cMenuSchedule for sorting by channel number)
|
|
protected:
|
|
void SetTableID(unsigned char tableid);
|
|
void SetFollowing(bool foll);
|
|
void SetPresent(bool pres);
|
|
void SetTitle(const char *string);
|
|
void SetServiceID(unsigned short servid);
|
|
void SetEventID(unsigned short evid);
|
|
void SetDuration(long l);
|
|
void SetTime(time_t t);
|
|
void SetExtendedDescription(const char *string);
|
|
void SetSubtitle(const char *string);
|
|
cEventInfo(unsigned short serviceid, unsigned short eventid);
|
|
public:
|
|
~cEventInfo();
|
|
const unsigned char GetTableID(void) const;
|
|
const char *GetTimeString(void) const;
|
|
const char *GetEndTimeString(void) const;
|
|
const char *GetDate(void) const;
|
|
bool IsFollowing(void) const;
|
|
bool IsPresent(void) const;
|
|
const char *GetExtendedDescription(void) const;
|
|
const char *GetSubtitle(void) const;
|
|
const char *GetTitle(void) const;
|
|
unsigned short GetEventID(void) const;
|
|
long GetDuration(void) const;
|
|
time_t GetTime(void) const;
|
|
unsigned short GetServiceID(void) const;
|
|
int GetChannelNumber(void) const { return nChannelNumber; }
|
|
void SetChannelNumber(int ChannelNumber) const { ((cEventInfo *)this)->nChannelNumber = ChannelNumber; } // doesn't modify the EIT data, so it's ok to make it 'const'
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
void FixEpgBugs(void);
|
|
};
|
|
|
|
class cSchedule : public cListObject {
|
|
friend class cSchedules;
|
|
friend class cEIT;
|
|
private:
|
|
cEventInfo *pPresent;
|
|
cEventInfo *pFollowing;
|
|
unsigned short uServiceID;
|
|
cList<cEventInfo> Events;
|
|
protected:
|
|
void SetServiceID(unsigned short servid);
|
|
bool SetFollowingEvent(cEventInfo *pEvent);
|
|
bool SetPresentEvent(cEventInfo *pEvent);
|
|
void Cleanup(time_t tTime);
|
|
void Cleanup(void);
|
|
cSchedule(unsigned short servid = 0);
|
|
public:
|
|
~cSchedule();
|
|
const cEventInfo *GetPresentEvent(void) const;
|
|
const cEventInfo *GetFollowingEvent(void) const;
|
|
unsigned short GetServiceID(void) const;
|
|
const cEventInfo *GetEvent(unsigned short uEventID, time_t tTime = 0) const;
|
|
const cEventInfo *GetEventAround(time_t tTime) const;
|
|
const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); }
|
|
int NumEvents(void) const { return Events.Count(); }
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
};
|
|
|
|
class cSchedules : public cList<cSchedule> {
|
|
friend class cSIProcessor;
|
|
private:
|
|
const cSchedule *pCurrentSchedule;
|
|
unsigned short uCurrentServiceID;
|
|
protected:
|
|
bool SetCurrentServiceID(unsigned short servid);
|
|
void Cleanup();
|
|
public:
|
|
cSchedules(void);
|
|
~cSchedules();
|
|
const cSchedule *GetSchedule(unsigned short servid) const;
|
|
const cSchedule *GetSchedule(void) const;
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
};
|
|
|
|
typedef struct sip_filter {
|
|
|
|
u_char pid;
|
|
u_char tid;
|
|
int handle;
|
|
bool inuse;
|
|
|
|
}SIP_FILTER;
|
|
|
|
class cSIProcessor : public cThread {
|
|
private:
|
|
static int numSIProcessors;
|
|
static cSchedules *schedules;
|
|
static cMutex schedulesMutex;
|
|
static const char *epgDataFileName;
|
|
bool masterSIProcessor;
|
|
bool useTStime;
|
|
SIP_FILTER *filters;
|
|
char *fileName;
|
|
bool active;
|
|
void Action(void);
|
|
bool AddFilter(u_char pid, u_char tid);
|
|
bool ShutDownFilters(void);
|
|
public:
|
|
cSIProcessor(const char *FileName);
|
|
~cSIProcessor();
|
|
static void SetEpgDataFileName(const char *FileName);
|
|
static const char *GetEpgDataFileName(void);
|
|
void SetStatus(bool On);
|
|
bool SetUseTSTime(bool use);
|
|
bool SetCurrentServiceID(unsigned short servid);
|
|
const cSchedules *Schedules(void) { return schedules; }
|
|
};
|
|
|
|
#endif
|