playlist.c
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:4k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * playlist.c :  Playlist import module
  3.  *****************************************************************************
  4.  * Copyright (C) 2004 VideoLAN
  5.  * $Id: playlist.c 8157 2004-07-09 15:15:07Z gbazin $
  6.  *
  7.  * Authors: Cl閙ent Stenac <zorglub@videolan.org>
  8.  *
  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.
  13.  *
  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.
  18.  *
  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.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #include <vlc/vlc.h>
  27. #include <vlc/input.h>
  28. #include "playlist.h"
  29. /*****************************************************************************
  30.  * Module descriptor
  31.  *****************************************************************************/
  32. vlc_module_begin();
  33.     add_shortcut( "playlist" );
  34.     set_description( _("Old playlist open") );
  35.     add_shortcut( "old-open" );
  36.     set_capability( "demux2" , 10 );
  37.     set_callbacks( Import_Old , NULL );
  38.     add_submodule();
  39.     set_description( _("M3U playlist import") );
  40.     add_shortcut( "m3u-open" );
  41.     set_capability( "demux2" , 10 );
  42.     set_callbacks( Import_M3U , Close_M3U );
  43.     add_submodule();
  44.     set_description( _("PLS playlist import") );
  45.     add_shortcut( "pls-open" );
  46.     set_capability( "demux2" , 10 );
  47.     set_callbacks( Import_PLS , Close_PLS );
  48. vlc_module_end();
  49. /**
  50.  * Find directory part of the path to the playlist file, in case of
  51.  * relative paths inside
  52.  */
  53. char *FindPrefix( demux_t *p_demux )
  54. {
  55.     char *psz_name;
  56.     char *psz_path = strdup( p_demux->psz_path );
  57. #ifndef WIN32
  58.     psz_name = strrchr( psz_path, '/' );
  59. #else
  60.     psz_name = strrchr( psz_path, '\' );
  61.     if( !psz_name ) psz_name = strrchr( psz_path, '/' );
  62. #endif
  63.     if( psz_name ) psz_name[1] = '';
  64.     else *psz_path = '';
  65.     return psz_path;
  66. }
  67. /**
  68.  * Add the directory part of the playlist file to the start of the
  69.  * mrl, if the mrl is a relative file path
  70.  */
  71. char *ProcessMRL( char *psz_mrl, char *psz_prefix )
  72. {
  73.     /* Check for a protocol name.
  74.      * for URL, we should look for "://"
  75.      * for MRL (Media Resource Locator) ([[<access>][/<demux>]:][<source>]),
  76.      * we should look for ":", so we end up looking simply for ":"
  77.      * PB: on some file systems, ':' are valid characters though */
  78.     /* Simple cases first */
  79.     if( !psz_mrl || !*psz_mrl ) return NULL;
  80.     if( !psz_prefix || !*psz_prefix ) return strdup( psz_mrl );
  81.     /* Check if the line specifies an absolute path */
  82.     if( *psz_mrl == '/' || *psz_mrl == '\' ) return strdup( psz_mrl );
  83.     /* Check if the line specifies an mrl/url
  84.      * (and on win32, contains a drive letter) */
  85.     if( strchr( psz_mrl, ':' ) ) return strdup( psz_mrl );
  86.     /* This a relative path, prepend the prefix */
  87.     asprintf( &psz_mrl, "%s%s", psz_prefix, psz_mrl );
  88.     return psz_mrl;
  89. }