]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVR: rerecord - don't call rerecord when user deleted child
authorJaroslav Kysela <perex@perex.cz>
Sun, 25 Oct 2015 17:02:41 +0000 (18:02 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 25 Oct 2015 17:02:41 +0000 (18:02 +0100)
src/api/api_dvr.c
src/dvr/dvr.h
src/dvr/dvr_autorec.c
src/dvr/dvr_db.c
src/dvr/dvr_timerec.c
src/htsp_server.c
src/webui/simpleui.c

index 943564567898581991cfac0730c5050f94707fed..6586cd22bd0ac2351d58730554df16fc88027db6 100644 (file)
@@ -270,7 +270,7 @@ api_dvr_entry_stop
 static void
 api_dvr_cancel(access_t *perm, idnode_t *self)
 {
-  dvr_entry_cancel((dvr_entry_t *)self);
+  dvr_entry_cancel((dvr_entry_t *)self, 0);
 }
 
 static int
index 78495f3cce43a7b617e364522d0421bfc2910296..aee3e87812919803e5d1da3d578ce28e9332c015 100644 (file)
@@ -514,13 +514,13 @@ int64_t dvr_get_filesize(dvr_entry_t *de);
 
 dvr_entry_t *dvr_entry_stop(dvr_entry_t *de);
 
-dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de);
+dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de, int rerecord);
 
 void dvr_entry_dec_ref(dvr_entry_t *de);
 
 void dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched);
 
-void dvr_entry_cancel_delete(dvr_entry_t *de);
+void dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord);
 
 htsmsg_t *dvr_entry_class_mc_list (void *o, const char *lang);
 htsmsg_t *dvr_entry_class_pri_list(void *o, const char *lang);
index 390eb6236ddba8e2cc50a5f35b9c2888eee524ad..2c9ef6c25716a74dfc2c47b6bd8c7dcf4f933abf 100644 (file)
@@ -63,7 +63,7 @@ dvr_autorec_purge_spawns(dvr_autorec_entry_t *dae, int del, int disabled)
           bcast[i++] = de->de_bcast;
         }
       }
-      dvr_entry_cancel(de);
+      dvr_entry_cancel(de, 0);
     } else
       dvr_entry_save(de);
   }
@@ -101,7 +101,7 @@ dvr_autorec_completed(dvr_entry_t *de, int error_code)
     if (de_prev) {
       tvhinfo("dvr", "autorec %s removing recordings %s (allowed count %u total %u)",
               dae->dae_name, idnode_uuid_as_sstr(&de_prev->de_id), dae->dae_max_count, total);
-      dvr_entry_cancel_delete(de_prev);
+      dvr_entry_cancel_delete(de_prev, 0);
     }
   }
 }
index 3ae2f20ed61147cd4942392633b9526f705c7323..fa814c72546780ca74596f1640d114f108043abb 100644 (file)
@@ -477,13 +477,6 @@ dvr_usage_count(access_t *aa)
   return used;
 }
 
