X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fplaylist%2Fservices_discovery.c;h=88c03611ff0847187a9381ebf0e9636cc3e61b9b;hb=2a2dd55119a03f4e410fca67cc07c7a4e990ed95;hp=eb35edb4725592d6923bdf37178057d5731191c0;hpb=60fac2114e22e3b16f9587a955ce8e10d023e339;p=vlc diff --git a/src/playlist/services_discovery.c b/src/playlist/services_discovery.c index eb35edb472..88c03611ff 100644 --- a/src/playlist/services_discovery.c +++ b/src/playlist/services_discovery.c @@ -37,12 +37,13 @@ typedef struct { char *name; char *longname; + int category; } vlc_sd_probe_t; int vlc_sd_probe_Add (vlc_probe_t *probe, const char *name, - const char *longname) + const char *longname, int category) { - vlc_sd_probe_t names = { strdup(name), strdup(longname) }; + vlc_sd_probe_t names = { strdup(name), strdup(longname), category }; if (unlikely (names.name == NULL || names.longname == NULL || vlc_probe_add (probe, &names, sizeof (names)))) @@ -59,7 +60,7 @@ int vlc_sd_probe_Add (vlc_probe_t *probe, const char *name, /** * Gets the list of available services discovery plugins. */ -char **vlc_sd_GetNames (vlc_object_t *obj, char ***pppsz_longnames) +char **vlc_sd_GetNames (vlc_object_t *obj, char ***pppsz_longnames, int **pp_categories) { size_t count; vlc_sd_probe_t *tab = vlc_probe (obj, "services probe", &count); @@ -72,17 +73,22 @@ char **vlc_sd_GetNames (vlc_object_t *obj, char ***pppsz_longnames) char **names = malloc (sizeof(char *) * (count + 1)); char **longnames = malloc (sizeof(char *) * (count + 1)); + int *categories = malloc(sizeof(int) * (count + 1)); - if (unlikely (names == NULL || longnames == NULL)) + if (unlikely (names == NULL || longnames == NULL || categories == NULL)) abort(); for( size_t i = 0; i < count; i++ ) { names[i] = tab[i].name; longnames[i] = tab[i].longname; + categories[i] = tab[i].category; } free (tab); names[count] = longnames[count] = NULL; + categories[count] = 0; *pppsz_longnames = longnames; + if( pp_categories ) *pp_categories = categories; + else free( categories ); return names; } @@ -291,27 +297,18 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist, if( !p_sd ) return VLC_ENOMEM; - module_t *m = module_find_by_shortcut( p_sd->psz_name ); - if( !m ) - { - msg_Err( p_playlist, "No such module: %s", p_sd->psz_name ); - vlc_sd_Destroy( p_sd ); - return VLC_EGENERIC; - } - /* Free in playlist_ServicesDiscoveryRemove */ vlc_sd_internal_t * p_sds = malloc( sizeof(*p_sds) ); if( !p_sds ) { vlc_sd_Destroy( p_sd ); - module_release( m ); return VLC_ENOMEM; } playlist_item_t *p_node; /* Look for configuration chain "longname" */ - const char *psz_longname = NULL; + const char *psz_longname = "?"; if( p_sd->p_cfg ) { config_chain_t *cfg = p_sd->p_cfg; @@ -326,17 +323,10 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist, } } - /* Fallback on module's long name if not found */ - if( !psz_longname ) - { - psz_longname = module_get_name( m, true ); - } - PL_LOCK; p_node = playlist_NodeCreate( p_playlist, psz_longname, p_playlist->p_root, 0, NULL ); PL_UNLOCK; - module_release( m ); vlc_event_attach( services_discovery_EventManager( p_sd ), vlc_ServicesDiscoveryItemAdded,