From 36e22ad6e2b3f974c96661742940a64a996b79ed Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 22 Feb 2004 15:36:36 +0100 Subject: Extended the SVDRP command LSTE to allow limiting the listed data --- CONTRIBUTORS | 2 ++ HISTORY | 3 +++ epg.c | 33 ++++++++++++++++++++++------ epg.h | 8 ++++--- svdrp.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 102 insertions(+), 14 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index bc19b3ea..3ffb5c96 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -279,6 +279,8 @@ Andy Grobb Thomas Heiligenmann for implementing the SVDRP commands LSTR and DELR for adding MPEG1 handling to cDvbDevice::StillPicture() + for extending 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 Norbert Schmidt for filling in some missing teletext PIDs diff --git a/HISTORY b/HISTORY index 84878be6..a66d29eb 100644 --- a/HISTORY +++ b/HISTORY @@ -2696,3 +2696,6 @@ Video Disk Recorder Revision History in preparation for full VPS support for timers (provided the tv stations actually broadcast this information). Currently these are just displayed in the event page if they exist and are 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). diff --git a/epg.c b/epg.c index 05a8713a..ce839751 100644 --- a/epg.c +++ b/epg.c @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.c 1.12 2004/02/22 13:55:12 kls Exp $ + * $Id: epg.c 1.13 2004/02/22 14:41:37 kls Exp $ */ #include "epg.h" @@ -552,13 +552,34 @@ void cSchedule::Cleanup(time_t Time) } } -void cSchedule::Dump(FILE *f, const char *Prefix) const +void cSchedule::Dump(FILE *f, const char *Prefix, eDumpMode DumpMode, time_t AtTime) const { cChannel *channel = Channels.GetByChannelID(channelID, true); if (channel) { fprintf(f, "%sC %s %s\n", Prefix, channel->GetChannelID().ToString(), channel->Name()); - for (cEvent *p = events.First(); p; p = events.Next(p)) - p->Dump(f, Prefix); + const cEvent *p; + switch (DumpMode) { + case dmAll: { + for (p = events.First(); p; p = events.Next(p)) + p->Dump(f, Prefix); + } + break; + case dmPresent: { + if ((p = GetPresentEvent()) != NULL) + p->Dump(f, Prefix); + } + break; + case dmFollowing: { + if ((p = GetFollowingEvent()) != NULL) + p->Dump(f, Prefix); + } + break; + case dmAtTime: { + if ((p = GetEventAround(AtTime)) != NULL) + p->Dump(f, Prefix); + } + break; + } fprintf(f, "%sc\n", Prefix); } } @@ -682,13 +703,13 @@ bool cSchedules::ClearAll(void) return false; } -bool cSchedules::Dump(FILE *f, const char *Prefix) +bool cSchedules::Dump(FILE *f, const char *Prefix, eDumpMode DumpMode, time_t AtTime) { cSchedulesLock SchedulesLock; cSchedules *s = (cSchedules *)Schedules(SchedulesLock); if (s) { for (cSchedule *p = s->First(); p; p = s->Next(p)) - p->Dump(f, Prefix); + p->Dump(f, Prefix, DumpMode, AtTime); return true; } return false; diff --git a/epg.h b/epg.h index 9cdd6ef3..8b6067d1 100644 --- a/epg.h +++ b/epg.h @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.h 1.9 2004/02/22 13:52:46 kls Exp $ + * $Id: epg.h 1.10 2004/02/22 14:34:04 kls Exp $ */ #ifndef __EPG_H @@ -19,6 +19,8 @@ #define MAXEPGBUGFIXLEVEL 2 +enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime }; + class cSchedule; class cEvent : public cListObject { @@ -89,7 +91,7 @@ public: 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); }; @@ -120,7 +122,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; diff --git a/svdrp.c b/svdrp.c index 4ade5ec9..f55ad557 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 1.59 2004/01/31 10:13:50 kls Exp $ + * $Id: svdrp.c 1.60 2004/02/22 15:31:23 kls Exp $ */ #include "svdrp.h" @@ -205,8 +205,12 @@ const char *HelpPages[] = { " List channels. Without option, all channels are listed. Otherwise\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.", - "LSTE\n" - " List EPG data.", + "LSTE [ ] [ now | next | at