-static void
-dvr_entry_set_timer_cb(void *aux)
-{
-  dvr_entry_t *de = aux;
-  dvr_entry_set_timer(de);
-}
-
 static void
 dvr_entry_set_timer(dvr_entry_t *de)
 {
@@ -873,12 +866,12 @@ dvr_entry_rerecord(dvr_entry_t *de)
       if (fsize1 / 5 < fsize2 / 6) {
         goto not_so_good;
       } else {
-        dvr_entry_cancel_delete(de2);
+        dvr_entry_cancel_delete(de2, 1);
       }
     } else if (de->de_sched_state == DVR_COMPLETED) {
       if(dvr_get_filesize(de) == -1) {
 delete_me:
-        dvr_entry_cancel_delete(de);
+        dvr_entry_cancel_delete(de, 0);
         dvr_entry_rerecord(de2);
         return 1;
       }
@@ -1106,8 +1099,6 @@ dvr_entry_dec_ref(dvr_entry_t *de)
 static void
 dvr_entry_destroy(dvr_entry_t *de, int delconf)
 {
-  dvr_entry_t *parent;
-
   if (delconf)
     hts_settings_remove("dvr/log/%s", idnode_uuid_as_sstr(&de->de_id));
 
@@ -1127,10 +1118,8 @@ dvr_entry_destroy(dvr_entry_t *de, int delconf)
   LIST_REMOVE(de, de_global_link);
   de->de_channel = NULL;
 
-  parent = de->de_parent;
-  if (parent)
-    if (dvr_entry_change_parent_child(NULL, de, de, delconf))
-      gtimer_arm(&parent->de_timer, dvr_entry_set_timer_cb, parent, 0);
+  if (de->de_parent)
+    dvr_entry_change_parent_child(NULL, de, de, delconf);
   if (de->de_child)
     dvr_entry_change_parent_child(de, NULL, de, delconf);
 
@@ -1562,7 +1551,7 @@ dvr_timer_start_recording(void *aux)
 
   // if duplicate, then delete it now, don't record!
   if (_dvr_duplicate_event(de)) {
-    dvr_entry_cancel_delete(de);
+    dvr_entry_cancel_delete(de, 1);
     return;
   }
 
@@ -1645,7 +1634,7 @@ dvr_entry_class_save(idnode_t *self)
 static void
 dvr_entry_class_delete(idnode_t *self)
 {
-  dvr_entry_cancel_delete((dvr_entry_t *)self);
+  dvr_entry_cancel_delete((dvr_entry_t *)self, 0);
 }
 
 static int
@@ -2898,18 +2887,17 @@ dvr_entry_stop(dvr_entry_t *de)
  *
  */
 dvr_entry_t *
-dvr_entry_cancel(dvr_entry_t *de)
+dvr_entry_cancel(dvr_entry_t *de, int rerecord)
 {
-  switch(de->de_sched_state) {
-  case DVR_SCHEDULED:
-    dvr_entry_destroy(de, 1);
-    return NULL;
+  dvr_entry_t *parent = de->de_parent;
 
+  switch(de->de_sched_state) {
   case DVR_RECORDING:
     de->de_dont_reschedule = 1;
     dvr_stop_recording(de, SM_CODE_ABORTED, 1, 0);
     return de;
 
+  case DVR_SCHEDULED:
   case DVR_COMPLETED:
   case DVR_MISSED_TIME:
   case DVR_NOSTATE:
@@ -2919,19 +2907,20 @@ dvr_entry_cancel(dvr_entry_t *de)
   default:
     abort();
   }
+
+  if (rerecord && parent)
+    dvr_entry_rerecord(parent);
 }
 
 /**
  *
  */
 void
-dvr_entry_cancel_delete(dvr_entry_t *de)
+dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord)
 {
-  switch(de->de_sched_state) {
-  case DVR_SCHEDULED:
-    dvr_entry_destroy(de, 1);
-    break;
+  dvr_entry_t *parent = de->de_parent;
 
+  switch(de->de_sched_state) {
   case DVR_RECORDING:
     de->de_dont_reschedule = 1;
     dvr_stop_recording(de, SM_CODE_ABORTED, 1, 0);
@@ -2940,6 +2929,7 @@ dvr_entry_cancel_delete(dvr_entry_t *de)
     dvr_entry_destroy(de, 1);
     break;
 
+  case DVR_SCHEDULED:
   case DVR_MISSED_TIME:
   case DVR_NOSTATE:
     dvr_entry_destroy(de, 1);
@@ -2948,6 +2938,9 @@ dvr_entry_cancel_delete(dvr_entry_t *de)
   default:
     abort();
   }
+
+  if (rerecord && parent)
+    dvr_entry_rerecord(parent);
 }
 
 /**
index 4d539a72b3ac513d06452386847da284ffb55b8b..58aff0dc980a7dbf8cc8f933c9ded381d88d3406 100644 (file)
@@ -75,7 +75,7 @@ dvr_timerec_purge_spawn(dvr_timerec_entry_t *dte, int delconf)
     de->de_timerec = NULL;
     if (delconf) {
       if (de->de_sched_state == DVR_SCHEDULED)
-        dvr_entry_cancel(de);
+        dvr_entry_cancel(de, 0);
       else
         dvr_entry_save(de);
     }
index efe3bfb0a6b3817434b7bc17e2df3c41f599d666..79af410d89ef9683f145f0c36938648f7a583464 100644 (file)
@@ -1685,7 +1685,7 @@ htsp_method_cancelDvrEntry(htsp_connection_t *htsp, htsmsg_t *in)
   if (!htsp_user_access_channel(htsp, de->de_channel))
     return htsp_error("User does not have access");
 
-  dvr_entry_cancel(de);
+  dvr_entry_cancel(de, 0);
 
   //create response
   out = htsmsg_create_map();
@@ -1717,7 +1717,7 @@ htsp_method_deleteDvrEntry(htsp_connection_t *htsp, htsmsg_t *in)
   if (!htsp_user_access_channel(htsp, de->de_channel))
     return htsp_error("User does not have access");
 
-  dvr_entry_cancel_delete(de);
+  dvr_entry_cancel_delete(de, 0);
 
   //create response
   out = htsmsg_create_map();
index f629c4289b00d626624e18adca6d4966ac28bdbc..f7fd54dd23cae2028279ed3042b835d95ff17603 100644 (file)
@@ -321,7 +321,7 @@ page_einfo(http_connection_t *hc, const char *remain, void *opaque)
                                    hc->hc_representative ?: NULL, NULL,
                                   DVR_PRIO_NORMAL, 0, 0, "simpleui");
   } else if(de != NULL && (http_arg_get(&hc->hc_req_args, "cancel")) != NULL) {
-    de = dvr_entry_cancel(de);
+    de = dvr_entry_cancel(de, 0);
   }
 
   htsbuf_qprintf(hq, "<html>");
@@ -402,9 +402,9 @@ page_pvrinfo(http_connection_t *hc, const char *remain, void *opaque)
     return 404;
   }
   if((http_arg_get(&hc->hc_req_args, "clear")) != NULL) {
-    de = dvr_entry_cancel(de);
+    de = dvr_entry_cancel(de, 0);
   } else if((http_arg_get(&hc->hc_req_args, "cancel")) != NULL) {
-    de = dvr_entry_cancel(de);
+    de = dvr_entry_cancel(de, 0);
   }
 
   if(de == NULL) {