New SVDRP command LSTE to list the EPG data

This commit is contained in:
Klaus Schmidinger 2001-04-01 15:40:43 +02:00
parent eb8bd1e754
commit 11eccf850f
5 changed files with 44 additions and 19 deletions

View File

@ -450,3 +450,4 @@ Video Disk Recorder Revision History
- SVDRP now also works with clients that don't do line buffering (like the - SVDRP now also works with clients that don't do line buffering (like the
Windows 'telnet'). Windows 'telnet').
- Empty lines in config files no longer cause error messages. - Empty lines in config files no longer cause error messages.
- New SVDRP command LSTE to list the EPG data.

26
eit.c
View File

@ -13,7 +13,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: eit.c 1.14 2001/03/31 15:03:16 kls Exp $ * $Id: eit.c 1.15 2001/04/01 15:36:09 kls Exp $
***************************************************************************/ ***************************************************************************/
#include "eit.h" #include "eit.h"
@ -395,17 +395,17 @@ unsigned short cEventInfo::GetServiceID() const
} }
/** */ /** */
void cEventInfo::Dump(FILE *f) const void cEventInfo::Dump(FILE *f, const char *Prefix) const
{ {
if (tTime + lDuration >= time(NULL)) { if (tTime + lDuration >= time(NULL)) {
fprintf(f, "E %u %ld %ld\n", uEventID, tTime, lDuration); fprintf(f, "%sE %u %ld %ld\n", Prefix, uEventID, tTime, lDuration);
if (!isempty(pTitle)) if (!isempty(pTitle))
fprintf(f, "T %s\n", pTitle); fprintf(f, "%sT %s\n", Prefix, pTitle);
if (!isempty(pSubtitle)) if (!isempty(pSubtitle))
fprintf(f, "S %s\n", pSubtitle); fprintf(f, "%sS %s\n", Prefix, pSubtitle);
if (!isempty(pExtendedDescription)) if (!isempty(pExtendedDescription))
fprintf(f, "D %s\n", pExtendedDescription); fprintf(f, "%sD %s\n", Prefix, pExtendedDescription);
fprintf(f, "e\n"); fprintf(f, "%se\n", Prefix);
} }
} }
@ -546,15 +546,15 @@ void cSchedule::Cleanup(time_t tTime)
} }
/** */ /** */
void cSchedule::Dump(FILE *f) const void cSchedule::Dump(FILE *f, const char *Prefix) const
{ {
cChannel *channel = Channels.GetByServiceID(uServiceID); cChannel *channel = Channels.GetByServiceID(uServiceID);
if (channel) if (channel)
{ {
fprintf(f, "C %u %s\n", uServiceID, channel->name); fprintf(f, "%sC %u %s\n", Prefix, uServiceID, channel->name);
for (cEventInfo *p = Events.First(); p; p = Events.Next(p)) for (cEventInfo *p = Events.First(); p; p = Events.Next(p))
p->Dump(f); p->Dump(f, Prefix);
fprintf(f, "c\n"); fprintf(f, "%sc\n", Prefix);
} }
} }
@ -620,10 +620,10 @@ void cSchedules::Cleanup()
} }
/** */ /** */
void cSchedules::Dump(FILE *f) const void cSchedules::Dump(FILE *f, const char *Prefix) const
{ {
for (cSchedule *p = First(); p; p = Next(p)) for (cSchedule *p = First(); p; p = Next(p))
p->Dump(f); p->Dump(f, Prefix);
} }
// --- cEIT ------------------------------------------------------------------ // --- cEIT ------------------------------------------------------------------

8
eit.h
View File

