Implemented 'Schedules' menu

This commit is contained in:
Klaus Schmidinger
2000-10-29 13:17:22 +01:00
parent 92d3e366ba
commit e6999e9b3a
20 changed files with 1948 additions and 558 deletions

179
eit.h
View File

@@ -13,80 +13,127 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: eit.h 1.1 2000/09/03 10:23:24 kls Exp $
* $Id: eit.h 1.2 2000/10/29 10:21:56 kls Exp $
***************************************************************************/
#ifndef __EIT_H
#define __EIT_H
#include <dvb_v4l.h>
#include "thread.h"
#include "tools.h"
typedef struct eit_event {
bool bIsValid;
char szTitle[512];
char szSubTitle[512];
char szDate[12];
char szTime[12];
}eit_event;
/**
*@author Robert Schneider
*/
class cEIT {
class cEventInfo : public cListObject {
friend class cSchedule;
friend class cEIT;
private:
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
u_char cExtendedDescriptorNumber; // current extended descriptor number that has to be inserted
int nChannelNumber; // the actual channel number from VDR's channel list (used in cMenuSchedule for sorting by channel number)
protected:
void SetFollowing(bool foll);
void SetPresent(bool pres);
bool SetTitle(char *string);
void SetServiceID(unsigned short servid);
void SetEventID(unsigned short evid);
void SetDuration(long l);
void SetTime(time_t t);
bool AddExtendedDescription(char *string);
bool SetSubtitle(char *string);
void IncreaseExtendedDescriptorNumber(void);
cEventInfo(unsigned short serviceid, unsigned short eventid);
public:
cEIT();
~cEIT();
/** */
int GetEIT();
/** */
int SetProgramNumber(unsigned short pnr);
/** Retrieves the string representing the time of the current event */
char * GetRunningTime();
/** Retrieves the string representing the date of the current event */
char * GetRunningDate();
/** Retrieves the string for the running subtitle */
char * GetRunningSubtitle();
/** retrieves the string for the running title */
char * GetRunningTitle();
/** Retrieves the string representing the time of the next event */
char * GetNextTime();
/** Retrieves the string representing the date of the next event */
char * GetNextDate();
/** Retrieves the string for the next subtitle */
char * GetNextSubtitle();
/** retrieves the string for the next title */
char * GetNextTitle();
/** */
bool IsValid();
~cEventInfo();
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;
u_char GetExtendedDescriptorNumber(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'
};
protected: // Protected attributes
/** Device name of VBI device */
const char * cszBitFilter;
protected: // Protected attributes
/** handle to VBI device (usually /dev/vbi) */
int fsvbi;
/** Describes the event next on */
eit_event evtNext;
/** Describes the running event */
eit_event evtRunning;
protected: // Protected methods
/** Set the bitfilter in vbi device to return
correct tables */
int SetBitFilter(unsigned short pid, unsigned short section, unsigned short mode);
/** */
int GetSection(unsigned char *buf, ushort PID, unsigned char sec);
/** */
int CloseFilter(unsigned short handle);
/** */
char * mjd2string(unsigned short mjd);
/** */
int strdvbcpy(unsigned char *dst, unsigned char *src, int max);
public: // Public attributes
/** */
unsigned short uProgramNumber;
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) const;
const cEventInfo *GetEvent(time_t tTime) const;
const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); }
int NumEvents(void) const { return Events.Count(); }
};
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;
};
typedef struct sip_filter {
u_char pid;
u_char tid;
int handle;
bool inuse;
}SIP_FILTER;
class cSIProcessor : public cThread {
private:
cSchedules *schedules;
bool useTStime;
SIP_FILTER *filters;
int fsvbi;
bool RefreshFilters(void);
void Action(void);
public:
cSIProcessor(const char *FileName);
~cSIProcessor();
bool SetUseTSTime(bool use);
bool AddFilter(u_char pid, u_char tid);
bool ShutDownFilters(void);
bool SetCurrentServiceID(unsigned short servid);
const cSchedules *Schedules(void) { return schedules; }
};
#endif