de->de_bcast->putref((epg_object_t*)de->de_bcast);
notify_delayed(id, "epg", "dvr_delete");
de->de_bcast = NULL;
+ de->de_dvb_eid = 0;
}
if (bcast) {
bcast->getref((epg_object_t*)bcast);
const char *title1, *title2;
char buf[64];
+ /* Wrong length (+/-20%) */
+ t1 = de->de_stop - de->de_start;
+ t2 = e->stop - e->start;
+ if (abs(t2 - t1) > (t1 / 5))
+ return 0;
+
/* Matching ID */
if (de->de_dvb_eid && eid && de->de_dvb_eid == eid)
return 1;
if (!(title2 = lang_str_get(de->de_title, NULL)))
return 0;
- /* Wrong length (+/-20%) */
- t1 = de->de_stop - de->de_start;
- t2 = e->stop - e->start;
- if ( abs(t2 - t1) > (t1 / 5) )
- return 0;
-
/* Outside of window */
if ((int64_t)llabs(e->start - de->de_start) > time_window)
return 0;
assert(new_e != NULL);
/* Ignore */
- if ( e == new_e ) return;
+ if (e == new_e) return;
/* Existing entry */
if ((de = dvr_entry_find_by_event(e))) {
/* Find match */
} else {
+
RB_FOREACH(e, &e->channel->ch_epg_schedule, sched_link) {
if (dvr_entry_fuzzy_match(de, e, e->dvb_eid,
de->de_config->dvr_update_window)) {
epg_broadcast_get_title(e, NULL),
channel_get_name(e->channel),
e->start, e->stop);
- dvr_entry_assign_broadcast(de, e);
- _dvr_entry_update(de, -1, e, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, DVR_PRIO_NOTSET, 0, 0);
+ _dvr_entry_update(de, -1, e, NULL, NULL, NULL, NULL, NULL,
+ 0, 0, 0, 0, DVR_PRIO_NOTSET, 0, 0);
return;
}
}
dvr_entry_assign_broadcast(de, NULL);
+
}
}
}
-void dvr_event_updated ( epg_broadcast_t *e )
+/**
+ * Used to notify the DVR that an event has been removed
+ */
+void
+dvr_event_removed(epg_broadcast_t *e)
+{
+ dvr_entry_t *de = dvr_entry_find_by_event(e);
+ if (de) {
+ dvr_entry_assign_broadcast(de, NULL);
+ dvr_entry_save(de);
+ }
+}
+
+/**
+ * Event was updated in epg
+ */
+void dvr_event_updated(epg_broadcast_t *e)
{
dvr_entry_t *de;
de = dvr_entry_find_by_event(e);
epg_broadcast_get_title(e, NULL),
channel_get_name(e->channel),
e->start, e->stop);
- dvr_entry_assign_broadcast(de, e);
_dvr_entry_update(de, -1, e, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, DVR_PRIO_NOTSET, 0, 0);
break;
}
* *************************************************************************/
static void _epg_channel_rem_broadcast
- ( channel_t *ch, epg_broadcast_t *ebc, epg_broadcast_t *new )
+ ( channel_t *ch, epg_broadcast_t *ebc, epg_broadcast_t *ebc_new )
{
- if (new) dvr_event_replaced(ebc, new);
RB_REMOVE(&ch->ch_epg_schedule, ebc, sched_link);
if (ch->ch_epg_now == ebc) ch->ch_epg_now = NULL;
if (ch->ch_epg_next == ebc) ch->ch_epg_next = NULL;
+ if (ebc_new) {
+ dvr_event_replaced(ebc, ebc_new);
+ } else {
+ dvr_event_removed(ebc);
+ }
_epg_object_putref(ebc);
}