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);
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)
{
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;
}
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));
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);
// 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;
}
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
*
*/
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:
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);
dvr_entry_destroy(de, 1);
break;
+ case DVR_SCHEDULED:
case DVR_MISSED_TIME:
case DVR_NOSTATE:
dvr_entry_destroy(de, 1);
default:
abort();
}
+
+ if (rerecord && parent)
+ dvr_entry_rerecord(parent);
}
/**
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>");
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) {