Playlist::~Playlist()
{
- if( pp_sds != NULL ) free( pp_sds );
+ if( pp_sds != NULL )
+ {
+ char **pp_sd = pp_sds;
+ for( ; *pp_sd; pp_sd++ ) free( *pp_sd );
+ free( pp_sds );
+ }
if( p_playlist == NULL ) return;
char *psz_utf8 = wxDnDFromLocale( filenames[i] );
input_item_t *p_input = input_ItemNew( p->p_playlist,
psz_utf8, psz_utf8 );
- playlist_NodeAddInput( p->p_playlist, p_input,
- p_dest, PLAYLIST_PREPARSE, i_pos, VLC_FALSE );
+ int i_ret = ( playlist_NodeAddInput( p->p_playlist, p_input, p_dest,
+ PLAYLIST_PREPARSE, i_pos, VLC_FALSE ) != VLC_SUCCESS );
wxDnDLocaleFree( psz_utf8 );
+ if( i_ret != VLC_SUCCESS )
+ return FALSE;
}
/* FIXME: having this Rebuild() is dirty */
{
p_sd_menu = new wxMenu;
- vlc_list_t *p_list = vlc_list_find( p_playlist, VLC_OBJECT_MODULE,
- FIND_ANYWHERE );
+ char **ppsz_longnames;
+ char **ppsz_names = services_discovery_GetServicesNames( p_playlist,
+ &ppsz_longnames );
+ if( !ppsz_names )
+ return p_sd_menu;
- int i_number = 0;
- for( int i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- module_t * p_parser = (module_t *)p_list->p_values[i_index].p_object ;
+ char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames;
- if( !strcmp( p_parser->psz_capability, "services_discovery" ) )
- i_number++;
- }
- if( i_number ) pp_sds = (const char **)calloc( i_number, sizeof(void *) );
+ int i_number = 0;
- i_number = 0;
- for( int i_index = 0; i_index < p_list->i_count; i_index++ )
+ for( ; *ppsz_name; ppsz_name++, ppsz_longname++ )
{
- module_t * p_parser = (module_t *)p_list->p_values[i_index].p_object ;
+ p_sd_menu->AppendCheckItem( FirstSD_Event + i_number++ ,
+ wxU( *ppsz_longname ) );
- if( !strcmp( p_parser->psz_capability, "services_discovery" ) )
- {
- p_sd_menu->AppendCheckItem( FirstSD_Event + i_number ,
- wxU( p_parser->psz_longname ? p_parser->psz_longname :
- (p_parser->psz_shortname ?
- p_parser->psz_shortname : p_parser->psz_object_name) ) );
-
- /* hack to handle submodules properly */
- int i = -1;
- while( p_parser->pp_shortcuts[++i] != NULL );
- i--;
- if( playlist_IsServicesDiscoveryLoaded( p_playlist,
- i>=0?p_parser->pp_shortcuts[i]
- :p_parser->psz_object_name ) )
- {
- p_sd_menu->Check( FirstSD_Event + i_number, TRUE );
- }
+ if( playlist_IsServicesDiscoveryLoaded( p_playlist, *ppsz_name ) )
+ p_sd_menu->Check( FirstSD_Event + i_number, TRUE );
- pp_sds[i_number++] = i>=0?p_parser->pp_shortcuts[i]
- :p_parser->psz_object_name;
- }
+ free( *ppsz_longname );
}
- vlc_list_release( p_list );
+ pp_sds = ppsz_names;
+ free( ppsz_longnames );
return p_sd_menu;
}
p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, VLC_TRUE );
- playlist_NodeCreate( p_playlist, psz_name, p_item, 0 );
+ playlist_NodeCreate( p_playlist, psz_name, p_item, 0, NULL );
UnlockPlaylist( p_intf->p_sys, p_playlist );
Rebuild( VLC_TRUE );