X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Fplaylist%2Fm3u.c;h=01f4dcfe327c6b7090fdd20ef27826539ff941ce;hb=ed0b72e3714ad87cb4e10b9a7239e19b9ef0724e;hp=67a266eb2682be80f3c05698e8da108a9f689936;hpb=d27f781ff9e1201656d4c29d4616fb3364708599;p=vlc diff --git a/modules/misc/playlist/m3u.c b/modules/misc/playlist/m3u.c index 67a266eb26..01f4dcfe32 100644 --- a/modules/misc/playlist/m3u.c +++ b/modules/misc/playlist/m3u.c @@ -1,10 +1,10 @@ /***************************************************************************** * m3u.c : M3U playlist export module ***************************************************************************** - * Copyright (C) 2004 VideoLAN + * Copyright (C) 2004 the VideoLAN team * $Id$ * - * Authors: Clément Stenac + * Authors: Clément Stenac * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** @@ -28,6 +28,7 @@ #include #include +#include #include /* ENOMEM */ @@ -45,39 +46,56 @@ int Export_M3U( vlc_object_t *p_this ) playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private; int i, j; - msg_Dbg(p_playlist, "Saving using M3U format"); + msg_Dbg(p_playlist, "saving using M3U format"); /* Write header */ fprintf( p_export->p_file, "#EXTM3U\n" ); /* Go through the playlist and add items */ - for( i = 0; i< p_playlist->i_size ; i++) + for( i = 0; i< p_export->p_root->i_children ; i++) { + playlist_item_t *p_current = p_export->p_root->pp_children[i]; + if( p_current->i_flags & PLAYLIST_SAVE_FLAG ) + continue; + /* General info */ - if( p_playlist->pp_items[i]->input.psz_name && - strcmp( p_playlist->pp_items[i]->input.psz_name, - p_playlist->pp_items[i]->input.psz_uri ) ) + if( p_current->p_input->psz_name && + strcmp( p_current->p_input->psz_uri, + p_current->p_input->psz_name ) ) { - char *psz_author = - playlist_GetInfo( p_playlist, i, _("General"), _("Author") ); - - fprintf( p_export->p_file, "#EXTINF:%i,%s,%s\n", - (int)(p_playlist->pp_items[i]->input.i_duration/1000000), - psz_author ? psz_author : "", - p_playlist->pp_items[i]->input.psz_name ); + char *psz_artist = p_current->p_input->p_meta->psz_artist ? + strdup( p_current->p_input->p_meta->psz_artist ): + strdup( "" ); + if( psz_artist && *psz_artist ) + { + /* write EXTINF with artist */ + fprintf( p_export->p_file, "#EXTINF:%i,%s - %s\n", + (int)( p_current->p_input->i_duration/1000000 ), + psz_artist, + p_current->p_input->psz_name); + } + else + { + /* write EXTINF without artist */ + fprintf( p_export->p_file, "#EXTINF:%i,%s\n", + (int)( p_current->p_input->i_duration/1000000 ), + p_current->p_input->psz_name); + } + if( psz_artist ) + free( psz_artist ); } /* VLC specific options */ - for( j = 0; j < p_playlist->pp_items[i]->input.i_options; j++ ) + for( j = 0; j < p_current->p_input->i_options; j++ ) { fprintf( p_export->p_file, "#EXTVLCOPT:%s\n", - p_playlist->pp_items[i]->input.ppsz_options[j][0] == ':' ? - p_playlist->pp_items[i]->input.ppsz_options[j] + 1 : - p_playlist->pp_items[i]->input.ppsz_options[j] ); + p_current->p_input->ppsz_options[j][0] == ':' ? + p_current->p_input->ppsz_options[j] + 1 : + p_current->p_input->ppsz_options[j] ); } fprintf( p_export->p_file, "%s\n", - p_playlist->pp_items[i]->input.psz_uri ); + p_current->p_input->psz_uri ); } return VLC_SUCCESS; }