From: Jaroslav Kysela Date: Tue, 3 Nov 2015 09:17:32 +0000 (+0100) Subject: channel: changed EPG running settings logic - added 'Not Set' state X-Git-Tag: v4.2.1~1687 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8aa97d4311f01877c5d9ecd85a01468aca5c9d52;p=thirdparty%2Ftvheadend.git channel: changed EPG running settings logic - added 'Not Set' state --- diff --git a/src/channels.c b/src/channels.c index 9838db669..4b2639ee0 100644 --- a/src/channels.c +++ b/src/channels.c @@ -327,6 +327,17 @@ channel_class_epg_parent_set ( void *o, const void *v ) return save; } +static htsmsg_t * +channel_class_epg_running_list ( void *o, const char *lang ) +{ + static const struct strtab tab[] = { + { N_("Not set"), -1 }, + { N_("Disabled"), 0 }, + { N_("Enabled"), 1 }, + }; + return strtab2htsmsg(tab, 1, lang); +} + const idclass_t channel_class = { .ic_class = "channel", .ic_caption = N_("Channel"), @@ -411,10 +422,11 @@ const idclass_t channel_class = { .opts = PO_ADVANCED }, { - .type = PT_BOOL, + .type = PT_INT, .id = "epg_running", .name = N_("Use EPG Running State"), .off = offsetof(channel_t, ch_epg_running), + .list = channel_class_epg_running_list, .opts = PO_ADVANCED }, { @@ -845,7 +857,7 @@ channel_create0 ch->ch_enabled = 1; ch->ch_autoname = 1; ch->ch_epgauto = 1; - ch->ch_epg_running = 1; + ch->ch_epg_running = -1; if (conf) { ch->ch_load = 1; diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index ec283944d..ef8f9ee3b 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -426,6 +426,8 @@ uint32_t dvr_entry_get_removal_days( dvr_entry_t *de ); uint32_t dvr_entry_get_rerecord_errors( dvr_entry_t *de ); +int dvr_entry_get_epg_running( dvr_entry_t *de ); + time_t dvr_entry_get_start_time( dvr_entry_t *de ); time_t dvr_entry_get_stop_time( dvr_entry_t *de ); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index ffe4e8f65..88fdd0424 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -279,6 +279,14 @@ dvr_entry_get_rerecord_errors( dvr_entry_t *de ) return de->de_config->dvr_rerecord_errors; } +int +dvr_entry_get_epg_running( dvr_entry_t *de ) +{ + if (de->de_channel->ch_epg_running < 0) + return de->de_config->dvr_running; + return de->de_channel->ch_epg_running > 0; +} + /* * DBUS next dvr start notifications */ @@ -1574,9 +1582,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, int running) if (esrc != EPG_SOURCE_EIT || e->dvb_eid == 0 || e->channel == NULL) return; LIST_FOREACH(de, &e->channel->ch_dvrs, de_channel_link) { - if (de->de_dvb_eid == 0 || - !de->de_channel->ch_epg_running || - !de->de_config->dvr_running) { + if (de->de_dvb_eid == 0 || !dvr_entry_get_epg_running(de)) { de->de_running_start = de->de_running_stop = 0; continue; } diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index e8abc97ac..771c9caff 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -1208,7 +1208,7 @@ dvr_thread(void *aux) return NULL; comm_skip = de->de_config->dvr_skip_commercials; postproc = de->de_config->dvr_postproc ? strdup(de->de_config->dvr_postproc) : NULL; - running_disabled = !de->de_channel->ch_epg_running || !de->de_config->dvr_running; + running_disabled = dvr_entry_get_epg_running(de) <= 0; dvr_thread_global_unlock(de); TAILQ_INIT(&backlog);