}
/**
- * Used to notify the DVR that an event has been removed from the EPG
+ * Used to notify the DVR that an event has been replaced in the EPG
*/
void
-dvr_event_cancelled(event_t *e)
+dvr_event_replaced(event_t *e, event_t *new_e)
{
- dvr_entry_t *de;
+ dvr_entry_t *de, *ude;
de = dvr_entry_find_by_event(e);
if (de != NULL) {
- if (de->de_sched_state == DVR_SCHEDULED)
+ ude = dvr_entry_find_by_event_fuzzy(new_e);
+ if (ude == NULL && de->de_sched_state == DVR_SCHEDULED)
dvr_entry_cancel(de);
+ else
+ dvr_entry_update(de, new_e->e_title, new_e->e_start, new_e->e_stop);
}
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
tvhlog(LOG_DEBUG, "epg",
"Removing overlapping event instance %s from EPG", p->e_title);
- dvr_event_cancelled(p);
+ dvr_event_replaced(p, e);
epg_remove_event_from_channel(ch, p);
} else if((p = RB_PREV(p, e_channel_link)) != NULL) {
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
tvhlog(LOG_DEBUG, "epg",
"Removing overlapping event instance %s from EPG", p->e_title);
- dvr_event_cancelled(p);
+ dvr_event_replaced(p, e);
epg_remove_event_from_channel(ch, p);
}
}
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
tvhlog(LOG_DEBUG, "epg",
"Removing overlapping event instance %s from EPG", n->e_title);
- dvr_event_cancelled(n);
+ dvr_event_replaced(n, e);
epg_remove_event_from_channel(ch, n);
} else if((n = RB_NEXT(n, e_channel_link)) != NULL) {
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
tvhlog(LOG_DEBUG, "epg",
"Removing overlapping event instance %s from EPG", n->e_title);
- dvr_event_cancelled(n);
+ dvr_event_replaced(n, e);
epg_remove_event_from_channel(ch, n);
}
}