diff --git a/src/input/mpegts/linuxdvb/linuxdvb.c b/src/input/mpegts/linuxdvb/linuxdvb.c index fd006af1..c283326a 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb.c +++ b/src/input/mpegts/linuxdvb/linuxdvb.c @@ -29,4 +29,7 @@ void linuxdvb_init ( int adapter_mask ) /* Initialsie devices */ linuxdvb_device_init(adapter_mask); + + /* Initialise satconfs */ + linuxdvb_satconf_init(); } diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index 4e251b24..1f2494ad 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -242,6 +242,8 @@ struct linuxdvb_satconf linuxdvb_lnb_t *ls_lnb; }; +void linuxdvb_satconf_init ( void ); + linuxdvb_satconf_t *linuxdvb_satconf_create0(const char *uuid, htsmsg_t *conf); #endif /* __TVH_LINUXDVB_PRIVATE_H__ */ diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 2df82d30..87510d1f 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -20,6 +20,7 @@ #include "tvheadend.h" #include "linuxdvb_private.h" #include "diseqc.h" +#include "settings.h" #include #include @@ -131,13 +132,23 @@ linuxdvb_satconf_class_frontend_enum (void *o) return m; } +static void +linuxdvb_satconf_class_save ( idnode_t *in ) +{ + htsmsg_t *m = htsmsg_create_map(); + idnode_save(in, m); + hts_settings_save(m, "input/linuxdvb/satconfs/%s", + idnode_uuid_as_str(in)); + htsmsg_destroy(m); +} + const idclass_t linuxdvb_satconf_class = { .ic_super = &mpegts_input_class, .ic_class = "linuxdvb_satconf", .ic_caption = "Linux DVB Satconf", //.ic_get_title = linuxdvb_satconf_class_get_title, - //.ic_save = linuxdvb_satconf_class_save, + .ic_save = linuxdvb_satconf_class_save, .ic_properties = (const property_t[]) { { .type = PT_STR, @@ -350,14 +361,17 @@ linuxdvb_satconf_create0 return ls; } -#if 0 -void -linuxdvb_satconf_save ( linuxdvb_satconf_t *lfe, htsmsg_t *m ) +void linuxdvb_satconf_init ( void ) { - //mpegts_input_save((mpegts_input_t*)lfe, m); - // htsmsg_add_str(m, "type", dvb_type2str(lfe->lfe_info.type)); + htsmsg_t *s, *e; + htsmsg_field_t *f; + if ((s = hts_settings_load_r(1, "input/linuxdvb/satconfs"))) { + HTSMSG_FOREACH(f, s) { + if (!(e = htsmsg_get_map_by_field(f))) continue; + (void)linuxdvb_satconf_create0(f->hmf_name, e); + } + } } -#endif /****************************************************************************** * Editor Configuration diff --git a/src/webui/extjs_dvb.c b/src/webui/extjs_dvb.c index 0d9648b1..7b8d0f82 100644 --- a/src/webui/extjs_dvb.c +++ b/src/webui/extjs_dvb.c @@ -227,6 +227,7 @@ extjs_linuxdvb_satconf htsmsg_t *list = idclass_serialize(&linuxdvb_satconf_class); htsmsg_add_msg(out, "entries", list); } else if (!strcmp(op, "create")) { + idnode_t *in; htsmsg_t *conf = NULL; const char *c; if ((c = http_arg_get(&hc->hc_req_args, "conf"))) @@ -234,7 +235,8 @@ extjs_linuxdvb_satconf if (!conf) return HTTP_STATUS_BAD_REQUEST; pthread_mutex_lock(&global_lock); - linuxdvb_satconf_create0(NULL, conf); + in = (idnode_t*)linuxdvb_satconf_create0(NULL, conf); + if (in) in->in_class->ic_save(in); pthread_mutex_unlock(&global_lock); }