( void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
{
service_mapper_conf_t conf = { 0 };
+ htsmsg_t *uuids;
#define get_u32(x)\
- conf.x = htsmsg_get_u32_or_default(args, #x, 0)
+ conf.x = htsmsg_get_bool_or_default(args, #x, 0)
/* Get config */
+ uuids = htsmsg_get_list(args, "uuids");
get_u32(check_availability);
get_u32(encrypted);
get_u32(merge_same_name);
get_u32(provider_tags);
pthread_mutex_lock(&global_lock);
- service_mapper_start(&conf);
+ service_mapper_start(&conf, uuids);
pthread_mutex_unlock(&global_lock);
return 0;
* Start a new mapping
*/
void
-service_mapper_start ( const service_mapper_conf_t *conf )
+service_mapper_start ( const service_mapper_conf_t *conf, htsmsg_t *uuids )
{
int e, tr, qd = 0;
service_t *s;
/* Check each service */
TAILQ_FOREACH(s, &service_all, s_all_link) {
+ if (uuids) {
+ htsmsg_field_t *f;
+ const char *str;
+ const char *uuid = idnode_uuid_as_str(&s->s_id);
+ HTSMSG_FOREACH(f, uuids) {
+ if (!(str = htsmsg_field_get_str(f))) continue;
+ if (!strcmp(str, uuid)) break;
+ }
+ if (!f) continue;
+ }
/* Disabled */
if (!s->s_is_enabled(s)) continue;
csm = calloc(1, sizeof(channel_service_mapping_t));
csm->csm_chn = c;
csm->csm_svc = s;
- LIST_INSERT_HEAD(&s->s_channels, csm, csm_svc_link);
- LIST_INSERT_HEAD(&c->ch_services, csm, csm_chn_link);
+ LIST_INSERT_HEAD(&s->s_channels, csm, csm_chn_link);
+ LIST_INSERT_HEAD(&c->ch_services, csm, csm_svc_link);
return 1;
}
/* Find existing channel */
num = s->s_channel_number(s);
-#if 0
- if (service_mapper_conf.merge_same_name)
- chn = channel_find_by_name(s->s_channel_name(s));
-#endif
+ if (service_mapper_conf.merge_same_name && s->s_channel_name)
+ chn = channel_find_by_name(s->s_channel_name(s) ?: "");
if (!chn)
chn = channel_create(NULL, NULL, s->s_channel_name(s));
void service_mapper_init ( void );
// Start new mapping
-void service_mapper_start ( const service_mapper_conf_t *conf );
+void service_mapper_start
+ ( const service_mapper_conf_t *conf, htsmsg_t *uuids );
// Stop pending services (remove from Q)
void service_mapper_stop ( void );