X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fservices_discovery%2Fshout.c;h=378c2351c98591f3e116ac9ed6c31982b9d91bc3;hb=bf7db5be441aabb740157dce7c61c42f14924a70;hp=8575370ef739ad7d1fdf2a3b49919714ba86bbb4;hpb=97cf7d54cab376c4594706eed2c382bf52c02fab;p=vlc diff --git a/modules/services_discovery/shout.c b/modules/services_discovery/shout.c index 8575370ef7..378c2351c9 100644 --- a/modules/services_discovery/shout.c +++ b/modules/services_discovery/shout.c @@ -72,7 +72,7 @@ static const struct shout_item_t p_frenchtv[] = { static const struct shout_item_t p_items[] = { item( N_("Shoutcast Radio"), "http/shout-winamp://www.shoutcast.com/sbin/newxml.phtml" ), item( N_("Shoutcast TV"), "http/shout-winamp://www.shoutcast.com/sbin/newtvlister.phtml?alltv=1" ), - item( N_("Freebox TV"), "http://mafreebox.freebox.fr/freeboxtv/playlist.m3u" ), + itemWithOption( N_("Freebox TV"),"http://mafreebox.freebox.fr/freeboxtv/playlist.m3u", "deinterlace=1"), itemWithChildren(N_("French TV"), p_frenchtv ), endItem() }; @@ -85,6 +85,7 @@ static const struct shout_item_t p_items[] = { struct shout_category_t { services_discovery_t * p_sd; const char * psz_category; + const struct shout_item_t * p_parent; }; /* Main functions */ @@ -100,6 +101,10 @@ OPEN( ShoutTV ) OPEN( Freebox ) OPEN( FrenchTV ) +#undef OPEN + +static int vlc_sd_probe_Open( vlc_object_t * ); + vlc_module_begin () set_category( CAT_PLAYLIST ) set_subcategory( SUBCAT_PLAYLIST_SD ) @@ -107,14 +112,14 @@ vlc_module_begin () add_obsolete_integer( "shoutcast-limit" ) set_shortname( "Shoutcast") - set_description( N_("Shoutcast radio listings") ) + set_description( N_("Shoutcast Radio") ) set_capability( "services_discovery", 0 ) set_callbacks( OpenShoutRadio, Close ) add_shortcut( "shoutcast" ) add_submodule () set_shortname( "ShoutcastTV" ) - set_description( N_("Shoutcast TV listings") ) + set_description( N_("Shoutcast TV") ) set_capability( "services_discovery", 0 ) set_callbacks( OpenShoutTV, Close ) add_shortcut( "shoutcasttv" ) @@ -128,11 +133,12 @@ vlc_module_begin () add_submodule () set_shortname( "Freebox") - set_description( N_("Freebox TV listing (French ISP free.fr services)") ) + set_description( N_("Freebox TV") ) set_capability( "services_discovery", 0 ) set_callbacks( OpenFreebox, Close ) add_shortcut( "freebox" ) + VLC_SD_PROBE_SUBMODULE vlc_module_end () @@ -173,9 +179,13 @@ static int Open( vlc_object_t *p_this, enum type_e i_type ) static void ItemAdded( const vlc_event_t * p_event, void * user_data ) { struct shout_category_t * params = user_data; - services_discovery_AddItem( params->p_sd, - p_event->u.input_item_subitem_added.p_new_child, - params->psz_category ); + const struct shout_item_t * p_parent = params->p_parent; + input_item_t * p_input = p_event->u.input_item_subitem_added.p_new_child; + + for(int i = 0; p_parent->ppsz_options[i] != NULL; i++) + input_item_AddOption( p_input, p_parent->ppsz_options[i], VLC_INPUT_OPTION_TRUSTED); + + services_discovery_AddItem( params->p_sd, p_input, params->psz_category ); } /***************************************************************************** @@ -184,13 +194,12 @@ static void ItemAdded( const vlc_event_t * p_event, void * user_data ) static input_item_t * CreateInputItemFromShoutItem( services_discovery_t *p_sd, const struct shout_item_t * p_item ) { - int i; /* Create the item */ input_item_t *p_input = input_item_New( p_sd, p_item->psz_url, - gettext(p_item->psz_name) ); + vlc_gettext(p_item->psz_name) ); /* Copy options */ - for( i = 0; p_item->ppsz_options[i] != NULL; i++ ) + for(int i = 0; p_item->ppsz_options[i] != NULL; i++) input_item_AddOption( p_input, p_item->ppsz_options[i], VLC_INPUT_OPTION_TRUSTED ); input_item_AddOption( p_input, "no-playlist-autostart", VLC_INPUT_OPTION_TRUSTED ); @@ -204,7 +213,7 @@ static void AddSubitemsOfShoutItemURL( services_discovery_t *p_sd, const struct shout_item_t * p_item, const char * psz_category ) { - struct shout_category_t category = { p_sd, psz_category }; + struct shout_category_t category = { p_sd, psz_category, p_item }; /* Create the item */ input_item_t *p_input = CreateInputItemFromShoutItem( p_sd, p_item ); @@ -212,7 +221,7 @@ static void AddSubitemsOfShoutItemURL( services_discovery_t *p_sd, /* Read every subitems, and add them in ItemAdded */ vlc_event_attach( &p_input->event_manager, vlc_InputItemSubItemAdded, ItemAdded, &category ); - input_Read( p_sd, p_input, true ); + input_Read( p_sd, p_input ); vlc_event_detach( &p_input->event_manager, vlc_InputItemSubItemAdded, ItemAdded, &category ); @@ -268,3 +277,16 @@ static void Close( vlc_object_t *p_this ) vlc_join (p_sys->thread, NULL); free (p_sys); } + +static int vlc_sd_probe_Open( vlc_object_t *obj ) +{ + vlc_probe_t *probe = (vlc_probe_t *)obj; + + vlc_sd_probe_Add( probe, "shoutcast{longname=\"Shoutcast Radio\"}", + N_("Shoutcast Radio"), SD_CAT_INTERNET ); + vlc_sd_probe_Add( probe, "shoutcasttv{longname=\"Shoutcast TV\"}", + N_("Shoutcast TV"), SD_CAT_INTERNET ); + vlc_sd_probe_Add( probe, "frenchtv{longname=\"French TV\"}", + N_("French TV"), SD_CAT_INTERNET ); + return VLC_PROBE_CONTINUE; +}