]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
clean up the PVR recop interface slightly. We want to have a clear distinction betwee...
authorAndreas Öman <andreas@lonelycoder.com>
Sun, 10 Feb 2008 13:44:11 +0000 (13:44 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Sun, 10 Feb 2008 13:44:11 +0000 (13:44 +0000)
htmlui.c
pvr.c
pvr.h

index 65d9a4514821b2e33b263f6ddff813e147177dcd..738550af2936e214a9d65f878d85bf9def8dcf47 100644 (file)
--- a/htmlui.c
+++ b/htmlui.c
@@ -654,7 +654,15 @@ page_event(http_connection_t *hc, const char *remain, void *opaque)
       epg_unlock();
       return HTTP_STATUS_UNAUTHORIZED;
     }
-    cmd = RECOP_CANCEL;
+    cmd = RECOP_ABORT;
+  }
+
+  if(http_arg_get(&hc->hc_url_args, "clear")) {
+    if(!html_verify_access(hc, "record-events")) {
+      epg_unlock();
+      return HTTP_STATUS_UNAUTHORIZED;
+    }
+    cmd = RECOP_CLEAR;
   }
 
   if(cmd != -1)
@@ -723,7 +731,7 @@ page_event(http_connection_t *hc, const char *remain, void *opaque)
 
     default:
       tcp_qprintf(&tq,
-                 "<input type=\"submit\" class=\"knapp\" name=\"cancel\" "
+                 "<input type=\"submit\" class=\"knapp\" name=\"clear\" "
                  "value=\"Clear error status\">");
       break;
 
diff --git a/pvr.c b/pvr.c
index 65a6e415e7bd772b2bffa0e065d0a8e5a0e62cb4..8b2cd569639fc1389fda1971703859ae95fc9160 100644 (file)
--- a/pvr.c
+++ b/pvr.c
@@ -53,7 +53,6 @@ struct pvr_rec_list pvrr_global_list;
 static void pvr_database_save(pvr_rec_t *pvrr);
 static void pvr_database_erase(pvr_rec_t *pvrr);
 static void pvr_database_load(void);
-static void pvr_unrecord(pvr_rec_t *pvrr);
 static void pvrr_fsm(pvr_rec_t *pvrr);
 static void pvrr_subscription_callback(struct th_subscription *s,
                                       subscription_event_t event,
@@ -156,15 +155,14 @@ pvr_free(pvr_rec_t *pvrr)
 
 
 static void
-pvr_unrecord(pvr_rec_t *pvrr)
+pvr_abort(pvr_rec_t *pvrr)
 {
-  if(pvrr->pvrr_status == HTSTV_PVR_STATUS_SCHEDULED) {
-    pvr_free(pvrr);
-  } else {
-    pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED;
-    pvrr_fsm(pvrr);
-  }
-  
+  if(pvrr->pvrr_status != HTSTV_PVR_STATUS_RECORDING)
+    return;
+
+  pvrr->pvrr_error = HTSTV_PVR_STATUS_ABORTED;
+  pvrr_fsm(pvrr);
+
   pvr_database_save(pvrr);
   clients_send_ref(-1);
 }
@@ -225,31 +223,38 @@ pvr_event_record_op(th_channel_t *ch, event_t *e, recop_t op)
       break;
   }
 
-  if(pvrr != NULL) {
+  if(pvrr != NULL && op == RECOP_CLEAR) {
     switch(pvrr->pvrr_status) {
     case HTSTV_PVR_STATUS_ABORTED:
     case HTSTV_PVR_STATUS_NO_TRANSPONDER:
     case HTSTV_PVR_STATUS_FILE_ERROR:
     case HTSTV_PVR_STATUS_DISK_FULL:
     case HTSTV_PVR_STATUS_BUFFER_ERROR:
+    case HTSTV_PVR_STATUS_SCHEDULED:
       pvr_database_erase(pvrr);
       pvr_free(pvrr);
-      pvrr = NULL;
-      break;
+      return;
     }
   }
 
   switch(op) {
-  case RECOP_TOGGLE:
-    if(pvrr != NULL) {
-      pvr_unrecord(pvrr);
-      return;
+  case RECOP_CLEAR:
+    if(pvrr != NULL) switch(pvrr->pvrr_status) {
+    case HTSTV_PVR_STATUS_ABORTED:
+    case HTSTV_PVR_STATUS_NO_TRANSPONDER:
+    case HTSTV_PVR_STATUS_FILE_ERROR:
+    case HTSTV_PVR_STATUS_DISK_FULL:
+    case HTSTV_PVR_STATUS_BUFFER_ERROR:
+    case HTSTV_PVR_STATUS_SCHEDULED:
+      pvr_database_erase(pvrr);
+      pvr_free(pvrr);
+      break;
     }
-    break;
+    return;
 
-  case RECOP_CANCEL:
+  case RECOP_ABORT:
     if(pvrr != NULL)
-      pvr_unrecord(pvrr);
+      pvr_abort(pvrr);
     return;
 
   case RECOP_ONCE:
@@ -1106,8 +1111,8 @@ static struct strtab recoptab[] = {
   { "once",   RECOP_ONCE },
   { "daily",  RECOP_DAILY },
   { "weekly", RECOP_WEEKLY },
-  { "cancel", RECOP_CANCEL },
-  { "toggle", RECOP_TOGGLE }
+  { "abort",  RECOP_ABORT },
+  { "clear",  RECOP_CLEAR }
 };
 
 int
diff --git a/pvr.h b/pvr.h
index b82f24dc52e45e3c19a52793f3bcd69a6c66f76b..ccfd64101af56102285f749aa9724cd72e3cdb38 100644 (file)
--- a/pvr.h
+++ b/pvr.h
@@ -92,11 +92,11 @@ typedef struct pvr_rec {
 
 
 typedef enum {
-  RECOP_TOGGLE,
   RECOP_ONCE,
   RECOP_DAILY,
   RECOP_WEEKLY,
-  RECOP_CANCEL,
+  RECOP_ABORT,
+  RECOP_CLEAR,
 } recop_t;
 
 void pvr_init(void);