1 /*****************************************************************************
2 * playlist.c : Playlist import module
3 *****************************************************************************
4 * Copyright (C) 2004 VideoLAN
5 * $Id: playlist.c,v 1.2 2004/01/11 17:46:58 sigmunau Exp $
7 * Authors: Clément Stenac <zorglub@videolan.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
22 *****************************************************************************/
24 /*****************************************************************************
26 *****************************************************************************/
32 /*****************************************************************************
34 *****************************************************************************/
37 add_shortcut( "playlist" );
39 set_description( _("Old playlist open") );
40 add_shortcut( "old-open" );
41 set_capability( "demux2" , 10 );
42 set_callbacks( Import_Old , NULL );
45 set_description( _("M3U playlist import") );
46 add_shortcut( "m3u-open" );
47 set_capability( "demux2" , 10 );
48 set_callbacks( Import_M3U , Close_M3U );
50 set_description( _("PLS playlist import") );
51 add_shortcut( "pls-open" );
52 set_capability( "demux2" , 10 );
53 set_callbacks( Import_PLS , Close_PLS );
58 * Find directory part of the path to the playlist file, in case of
59 * relative paths inside
61 char *FindPrefix( demux_t *p_demux )
64 char *psz_path = strdup( p_demux->psz_path );
67 psz_name = strrchr( psz_path, '/' );
69 psz_name = strrchr( psz_path, '\\' );
70 if ( ! psz_name ) psz_name = strrchr( psz_path, '/' );
72 if( psz_name ) *psz_name = '\0';
73 else *psz_path = '\0';
78 * Add the directory part of the playlist file to the start of the
79 * mrl, if the mrl is a relative file path
81 char *ProcessMRL( char *psz_mrl, char *psz_prefix )
84 /* check for a protocol name */
85 /* for URL, we should look for "://"
86 * for MRL (Media Resource Locator) ([[<access>][/<demux>]:][<source>]),
87 * we should look for ":"
88 * so we end up looking simply for ":"*/
89 /* PB: on some file systems, ':' are valid characters though*/
91 while( *psz_name && *psz_name!=':' )
96 if ( *psz_name && ( psz_name == psz_mrl + 1 ) )
98 /* if it is not an URL,
99 * as it is unlikely to be an MRL (PB: if it is ?)
100 * it should be an absolute file name with the drive letter */
101 if ( *(psz_name+1) == '/' )/* "*:/" */
103 if ( *(psz_name+2) != '/' )/* not "*://" */
104 while ( *psz_name ) *psz_name++;/* so now (*psz_name==0) */
106 else while ( *psz_name ) *psz_name++;/* "*:*"*/
110 /* if the line doesn't specify a protocol name,
111 * check if the line has an absolute or relative path */
113 if( !*psz_name && *psz_mrl != '/' )
114 /* If this line doesn't begin with a '/' */
119 && *(psz_mrl+1)!=':' )
120 /* if this line doesn't begin with
121 * "/" or "\" or "*:" or "*:\" or "*:/" or "\\" */
125 psz_name = malloc( strlen(psz_prefix) + strlen(psz_mrl) + 2 );
126 sprintf( psz_name, "%s/%s", psz_prefix, psz_mrl );
128 if ( *p_m3u->psz_prefix != '\0' )
130 psz_name = malloc( strlen(psz_prefix) + strlen(psz_mrl) + 2 );
131 sprintf( psz_name, "%s\\%s", psz_prefix, psz_mrl );
133 else psz_name = strdup( psz_mrl );
138 psz_name = strdup( psz_mrl );