}
}
-/**
- *
- */
static void
-dvr_entry_link(dvr_entry_t *de)
+dvr_entry_set_timer(dvr_entry_t *de)
{
time_t now, preamble;
dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name);
- de->de_refcnt = 1;
-
- LIST_INSERT_HEAD(&dvrentries, de, de_global_link);
-
time(&now);
preamble = de->de_start - (60 * de->de_start_extra) - 30;
} else if (de->de_channel) {
de->de_sched_state = DVR_SCHEDULED;
+ tvhtrace("dvr", "entry timer scheduled for %"PRItime_t, preamble);
gtimer_arm_abs(&de->de_timer, dvr_timer_start_recording, de, preamble);
} else {
de->de_sched_state = DVR_NOSTATE;
}
+}
+
+/**
+ *
+ */
+static void
+dvr_entry_link(dvr_entry_t *de)
+{
+ de->de_refcnt = 1;
+
+ LIST_INSERT_HEAD(&dvrentries, de, de_global_link);
+
+ dvr_entry_set_timer(de);
+
htsp_dvr_entry_add(de);
}
LIST_INSERT_HEAD(&dae->dae_spawns, de, de_autorec_link);
}
- tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\" starting at %s, "
+ tvhlog(LOG_INFO, "dvr", "entry %d \"%s\" on \"%s\" starting at %s, "
"scheduled for recording by \"%s\"",
+ de->de_id,
lang_str_get(de->de_title, NULL), DVR_CH_NAME(de), tbuf, creator);
dvrdb_changed();
de->de_stop_extra = stop_extra;
save = 1;
}
+ if (save)
+ dvr_entry_set_timer(de);
/* Title */
if (e && e->episode && e->episode->title) {
/* Existing entry */
if ((de = dvr_entry_find_by_event(e))) {
+ tvhtrace("dvr",
+ "dvr entry %d event replaced %s on %s @ %"PRItime_t
+ " to %"PRItime_t,
+ de->de_id, epg_broadcast_get_title(e, NULL), e->channel->ch_name,
+ e->start, e->stop);
/* Unlink the broadcast */
e->putref(e);
/* Find match */
RB_FOREACH(e, &e->channel->ch_epg_schedule, sched_link) {
if (dvr_entry_fuzzy_match(de, e)) {
+ tvhtrace("dvr",
+ " replacement event %s on %s @ %"PRItime_t
+ " to %"PRItime_t,
+ epg_broadcast_get_title(e, NULL), e->channel->ch_name,
+ e->start, e->stop);
e->getref(e);
de->de_bcast = e;
_dvr_entry_update(de, e, NULL, NULL, NULL, 0, 0, 0, 0);
if (de->de_bcast) continue;
if (de->de_channel != e->channel) continue;
if (dvr_entry_fuzzy_match(de, e)) {
+ tvhtrace("dvr",
+ "dvr entry %d link to event %s on %s @ %"PRItime_t
+ " to %"PRItime_t,
+ de->de_id, epg_broadcast_get_title(e, NULL),
+ e->channel->ch_name,
+ e->start, e->stop);
e->getref(e);
de->de_bcast = e;
_dvr_entry_update(de, e, NULL, NULL, NULL, 0, 0, 0, 0);
/* Remove unref'd */
while ((eo = LIST_FIRST(&epg_object_unref))) {
- tvhlog(LOG_DEBUG, "epg",
- "unref'd object %u (%s) created during update", eo->id, eo->uri);
+ tvhtrace("epg",
+ "unref'd object %u (%s) created during update", eo->id, eo->uri);
LIST_REMOVE(eo, un_link);
eo->destroy(eo);
}
/* Expire */
if ( ebc->stop <= dispatch_clock ) {
- tvhlog(LOG_DEBUG, "epg", "expire event %u from %s",
- ebc->id, ch->ch_name);
+ tvhlog(LOG_DEBUG, "epg", "expire event %u (%s) from %s",
+ ebc->id, epg_broadcast_get_title(ebc, NULL), ch->ch_name);
_epg_channel_rem_broadcast(ch, ebc, NULL);
continue; // skip to next
_epg_object_create(ret);
// Note: sets updated
_epg_object_getref(ret);
+ tvhtrace("epg", "added event %u (%s) on %s @ %"PRItime_t " to %"PRItime_t,
+ ret->id, epg_broadcast_get_title(ret, NULL), ch->ch_name, ret->start, ret->stop);
/* Existing */
} else {
} else {
ret->stop = (*bcast)->stop;
_epg_object_set_updated(ret);
+ tvhtrace("epg", "updated event %u (%s) on %s @ %"PRItime_t " to %"PRItime_t,
+ ret->id, epg_broadcast_get_title(ret, NULL), ch->ch_name, ret->start, ret->stop);
}
}
}
/* Remove overlapping (before) */
while ( (ebc = RB_PREV(ret, sched_link)) != NULL ) {
if ( ebc->stop <= ret->start ) break;
+ tvhtrace("epg", "remove overlap (b) event %u (%s) on %s @ %"PRItime_t " to %"PRItime_t,
+ ebc->id, epg_broadcast_get_title(ebc, NULL), ch->ch_name, ebc->start, ebc->stop);
_epg_channel_rem_broadcast(ch, ebc, ret);
}
/* Remove overlapping (after) */
while ( (ebc = RB_NEXT(ret, sched_link)) != NULL ) {
if ( ebc->start >= ret->stop ) break;
+ tvhtrace("epg", "remove overlap (a) event %u (%s) on %s @ %"PRItime_t " to %"PRItime_t,
+ ebc->id, epg_broadcast_get_title(ebc, NULL), ch->ch_name, ebc->start, ebc->stop);
_epg_channel_rem_broadcast(ch, ebc, ret);
}