From: Jaroslav Kysela Date: Sat, 31 Oct 2015 20:56:12 +0000 (+0100) Subject: DVR: improve EPG running marking - mark all other events and not running X-Git-Tag: v4.2.1~1713 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3d5d11616a8efd60a14bf609042146baa3f513c1;p=thirdparty%2Ftvheadend.git DVR: improve EPG running marking - mark all other events and not running --- diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 06129a72b..ac255079f 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -1546,12 +1546,36 @@ void dvr_event_updated(epg_broadcast_t *e) } } +/** + * Event running status is updated + */ +static void dvr_entry_not_running(dvr_entry_t *de, + const char *srcname, + const char *srctitle) +{ + if (!de->de_running_stop || + de->de_running_start > de->de_running_stop) + tvhdebug("dvr", "dvr entry %s %s %s on %s - EPG marking stop", + idnode_uuid_as_sstr(&de->de_id), srcname, srctitle, + channel_get_name(de->de_channel)); + de->de_running_stop = dispatch_clock; + if (de->de_sched_state == DVR_RECORDING && de->de_running_start) { + if (dvr_entry_get_stop_time(de) > dispatch_clock) { + de->de_dont_reschedule = 1; + dvr_stop_recording(de, SM_CODE_OK, 0, 0); + tvhdebug("dvr", "dvr entry %s %s %s on %s - EPG stop", + idnode_uuid_as_sstr(&de->de_id), srcname, srctitle, + channel_get_name(de->de_channel)); + } + } +} + /** * Event running status is updated */ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, int running) { - dvr_entry_t *de; + dvr_entry_t *de, *de2; if (esrc != EPG_SOURCE_EIT) return; @@ -1562,7 +1586,18 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, int running) de->de_running_start = de->de_running_stop = 0; return; } - if (running) { + if (!running) { + dvr_entry_not_running(de, "event", epg_broadcast_get_title(e, NULL)); + return; + } + de2 = de; + assert(e->channel == de->de_channel); + LIST_FOREACH(de, &de->de_channel->ch_dvrs, de_channel_link) { + if (de != de2) { + dvr_entry_not_running(de, "other running event", + epg_broadcast_get_title(e, NULL)); + continue; + } if (!de->de_running_start) tvhdebug("dvr", "dvr entry %s event %s on %s - EPG marking start", idnode_uuid_as_sstr(&de->de_id), @@ -1577,24 +1612,6 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, int running) epg_broadcast_get_title(e, NULL), channel_get_name(e->channel)); } - } else { - if (!de->de_running_stop || - de->de_running_start > de->de_running_stop) - tvhdebug("dvr", "dvr entry %s event %s on %s - EPG marking stop", - idnode_uuid_as_sstr(&de->de_id), - epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); - de->de_running_stop = dispatch_clock; - if (de->de_sched_state == DVR_RECORDING && de->de_running_start) { - if (dvr_entry_get_stop_time(de) > dispatch_clock) { - de->de_dont_reschedule = 1; - dvr_stop_recording(de, SM_CODE_OK, 0, 0); - tvhdebug("dvr", "dvr entry %s event %s on %s - EPG stop", - idnode_uuid_as_sstr(&de->de_id), - epg_broadcast_get_title(e, NULL), - channel_get_name(e->channel)); - } - } } }