continue;
}
if (running && de->de_dvb_eid == e->dvb_eid) {
- if (!de->de_running_start)
+ if (!de->de_running_start) {
tvhdebug("dvr", "dvr entry %s event %s on %s - EPG marking start",
idnode_uuid_as_sstr(&de->de_id),
epg_broadcast_get_title(e, NULL),
channel_get_name(e->channel));
- de->de_running_start = dispatch_clock;
+ de->de_running_start = dispatch_clock;
+ }
if (dvr_entry_get_start_time(de) > dispatch_clock) {
de->de_start = dispatch_clock;
dvr_entry_set_timer(de);
channel_get_name(e->channel));
}
} else if ((!running && de->de_dvb_eid == e->dvb_eid) || running) {
+ /*
+ * make checking more robust
+ * sometimes, the running bits are parsed randomly for a few moments
+ * so don't expect that the broacasting has only 5 seconds
+ */
+ if (de->de_running_start + 5 > dispatch_clock)
+ continue;
+
srcname = de->de_dvb_eid == e->dvb_eid ? "event" : "other running event";
if (!de->de_running_stop ||
de->de_running_start > de->de_running_stop) {
}
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",
+ 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,
epg_broadcast_get_title(e, NULL),
channel_get_name(de->de_channel));
- }
}
}
}
{
channel_t *ch;
epg_broadcast_t *now;
+ int orunning = broadcast->running;
broadcast->running = !!running;
+ ch = broadcast->channel;
+ now = ch ? ch->ch_epg_now : NULL;
if (!running) {
- broadcast->stop = dispatch_clock - 1;
+ if (now == broadcast && orunning == broadcast->running)
+ broadcast->stop = dispatch_clock - 1;
} else {
- ch = broadcast->channel;
- now = ch ? ch->ch_epg_now : NULL;
if (broadcast != now && now) {
now->running = 0;
- dvr_event_running(ch->ch_epg_now, esrc, 0);
+ dvr_event_running(now, esrc, 0);
}
}
dvr_event_running(broadcast, esrc, running);