Improved logic when an event is replaced in EPG
This is needed to avoid removing DVR entries that are not based on an AutoRec
This commit is contained in:
parent
f924187bfc
commit
e6159c4373
3 changed files with 12 additions and 9 deletions
|
@ -254,7 +254,7 @@ void dvr_rec_subscribe(dvr_entry_t *de);
|
||||||
|
|
||||||
void dvr_rec_unsubscribe(dvr_entry_t *de, int stopcode);
|
void dvr_rec_unsubscribe(dvr_entry_t *de, int stopcode);
|
||||||
|
|
||||||
void dvr_event_cancelled(event_t *e);
|
void dvr_event_replaced(event_t *e, event_t *new_e);
|
||||||
|
|
||||||
dvr_entry_t *dvr_entry_find_by_id(int id);
|
dvr_entry_t *dvr_entry_find_by_id(int id);
|
||||||
|
|
||||||
|
|
|
@ -631,17 +631,20 @@ dvr_entry_update(dvr_entry_t *de, const char* de_title, int de_start, int de_sto
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
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);
|
de = dvr_entry_find_by_event(e);
|
||||||
if (de != NULL) {
|
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);
|
dvr_entry_cancel(de);
|
||||||
|
else
|
||||||
|
dvr_entry_update(de, new_e->e_title, new_e->e_start, new_e->e_stop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -424,13 +424,13 @@ epg_erase_duplicates(event_t *e, channel_t *ch) {
|
||||||
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
|
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
|
||||||
tvhlog(LOG_DEBUG, "epg",
|
tvhlog(LOG_DEBUG, "epg",
|
||||||
"Removing overlapping event instance %s from EPG", p->e_title);
|
"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);
|
epg_remove_event_from_channel(ch, p);
|
||||||
} else if((p = RB_PREV(p, e_channel_link)) != NULL) {
|
} else if((p = RB_PREV(p, e_channel_link)) != NULL) {
|
||||||
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
|
if(p->e_dvb_id == dvb_id || epg_event_cmp_overlap(p, e)) {
|
||||||
tvhlog(LOG_DEBUG, "epg",
|
tvhlog(LOG_DEBUG, "epg",
|
||||||
"Removing overlapping event instance %s from EPG", p->e_title);
|
"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);
|
epg_remove_event_from_channel(ch, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,13 +440,13 @@ epg_erase_duplicates(event_t *e, channel_t *ch) {
|
||||||
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
|
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
|
||||||
tvhlog(LOG_DEBUG, "epg",
|
tvhlog(LOG_DEBUG, "epg",
|
||||||
"Removing overlapping event instance %s from EPG", n->e_title);
|
"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);
|
epg_remove_event_from_channel(ch, n);
|
||||||
} else if((n = RB_NEXT(n, e_channel_link)) != NULL) {
|
} else if((n = RB_NEXT(n, e_channel_link)) != NULL) {
|
||||||
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
|
if(n->e_dvb_id == dvb_id || epg_event_cmp_overlap(n, e)) {
|
||||||
tvhlog(LOG_DEBUG, "epg",
|
tvhlog(LOG_DEBUG, "epg",
|
||||||
"Removing overlapping event instance %s from EPG", n->e_title);
|
"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);
|
epg_remove_event_from_channel(ch, n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue