From: Jaroslav Kysela Date: Sun, 25 Oct 2015 17:02:41 +0000 (+0100) Subject: DVR: rerecord - don't call rerecord when user deleted child X-Git-Tag: v4.2.1~1779 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ed87f98f400cbd9ede7359523c7038f903b6aa5;p=thirdparty%2Ftvheadend.git DVR: rerecord - don't call rerecord when user deleted child --- diff --git a/src/api/api_dvr.c b/src/api/api_dvr.c index 943564567..6586cd22b 100644 --- a/src/api/api_dvr.c +++ b/src/api/api_dvr.c @@ -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 diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 78495f3cc..aee3e8781 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -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); diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 390eb6236..2c9ef6c25 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -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); } } } diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 3ae2f20ed..fa814c725 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -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); } /** diff --git a/src/dvr/dvr_timerec.c b/src/dvr/dvr_timerec.c index 4d539a72b..58aff0dc9 100644 --- a/src/dvr/dvr_timerec.c +++ b/src/dvr/dvr_timerec.c @@ -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); } diff --git a/src/htsp_server.c b/src/htsp_server.c index efe3bfb0a..79af410d8 100644 --- a/src/htsp_server.c +++ b/src/htsp_server.c @@ -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(); diff --git a/src/webui/simpleui.c b/src/webui/simpleui.c index f629c4289..f7fd54dd2 100644 --- a/src/webui/simpleui.c +++ b/src/webui/simpleui.c @@ -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, ""); @@ -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) {