Fix #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).
(cherry picked from commit d23f60b031)
This commit is contained in:
Adam Sutton 2012-12-27 00:48:14 +00:00
parent 661124c7a3
commit faee94bcb3
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_save(dvr_entry_t *de);
const char *dvr_entry_status(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;
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)
@ -55,7 +55,10 @@ 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);
}
}
@ -425,7 +428,7 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values,
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);
}
@ -478,7 +481,7 @@ dvr_autorec_update(void)
{
dvr_autorec_entry_t *dae;
TAILQ_FOREACH(dae, &autorec_entries, dae_link) {
dvr_autorec_changed(dae);
dvr_autorec_changed(dae, 0);
}
}
@ -539,7 +542,7 @@ _dvr_autorec_add(const char *config_name,
htsmsg_add_u32(m, "reload", 1);
notify_by_msg("autorec", m);
dvr_autorec_changed(dae);
dvr_autorec_changed(dae, 1);
}
void
@ -608,12 +611,13 @@ void dvr_autorec_check_serieslink(epg_serieslink_t *s)
*
*/
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) {

View file

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