summaryrefslogtreecommitdiff
path: root/svdrp.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2004-02-22 15:36:36 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2004-02-22 15:36:36 +0100
commit36e22ad6e2b3f974c96661742940a64a996b79ed (patch)
tree71d5f8ccddbb7fbbaa54a3ca25c1bfecf8f5bd7a /svdrp.c
parent98f3934a583790b2119ff5a09d63cb3ede4e78f4 (diff)
downloadvdr-36e22ad6e2b3f974c96661742940a64a996b79ed.tar.gz
vdr-36e22ad6e2b3f974c96661742940a64a996b79ed.tar.bz2
Extended the SVDRP command LSTE to allow limiting the listed data
Diffstat (limited to 'svdrp.c')
-rw-r--r--svdrp.c70
1 files changed, 65 insertions, 5 deletions
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 [ <channel> ] [ now | next | at <time> ]\n"
+ " List EPG data. Without any parameters all data of all channels is\n"
+ " listed. If a channel is given (either by number of by channel ID),\n",
+ " only data for that channel is listed. 'now', 'next', or 'at <time>'\n"
+ " restricts the returned data to present events, following events, or\n"
+ " events at the given time (which must be in time_t form)."
"LSTR [ <number> ]\n"
" List recordings. Without option, all recordings are listed. Otherwise\n"
" the summary for the given recording is listed.",
@@ -714,9 +718,65 @@ void cSVDRP::CmdLSTE(const char *Option)
cSchedulesLock SchedulesLock;
const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
if (Schedules) {
+ const cSchedule* Schedule = NULL;
+ eDumpMode DumpMode = dmAll;
+ time_t AtTime = 0;
+ if (*Option) {
+ char buf[strlen(Option) + 1];
+ strcpy(buf, Option);
+ const char *delim = " \t";
+ char *p = strtok(buf, delim);
+ while (p && DumpMode == dmAll) {
+ if (strcasecmp(p, "NOW") == 0)
+ DumpMode = dmPresent;
+ else if (strcasecmp(p, "NEXT") == 0)
+ DumpMode = dmFollowing;
+ else if (strcasecmp(p, "AT") == 0) {
+ DumpMode = dmAtTime;
+ if ((p = strtok(NULL, delim)) != NULL) {
+ if (isnumber(p))
+ AtTime = strtol(p, NULL, 10);
+ else {
+ Reply(501, "Invalid time");
+ return;
+ }
+ }
+ else {
+ Reply(501, "Missing time");
+ return;
+ }
+ }
+ else if (!Schedule) {
+ cChannel* Channel = NULL;
+ if (isnumber(p))
+ Channel = Channels.GetByNumber(strtol(Option, NULL, 10));
+ else
+ Channel = Channels.GetByChannelID(tChannelID::FromString(Option));
+ if (Channel) {
+ Schedule = Schedules->GetSchedule(Channel->GetChannelID());
+ if (!Schedule) {
+ Reply(550, "No schedule found");
+ return;
+ }
+ }
+ else {
+ Reply(550, "Channel \"%s\" not defined", p);
+ return;
+ }
+ }
+ else {
+ Reply(501, "Unknown option: \"%s\"", p);
+ return;
+ }
+ p = strtok(NULL, delim);
+ }
+ }
FILE *f = fdopen(file, "w");
if (f) {
- Schedules->Dump(f, "215-");
+ if (Schedule)
+ Schedule->Dump(f, "215-", DumpMode, AtTime);
+ else
+ Schedules->Dump(f, "215-", DumpMode, AtTime);
fflush(f);
Reply(215, "End of EPG data");
// don't 'fclose(f)' here!
@@ -741,7 +801,7 @@ void cSVDRP::CmdLSTR(const char *Option)
free(summary);
}
else
- Reply(550, "No summary availabe");
+ Reply(550, "No summary available");
}
else
Reply(550, "Recording \"%s\" not found", Option);