From 576ba802fe69ca7d7fa6c74dcf04698096b46c8d Mon Sep 17 00:00:00 2001
From: Klaus Schmidinger <vdr@tvdr.de>
Date: Sat, 27 Oct 2001 11:47:46 +0200
Subject: New SVDRP commands LSTR and DELR to list and delete recordings

---
 CONTRIBUTORS |  3 +++
 HISTORY      |  2 ++
 svdrp.c      | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 svdrp.h      |  6 +++++-
 4 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index a3bc9f53..50ec72da 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -153,3 +153,6 @@ Simon Bauschulte <SemiSchwabe@Brutzel.de>
 
 Andy Grobb <Charly98@01019freenet.de>
  for completing storing the current audio volume in the setup.conf file
+
+Thomas Heiligenmann <thomas@heiligenmann.de>
+ for implementing the SVDRP commands LSTR and DELR
diff --git a/HISTORY b/HISTORY
index 48290d99..aef14350 100644
--- a/HISTORY
+++ b/HISTORY
@@ -837,3 +837,5 @@ Video Disk Recorder Revision History
   to Andy Grobb).
 - Fixed closing the progress display with the "Back" key when in trick mode
   and Setup.ShowReplayMode is enabled.
+- New SVDRP commands LSTR and DELR to list and delete recordings (thanks to
+  Thomas Heiligenmann).
diff --git a/svdrp.c b/svdrp.c
index 43c55e46..4bfbb5b4 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.25 2001/10/07 15:13:42 kls Exp $
+ * $Id: svdrp.c 1.26 2001/10/27 11:35:38 kls Exp $
  */
 
 #include "svdrp.h"
@@ -120,6 +120,12 @@ const char *HelpPages[] = {
   "    it returns the current channel number and name.",
   "DELC <number>\n"
   "    Delete channel.",
+  "DELR <number>\n"
+  "    Delete the recording with the given number. Before a recording can be\n"
+  "    deleted, an LSTR command must have been executed in order to retrieve\n"
+  "    the recording numbers. The numbers don't change during subsequent DELR\n"
+  "    commands. CAUTION: THERE IS NO CONFIRMATION PROMPT WHEN DELETING A\n"
+  "    RECORDING - BE SURE YOU KNOW WHAT YOU ARE DOING!",
   "DELT <number>\n"
   "    Delete timer.",
   "GRAB <filename> [ jpeg | pnm [ <quality> [ <sizex> <sizey> ] ] ]\n"
@@ -137,6 +143,9 @@ const char *HelpPages[] = {
   "    containing the given string as part of their name are listed.",
   "LSTE\n"
   "    List EPG data.",
+  "LSTR [ <number> ]\n"
+  "    List recordings. Without option, all recordings are listed. Otherwise\n"
+  "    the summary for the given recording is listed.",
   "LSTT [ <number> ]\n"
   "    List timers. Without option, all timers are listed. Otherwise\n"
   "    only the given timer is listed.",
@@ -380,6 +389,27 @@ void cSVDRP::CmdDELC(const char *Option)
   Reply(502, "DELC not yet implemented");
 }
 
+void cSVDRP::CmdDELR(const char *Option)
+{
+  if (*Option) {
+     if (isnumber(Option)) {
+        cRecording *recording = Recordings.Get(strtol(Option, NULL, 10) - 1);
+        if (recording) {
+           if (recording->Delete())
+              Reply(250, "Recording \"%s\" deleted", Option);
+           else
+              Reply(554, "Error while deleting recording!");
+           }
+        else
+           Reply(550, "Recording \"%s\" not found%s", Option, Recordings.Count() ? "" : " (use LSTR before deleting)");
+        }
+     else
+        Reply(501, "Error in recording number \"%s\"", Option);
+     }
+  else
+     Reply(501, "Missing recording number");
+}
+
 void cSVDRP::CmdDELT(const char *Option)
 {
   if (*Option) {
@@ -589,6 +619,38 @@ void cSVDRP::CmdLSTE(const char *Option)
      Reply(451, "Can't get EPG data");
 }
 
+void cSVDRP::CmdLSTR(const char *Option)
+{
+  bool recordings = Recordings.Load();
+  if (*Option) {
+     if (isnumber(Option)) {
+        cRecording *recording = Recordings.Get(strtol(Option, NULL, 10) - 1);
+        if (recording) {
+           if (recording->Summary()) {
+              char *summary = strdup(recording->Summary());
+              Reply(250, "%s", strreplace(summary,'\n','|'));
+              delete summary;
+              }
+           else
+              Reply(550, "No summary availabe");
+           }
+        else
+           Reply(550, "Recording \"%s\" not found", Option);
+        }
+     else
+        Reply(501, "Error in recording number \"%s\"", Option);
+     }
+  else if (recordings) {
+     cRecording *recording = Recordings.First();
+     while (recording) {
+           Reply(recording == Recordings.Last() ? 250 : -250, "%d %s", recording->Index() + 1, recording->Title(' ', true));
+           recording = Recordings.Next(recording);
+           }
+     }
+  else
+     Reply(550, "No recordings available");
+}
+
 void cSVDRP::CmdLSTT(const char *Option)
 {
   if (*Option) {
@@ -910,12 +972,14 @@ void cSVDRP::Execute(char *Cmd)
   s = skipspace(s);
   if      (CMD("CHAN"))  CmdCHAN(s);
   else if (CMD("DELC"))  CmdDELC(s);
+  else if (CMD("DELR"))  CmdDELR(s);
   else if (CMD("DELT"))  CmdDELT(s);
   else if (CMD("GRAB"))  CmdGRAB(s);
   else if (CMD("HELP"))  CmdHELP(s);
   else if (CMD("HITK"))  CmdHITK(s);
   else if (CMD("LSTC"))  CmdLSTC(s);
   else if (CMD("LSTE"))  CmdLSTE(s);
+  else if (CMD("LSTR"))  CmdLSTR(s);
   else if (CMD("LSTT"))  CmdLSTT(s);
   else if (CMD("MESG"))  CmdMESG(s);
   else if (CMD("MODC"))  CmdMODC(s);
diff --git a/svdrp.h b/svdrp.h
index 1c16f88b..cd8e81cc 100644
--- a/svdrp.h
+++ b/svdrp.h
@@ -4,13 +4,14 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: svdrp.h 1.11 2001/09/14 14:35:34 kls Exp $
+ * $Id: svdrp.h 1.12 2001/10/27 11:36:49 kls Exp $
  */
 
 #ifndef __SVDRP_H
 #define __SVDRP_H
 
 #include "dvbapi.h"
+#include "recording.h"
 #include "tools.h"
 
 class cSocket {
@@ -31,6 +32,7 @@ private:
   cSocket socket;
   cFile file;
   CRect ovlClipRects[MAXCLIPRECTS];
+  cRecordings Recordings;
   uint numChars;
   char cmdLine[MAXPARSEBUFFER];
   char *message;
@@ -40,12 +42,14 @@ private:
   void Reply(int Code, const char *fmt, ...);
   void CmdCHAN(const char *Option);
   void CmdDELC(const char *Option);
+  void CmdDELR(const char *Option);
   void CmdDELT(const char *Option);
   void CmdGRAB(const char *Option);
   void CmdHELP(const char *Option);
   void CmdHITK(const char *Option);
   void CmdLSTC(const char *Option);
   void CmdLSTE(const char *Option);
+  void CmdLSTR(const char *Option);
   void CmdLSTT(const char *Option);
   void CmdMESG(const char *Option);
   void CmdMODC(const char *Option);
-- 
cgit v1.2.3