Issue #1459 - fix removal of all autorec recordings on startup

There were 2 issues here:
- recent changes meant that recordings were purged on every startup
- long standing issue meant complete recordings were removed on
  removal of an autorec rule (which I don't think was intended).
This commit is contained in:
Adam Sutton 2012-12-27 00:48:14 +00:00
parent dd379084c0
commit d23f60b031
3 changed files with 15 additions and 11 deletions

View file

@ -247,6 +247,8 @@ void dvr_config_delete(const char *name);
void dvr_entry_notify(dvr_entry_t *de); void dvr_entry_notify(dvr_entry_t *de);
void dvr_entry_save(dvr_entry_t *de);
const char *dvr_entry_status(dvr_entry_t *de); const char *dvr_entry_status(dvr_entry_t *de);
const char *dvr_entry_schedstatus(dvr_entry_t *de); const char *dvr_entry_schedstatus(dvr_entry_t *de);

View file

@ -42,10 +42,10 @@ static int dvr_autorec_in_init = 0;
struct dvr_autorec_entry_queue autorec_entries; 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 static void
dvr_autorec_purge_spawns(dvr_autorec_entry_t *dae) dvr_autorec_purge_spawns(dvr_autorec_entry_t *dae)
@ -55,7 +55,10 @@ dvr_autorec_purge_spawns(dvr_autorec_entry_t *dae)
while((de = LIST_FIRST(&dae->dae_spawns)) != NULL) { while((de = LIST_FIRST(&dae->dae_spawns)) != NULL) {
LIST_REMOVE(de, de_autorec_link); LIST_REMOVE(de, de_autorec_link);
de->de_autorec = NULL; de->de_autorec = NULL;
dvr_entry_cancel(de); if (de->de_sched_state == DVR_SCHEDULED)
dvr_entry_cancel(de);
else
dvr_entry_save(de);
} }
} }
@ -425,7 +428,7 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values,
dae->dae_serieslink->getref(dae->dae_serieslink); dae->dae_serieslink->getref(dae->dae_serieslink);
} }
if (!dvr_autorec_in_init) if (!dvr_autorec_in_init)
dvr_autorec_changed(dae); dvr_autorec_changed(dae, 1);
return autorec_record_build(dae); return autorec_record_build(dae);
} }
@ -478,7 +481,7 @@ dvr_autorec_update(void)
{ {
dvr_autorec_entry_t *dae; dvr_autorec_entry_t *dae;
TAILQ_FOREACH(dae, &autorec_entries, dae_link) { TAILQ_FOREACH(dae, &autorec_entries, dae_link) {
dvr_autorec_changed(dae); dvr_autorec_changed(dae, 0);
} }
} }
@ -537,7 +540,7 @@ _dvr_autorec_add(const char *config_name,
notify_reload("autorec"); notify_reload("autorec");
dvr_autorec_changed(dae); dvr_autorec_changed(dae, 1);
} }
void void
@ -606,12 +609,13 @@ void dvr_autorec_check_serieslink(epg_serieslink_t *s)
* *
*/ */
static void static void
dvr_autorec_changed(dvr_autorec_entry_t *dae) dvr_autorec_changed(dvr_autorec_entry_t *dae, int purge)
{ {
channel_t *ch; channel_t *ch;
epg_broadcast_t *e; 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(ch, &channel_name_tree, ch_name_link) {
RB_FOREACH(e, &ch->ch_epg_schedule, sched_link) { RB_FOREACH(e, &ch->ch_epg_schedule, sched_link) {

View file

@ -37,8 +37,6 @@ int dvr_iov_max;
struct dvr_config_list dvrconfigs; struct dvr_config_list dvrconfigs;
struct dvr_entry_list dvrentries; 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_expire(void *aux);
static void dvr_timer_start_recording(void *aux); static void dvr_timer_start_recording(void *aux);
@ -573,7 +571,7 @@ dvr_db_load(void)
/** /**
* *
*/ */
static void void
dvr_entry_save(dvr_entry_t *de) dvr_entry_save(dvr_entry_t *de)
{ {
htsmsg_t *m = htsmsg_create_map(); htsmsg_t *m = htsmsg_create_map();