struct dvr_autorec_entry_queue autorec_entries;
-static void dvr_autorec_changed(dvr_autorec_entry_t *dae);
+static void dvr_autorec_changed(dvr_autorec_entry_t *dae, int purge);
/**
- *
+ * Unlink - and remove any unstarted
*/
static void
dvr_autorec_purge_spawns(dvr_autorec_entry_t *dae)
while((de = LIST_FIRST(&dae->dae_spawns)) != NULL) {
LIST_REMOVE(de, de_autorec_link);
de->de_autorec = NULL;
- dvr_entry_cancel(de);
+ if (de->de_sched_state == DVR_SCHEDULED)
+ dvr_entry_cancel(de);
+ else
+ dvr_entry_save(de);
}
}
dae->dae_serieslink->getref(dae->dae_serieslink);
}
if (!dvr_autorec_in_init)
- dvr_autorec_changed(dae);
+ dvr_autorec_changed(dae, 1);
return autorec_record_build(dae);
}
{
dvr_autorec_entry_t *dae;
TAILQ_FOREACH(dae, &autorec_entries, dae_link) {
- dvr_autorec_changed(dae);
+ dvr_autorec_changed(dae, 0);
}
}
notify_reload("autorec");
- dvr_autorec_changed(dae);
+ dvr_autorec_changed(dae, 1);
}
void
*
*/
static void
-dvr_autorec_changed(dvr_autorec_entry_t *dae)
+dvr_autorec_changed(dvr_autorec_entry_t *dae, int purge)
{
channel_t *ch;
epg_broadcast_t *e;
- dvr_autorec_purge_spawns(dae);
+ if (purge)
+ dvr_autorec_purge_spawns(dae);
RB_FOREACH(ch, &channel_name_tree, ch_name_link) {
RB_FOREACH(e, &ch->ch_epg_schedule, sched_link) {
struct dvr_config_list dvrconfigs;
struct dvr_entry_list dvrentries;
-static void dvr_entry_save(dvr_entry_t *de);
-
static void dvr_timer_expire(void *aux);
static void dvr_timer_start_recording(void *aux);
/**
*
*/
-static void
+void
dvr_entry_save(dvr_entry_t *de)
{
htsmsg_t *m = htsmsg_create_map();