* Write
* *************************************************************************/
+static int
+idnode_class_write_values
+ ( idnode_t *self, const idclass_t *idc, htsmsg_t *c, int optmask )
+{
+ int save = 0;
+ if (idc->ic_super)
+ save |= idnode_class_write_values(self, idc->ic_super, c, optmask);
+ save |= prop_write_values(self, idc->ic_properties, c, optmask, NULL);
+ return save;
+}
+
int
idnode_write0 ( idnode_t *self, htsmsg_t *c, int optmask, int dosave )
{
int save = 0;
void (*savefn)(idnode_t*) = NULL;
const idclass_t *idc = self->in_class;
- for (; idc; idc = idc->ic_super) {
- save |= prop_write_values(self, idc->ic_properties, c, optmask, NULL);
- if (!savefn && idc->ic_save)
- savefn = idc->ic_save;
- }
+ save = idnode_class_write_values(self, idc, c, optmask);
if (save && dosave) {
if (savefn) savefn(self);
idnode_notify(self, NULL, 0, 0);
if (ic->ic_event) {
htsmsg_t *m = htsmsg_create_map();
htsmsg_add_str(m, "uuid", uuid);
- printf("event = %s\n", ic->ic_event);
notify_by_msg(ic->ic_event, m);
}
ic = ic->ic_super;
if (!conf)
return lfe;
- /* TODO: this should be done differently */
- if ((str = htsmsg_get_str(conf, "network"))) {
- linuxdvb_network_t *ln = linuxdvb_network_find_by_uuid(str);
- if (ln) {
- if (ln->ln_type == lfe->lfe_info.type) {
- mpegts_input_set_network((mpegts_input_t*)lfe, (mpegts_network_t*)ln);
- } else
- tvhlog(LOG_WARNING, "linuxdvb",
- "attempt to add network %s of wrong type %s to %s (%s)",
- dvb_type2str(ln->ln_type), ln->mn_network_name,
- lfe->mi_displayname, dvb_type2str(lfe->lfe_info.type));
- }
- }
-
return lfe;
}
htsmsg_t *c )
{
idnode_insert(&mi->mi_id, uuid, class);
- if (c)
- idnode_load(&mi->mi_id, c);
/* Defaults */
mi->mi_is_enabled = mpegts_input_is_enabled;
mi->mi_has_subscription = mpegts_input_has_subscription;
/* Index */
- mi->mi_instance = ++mpegts_input_idx;
+ mi->mi_instance = ++mpegts_input_idx;
/* Init mutex */
pthread_mutex_init(&mi->mi_delivery_mutex, NULL);
/* Add to global list */
LIST_INSERT_HEAD(&mpegts_input_all, mi, mi_global_link);
+ /* Load config */
+ if (c)
+ idnode_load(&mi->mi_id, c);
+
return mi;
}
char buf1[256], buf2[265];
if (mi->mi_network == mn) return;
*buf1 = *buf2 = 0;
- if (mi->mi_display_name)
+ if (mi->mi_display_name) {
mi->mi_display_name(mi, buf1, sizeof(buf1));
+ }
if (mi->mi_network) {
mi->mi_network->mn_display_name(mi->mi_network, buf2, sizeof(buf2));
LIST_REMOVE(mi, mi_network_link);
{
int save, save2 = 0;
htsmsg_field_t *f;
+ const property_t *p;
if (!pl) return 0;
- HTSMSG_FOREACH(f, m) {
- if(f->hmf_name == NULL)
- continue;
-
- /* Find Property */
- const property_t *p = prop_find(pl, f->hmf_name);
- if(p == NULL) {
- //tvhwarn("prop", "invalid property %s", f->hmf_name);
- continue;
- }
+ for (p = pl; p->id; p++) {
+ f = htsmsg_field_find(m, p->id);
+ if (!f) continue;
/* Ignore */
if(p->opts & optmask) continue;