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;
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 *
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",
.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,
}
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);
} service_lcn_t;
+/**
+ *
+ */
+#define SERVICE_AUTO_NORMAL 0
+#define SERVICE_AUTO_OFF 1
+#define SERVICE_AUTO_PAT_MISSING 2
+
/**
*
*/
* subscription scheduling.
*/
int s_enabled;
+ int s_auto;
LIST_ENTRY(service) s_active_link;
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);