Try to avoid rescheduling DVR entries

Patch by  Chris Dekter

Fixes #179
This commit is contained in:
Andreas Öman 2011-08-30 23:29:29 +02:00
parent 940b107159
commit 0c1c1cfbd9
3 changed files with 28 additions and 3 deletions

View file

@ -258,6 +258,8 @@ dvr_entry_t *dvr_entry_find_by_id(int id);
dvr_entry_t *dvr_entry_find_by_event(event_t *e);
dvr_entry_t *dvr_entry_find_by_event_fuzzy(event_t *e);
off_t dvr_get_filesize(dvr_entry_t *de);
dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de);

View file

@ -479,10 +479,17 @@ void
dvr_autorec_check_event(event_t *e)
{
dvr_autorec_entry_t *dae;
dvr_entry_t *existingde;
TAILQ_FOREACH(dae, &autorec_entries, dae_link)
if(autorec_cmp(dae, e))
dvr_entry_create_by_autorec(e, dae);
if(autorec_cmp(dae, e)) {
existingde = dvr_entry_find_by_event_fuzzy(e);
if (existingde != NULL) {
tvhlog(LOG_DEBUG, "dvr", "Updating existing DVR entry for %s", e->e_title);
dvr_entry_update(existingde, e->e_title, e->e_start, e->e_stop);
} else
dvr_entry_create_by_autorec(e, dae);
}
}
/**

View file

@ -625,7 +625,6 @@ dvr_entry_update(dvr_entry_t *de, const char* de_title, int de_start, int de_sto
htsp_dvr_entry_update(de);
dvr_entry_notify(de);
tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": Updated Timer", de->de_title, de->de_channel->ch_name);
return de;
@ -721,6 +720,23 @@ dvr_entry_find_by_event(event_t *e)
return NULL;
}
/**
* Find event with same title starting and ending around same time
* on same channel
*/
dvr_entry_t *
dvr_entry_find_by_event_fuzzy(event_t *e)
{
dvr_entry_t *de;
LIST_FOREACH(de, &e->e_channel->ch_dvrs, de_channel_link)
if(strcmp(de->de_title, e->e_title) == 0) {
if ((abs(de->de_start - e->e_start) < 600) && (abs(de->de_stop - e->e_stop) < 600))
return de;
}
return NULL;
}
/**
*
*/