@ -13,7 +13,7 @@
* the Free Software Foundation; either version 2 of the License, or * * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. * * (at your option) any later version. *
* * * *
* $Id: eit.h 1.5 2001/03/31 12:42:52 kls Exp $ * $Id: eit.h 1.6 2001/04/01 15:14:12 kls Exp $
***************************************************************************/ ***************************************************************************/
#ifndef __EIT_H #ifndef __EIT_H
@ -66,7 +66,7 @@ public:
unsigned short GetServiceID(void) const; unsigned short GetServiceID(void) const;
int GetChannelNumber(void) const { return nChannelNumber; } 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 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; void Dump(FILE *f, const char *Prefix = "") const;
}; };
class cSchedule : public cListObject { class cSchedule : public cListObject {
@ -93,7 +93,7 @@ public:
const cEventInfo *GetEvent(time_t tTime) const; const cEventInfo *GetEvent(time_t tTime) const;
const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); } const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); }
int NumEvents(void) const { return Events.Count(); } int NumEvents(void) const { return Events.Count(); }
void Dump(FILE *f) const; void Dump(FILE *f, const char *Prefix = "") const;
}; };
class cSchedules : public cList<cSchedule> { class cSchedules : public cList<cSchedule> {
@ -109,7 +109,7 @@ public:
~cSchedules(); ~cSchedules();
const cSchedule *GetSchedule(unsigned short servid) const; const cSchedule *GetSchedule(unsigned short servid) const;
const cSchedule *GetSchedule(void) const; const cSchedule *GetSchedule(void) const;
void Dump(FILE *f) const; void Dump(FILE *f, const char *Prefix = "") const;
}; };
typedef struct sip_filter { typedef struct sip_filter {

25
svdrp.c
View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured * and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection. * graphical interface that sits on top of an SVDRP connection.
* *
* $Id: svdrp.c 1.16 2001/04/01 14:09:29 kls Exp $ * $Id: svdrp.c 1.17 2001/04/01 15:38:49 kls Exp $
*/ */
#define _GNU_SOURCE #define _GNU_SOURCE
@ -137,6 +137,8 @@ const char *HelpPages[] = {
" List channels. Without option, all channels are listed. Otherwise\n" " List channels. Without option, all channels are listed. Otherwise\n"
" only the given channel is listed. If a name is given, all channels\n" " only the given channel is listed. If a name is given, all channels\n"
" containing the given string as part of their name are listed.", " containing the given string as part of their name are listed.",
"LSTE\n"
" List EPG data.",
"LSTT [ <number> ]\n" "LSTT [ <number> ]\n"
" List timers. Without option, all timers are listed. Otherwise\n" " List timers. Without option, all timers are listed. Otherwise\n"
" only the given timer is listed.", " only the given timer is listed.",
@ -187,6 +189,7 @@ const char *HelpPages[] = {
/* SVDRP Reply Codes: /* SVDRP Reply Codes:
214 Help message 214 Help message
215 EPG data record
220 VDR service ready 220 VDR service ready
221 VDR service closing transmission channel 221 VDR service closing transmission channel
250 Requested VDR action okay, completed 250 Requested VDR action okay, completed
@ -548,6 +551,25 @@ void cSVDRP::CmdLSTC(const char *Option)
Reply(550, "No channels defined"); Reply(550, "No channels defined");
} }
void cSVDRP::CmdLSTE(const char *Option)
{
cThreadLock ThreadLock;
const cSchedules *Schedules = cDvbApi::PrimaryDvbApi->Schedules(&ThreadLock);
if (Schedules) {
FILE *f = fdopen(file, "w");
if (f) {
Schedules->Dump(f, "215-");
fflush(f);
Reply(215, "End of EPG data");
// don't 'fclose(f)' here!
}
else
Reply(451, "Can't open file connection");
}
else
Reply(451, "Can't get EPG data");
}
void cSVDRP::CmdLSTT(const char *Option) void cSVDRP::CmdLSTT(const char *Option)
{ {
if (*Option) { if (*Option) {
@ -851,6 +873,7 @@ void cSVDRP::Execute(char *Cmd)
else if (CMD("HELP")) CmdHELP(s); else if (CMD("HELP")) CmdHELP(s);
else if (CMD("HITK")) CmdHITK(s); else if (CMD("HITK")) CmdHITK(s);
else if (CMD("LSTC")) CmdLSTC(s); else if (CMD("LSTC")) CmdLSTC(s);
else if (CMD("LSTE")) CmdLSTE(s);
else if (CMD("LSTT")) CmdLSTT(s); else if (CMD("LSTT")) CmdLSTT(s);
else if (CMD("MESG")) CmdMESG(s); else if (CMD("MESG")) CmdMESG(s);
else if (CMD("MODC")) CmdMODC(s); else if (CMD("MODC")) CmdMODC(s);

View File

@ -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: svdrp.h 1.8 2001/04/01 14:10:33 kls Exp $ * $Id: svdrp.h 1.9 2001/04/01 15:05:38 kls Exp $
*/ */
#ifndef __SVDRP_H #ifndef __SVDRP_H
@ -47,6 +47,7 @@ private:
void CmdHELP(const char *Option); void CmdHELP(const char *Option);
void CmdHITK(const char *Option); void CmdHITK(const char *Option);
void CmdLSTC(const char *Option); void CmdLSTC(const char *Option);
void CmdLSTE(const char *Option);
void CmdLSTT(const char *Option); void CmdLSTT(const char *Option);
void CmdMESG(const char *Option); void CmdMESG(const char *Option);
void CmdMODC(const char *Option); void CmdMODC(const char *Option);