service: Add possibility to disable automatic service checking per service
This commit is contained in:
parent
a9d3e4a7d9
commit
f20bab4aed
3 changed files with 36 additions and 5 deletions
|
@ -1035,9 +1035,10 @@ dvb_pat_callback
|
|||
last_seen = s->s_dvb_check_seen;
|
||||
for (s = LIST_FIRST(&mm->mm_services); s; s = snext) {
|
||||
snext = LIST_NEXT(s, s_dvb_mux_link);
|
||||
if (s->s_enabled && s->s_dvb_check_seen + 24 * 3600 < last_seen) {
|
||||
if (s->s_enabled && s->s_auto != SERVICE_AUTO_OFF &&
|
||||
s->s_dvb_check_seen + 24 * 3600 < last_seen) {
|
||||
tvhinfo("mpegts", "disabling service %s (missing in PAT)", s->s_nicename ?: "<unknown>");
|
||||
service_set_enabled((service_t *)s, 0);
|
||||
service_set_enabled((service_t *)s, 0, SERVICE_AUTO_PAT_MISSING);
|
||||
}
|
||||
}
|
||||
mt->mt_opaque = mm;
|
||||
|
|
|
@ -57,7 +57,10 @@ struct service_queue service_all;
|
|||
static void
|
||||
service_class_notify_enabled ( void *obj )
|
||||
{
|
||||
bouquet_notify_service_enabled((service_t *)obj);
|
||||
service_t *t = (service_t *)obj;
|
||||
if (t->s_enabled && t->s_auto != SERVICE_AUTO_OFF)
|
||||
t->s_auto = SERVICE_AUTO_NORMAL;
|
||||
bouquet_notify_service_enabled(t);
|
||||
}
|
||||
|
||||
static const void *
|
||||
|
@ -174,6 +177,17 @@ service_class_caid_get ( void *obj )
|
|||
return &s;
|
||||
}
|
||||
|
||||
static htsmsg_t *
|
||||
service_class_auto_list ( void *o )
|
||||
{
|
||||
static const struct strtab tab[] = {
|
||||
{ "", 0 },
|
||||
{ "No Auto (Disabled)", 1 },
|
||||
{ "Missing In PAT", 2 }
|
||||
};
|
||||
return strtab2htsmsg(tab);
|
||||
}
|
||||
|
||||
const idclass_t service_class = {
|
||||
.ic_class = "service",
|
||||
.ic_caption = "Service",
|
||||
|
@ -190,6 +204,13 @@ const idclass_t service_class = {
|
|||
.off = offsetof(service_t, s_enabled),
|
||||
.notify = service_class_notify_enabled,
|
||||
},
|
||||
{
|
||||
.type = PT_INT,
|
||||
.id = "auto",
|
||||
.name = "Automatic Checking",
|
||||
.list = service_class_auto_list,
|
||||
.off = offsetof(service_t, s_auto),
|
||||
},
|
||||
{
|
||||
.type = PT_STR,
|
||||
.islist = 1,
|
||||
|
@ -821,10 +842,11 @@ service_destroy(service_t *t, int delconf)
|
|||
}
|
||||
|
||||
void
|
||||
service_set_enabled(service_t *t, int enabled)
|
||||
service_set_enabled(service_t *t, int enabled, int _auto)
|
||||
{
|
||||
if (t->s_enabled != !!enabled) {
|
||||
t->s_enabled = !!enabled;
|
||||
t->s_auto = _auto;
|
||||
service_class_notify_enabled(t);
|
||||
service_request_save(t, 0);
|
||||
idnode_notify_simple(&t->s_id);
|
||||
|
|
|
@ -191,6 +191,13 @@ typedef struct service_lcn {
|
|||
} service_lcn_t;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
#define SERVICE_AUTO_NORMAL 0
|
||||
#define SERVICE_AUTO_OFF 1
|
||||
#define SERVICE_AUTO_PAT_MISSING 2
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -280,6 +287,7 @@ typedef struct service {
|
|||
* subscription scheduling.
|
||||
*/
|
||||
int s_enabled;
|
||||
int s_auto;
|
||||
|
||||
LIST_ENTRY(service) s_active_link;
|
||||
|
||||
|
@ -521,7 +529,7 @@ int service_is_other(service_t *t);
|
|||
|
||||
int service_is_encrypted ( service_t *t );
|
||||
|
||||
void service_set_enabled ( service_t *t, int enabled );
|
||||
void service_set_enabled ( service_t *t, int enabled, int _auto );
|
||||
|
||||
void service_destroy(service_t *t, int delconf);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue