htsmsg_t *m = NULL;
const char *s = htsmsg_get_str(args, name);
char *r, *saveptr = NULL;
+ int use = 1;
+ if (s && s[0] == '-') {
+ use = 0;
+ s++;
+ }
if (s && s[0] != '\0') {
s = r = strdup(s);
r = strtok_r(r, ",;:", &saveptr);
if (*r != '\0') {
if (m == NULL)
m = htsmsg_create_map();
- htsmsg_add_bool(m, r, 1);
+ htsmsg_add_bool(m, r, use);
}
r = strtok_r(NULL, ",;:", &saveptr);
}
} else {
const property_t *p;
htsmsg_field_t *f;
- int b;
+ int b, total = 0, count = 0;
+
HTSMSG_FOREACH(f, list) {
- if (!htsmsg_field_get_bool(f, &b) && b > 0) {
- p = prop_find(pl, f->hmf_name);
- if (p)
- prop_read_value(obj, p, m, p->id, optmask);
+ total++;
+ if (!htsmsg_field_get_bool(f, &b)) {
+ if (b > 0) {
+ p = prop_find(pl, f->hmf_name);
+ if (p)
+ prop_read_value(obj, p, m, p->id, optmask);
+ count++;
+ }
+ }
+ }
+ if (total && !count) {
+ for (; pl->id; pl++) {
+ HTSMSG_FOREACH(f, list)
+ if (!strcmp(pl->id, f->hmf_name))
+ break;
+ if (f == NULL)
+ prop_read_value(obj, pl, m, pl->id, optmask);
}
}
}
} else {
const property_t *p;
htsmsg_field_t *f;
- int b;
+ int b, total = 0, count = 0;
HTSMSG_FOREACH(f, list) {
+ total++;
if (!htsmsg_field_get_bool(f, &b) && b > 0) {
p = prop_find(pl, f->hmf_name);
if (p)
prop_serialize_value(obj, p, msg, optmask);
+ count++;
+ }
+ }
+ if (total && !count) {
+ for (; pl->id; pl++) {
+ HTSMSG_FOREACH(f, list)
+ if (!strcmp(pl->id, f->hmf_name))
+ break;
+ if (f == NULL)
+ prop_serialize_value(obj, pl, msg, optmask);
}
}
}
tvheadend.esfilter_tab = function(panel)
{
+ var list = '-class';
+
tvheadend.idnode_form_grid(panel, {
url: 'api/profile',
clazz: 'profile',
titleS: 'Stream Profile',
titleP: 'Stream Profiles',
titleC: 'Stream Profile Name',
- iconCls: 'stream_profile',
+ iconCls: 'film',
+ edit: { params: { list: list } },
add: {
url: 'api/profile',
titleS: 'Stream Profile',
store: tvheadend.caclient_builders,
displayField: 'caption',
valueField: 'class',
- propField: 'props'
+ propField: 'props',
+ list: list,
},
create: { },
},
}
});
+ var eslist = '-class,index';
+
tvheadend.idnode_grid(panel, {
url: 'api/esfilter/video',
titleS: 'Video Stream Filter',
titleP: 'Video Stream Filters',
+ iconCls: 'film_edit',
tabIndex: 1,
+ edit: { params: { list: eslist } },
add: {
+ params: { list: eslist },
url: 'api/esfilter/video',
- create: {}
+ create: { }
},
del: true,
move: true,
url: 'api/esfilter/audio',
titleS: 'Audio Stream Filter',
titleP: 'Audio Stream Filters',
+ iconCls: 'control_volume',
tabIndex: 2,
+ edit: { params: { list: eslist } },
add: {
+ params: { list: eslist },
url: 'api/esfilter/audio',
create: {}
},
titleS: 'Teletext Stream Filter',
titleP: 'Teletext Stream Filters',
tabIndex: 3,
+ edit: { params: { list: eslist } },
add: {
+ params: { list: eslist },
url: 'api/esfilter/teletext',
create: {}
},
titleS: 'Subtitle Stream Filter',
titleP: 'Subtitle Stream Filters',
tabIndex: 4,
+ edit: { params: { list: eslist } },
add: {
+ params: { list: eslist },
url: 'api/esfilter/subtit',
create: {}
},
url: 'api/esfilter/ca',
titleS: 'CA Stream Filter',
titleP: 'CA Stream Filters',
+ iconCls: 'film_key',
tabIndex: 5,
add: {
+ params: { list: eslist },
url: 'api/esfilter/ca',
create: {}
},
titleS: 'Other Stream Filter',
titleP: 'Other Stream Filters',
tabIndex: 6,
+ edit: { params: { list: eslist } },
add: {
+ params: { list: eslist },
url: 'api/esfilter/other',
create: {}
},
background-image: url(../icons/arrow_switch.png) !important;
}
-.stream_config {
+.film {
+ background-image: url(../icons/film.png) !important;
+}
+
+.film_edit {
background-image: url(../icons/film_edit.png) !important;
}
+.film_key {
+ background-image: url(../icons/film_key.png) !important;
+}
+
.caclientNone {
background-image: url(../icons/stop.png) !important;
}
tvheadend.idnode_filter_fields = function(d, list)
{
- if (!list)
- return d;
- var o = list.split(',');
- var r = [];
- for (var i = 0; i < o.length; i++)
- for (var j = 0; j < d.length; j++)
- if (d[j].id === o[i]) {
- r.push(d[j]);
- break;
- }
- return r;
+ if (!list)
+ return d;
+ var r = [];
+ if (list.charAt(0) === '-') {
+ var o = list.substring(1).split(',');
+ r = d.slice();
+ for (var i = 0; i < o.length; i++)
+ for (var j = 0; j < r.length; j++)
+ if (r[j].id === o[i]) {
+ r.splice(i, 1);
+ break;
+ }
+ } else {
+ for (var i = 0; i < o.length; i++)
+ for (var j = 0; j < d.length; j++)
+ if (d[j].id === o[i]) {
+ r.push(d[j]);
+ break;
+ }
+ }
+ return r;
}
Ext.ux.grid.filter.IntsplitFilter = Ext.extend(Ext.ux.grid.filter.NumericFilter, {
activeTab: 0,
autoScroll: true,
title: 'Stream',
- iconCls: 'stream_config',
+ iconCls: 'film_edit',
items: []
});
tvheadend.esfilter_tab(stream);
--- /dev/null
+../../../../vendor/famfamsilk/film.png
\ No newline at end of file
--- /dev/null
+../../../../vendor/famfamsilk/film_key.png
\ No newline at end of file