playlist.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:7k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * playlist.c :  Playlist import module
  3.  *****************************************************************************
  4.  * Copyright (C) 2004 the VideoLAN team
  5.  * $Id: 244bfcf1bde2d0d0475e43e01a16d369b398011f $
  6.  *
  7.  * Authors: Clément 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #ifdef HAVE_CONFIG_H
  27. # include "config.h"
  28. #endif
  29. #include <vlc_common.h>
  30. #include <vlc_plugin.h>
  31. #include <vlc_demux.h>
  32. #include "playlist.h"
  33. /*****************************************************************************
  34.  * Module descriptor
  35.  *****************************************************************************/
  36. #define AUTOSTART_TEXT N_( "Auto start" )
  37. #define AUTOSTART_LONGTEXT N_( "Automatically start playing the playlist " 
  38.                 "content once it's loaded." )
  39. #define SHOW_ADULT_TEXT N_( "Show shoutcast adult content" )
  40. #define SHOW_ADULT_LONGTEXT N_( "Show NC17 rated video streams when " 
  41.                 "using shoutcast video playlists." )
  42. #define SKIP_ADS_TEXT N_( "Skip ads" )
  43. #define SKIP_ADS_LONGTEXT N_( "Use playlist options usually used to prevent " 
  44.     "ads skipping to detect ads and prevent adding them to the playlist." )
  45. vlc_module_begin ()
  46.     add_shortcut( "playlist" )
  47.     set_category( CAT_INPUT )
  48.     set_subcategory( SUBCAT_INPUT_DEMUX )
  49.     add_bool( "playlist-autostart", 1, NULL,
  50.               AUTOSTART_TEXT, AUTOSTART_LONGTEXT, false )
  51.     add_integer( "parent-item", 0, NULL, NULL, NULL, true )
  52.         change_internal ()
  53.     add_bool( "playlist-skip-ads", 1, NULL,
  54.               SKIP_ADS_TEXT, SKIP_ADS_LONGTEXT, false )
  55.     set_shortname( N_("Playlist") )
  56.     set_description( N_("Playlist") )
  57.     add_submodule ()
  58.         set_description( N_("M3U playlist import") )
  59.         add_shortcut( "playlist" )
  60.         add_shortcut( "m3u" )
  61.         add_shortcut( "m3u8" )
  62.         add_shortcut( "m3u-open" )
  63.         set_capability( "demux", 10 )
  64.         set_callbacks( Import_M3U, Close_M3U )
  65.     add_submodule ()
  66.         set_description( N_("RAM playlist import") )
  67.         add_shortcut( "playlist" )
  68.         add_shortcut( "ram-open" )
  69.         set_capability( "demux", 10 )
  70.         set_callbacks( Import_RAM, Close_RAM )
  71.     add_submodule ()
  72.         set_description( N_("PLS playlist import") )
  73.         add_shortcut( "playlist" )
  74.         add_shortcut( "pls-open" )
  75.         set_capability( "demux", 10 )
  76.         set_callbacks( Import_PLS, Close_PLS )
  77.     add_submodule ()
  78.         set_description( N_("B4S playlist import") )
  79.         add_shortcut( "playlist" )
  80.         add_shortcut( "b4s-open" )
  81.         add_shortcut( "shout-b4s" )
  82.         set_capability( "demux", 10 )
  83.         set_callbacks( Import_B4S, Close_B4S )
  84.     add_submodule ()
  85.         set_description( N_("DVB playlist import") )
  86.         add_shortcut( "playlist" )
  87.         add_shortcut( "dvb-open" )
  88.         set_capability( "demux", 10 )
  89.         set_callbacks( Import_DVB, Close_DVB )
  90.     add_submodule ()
  91.         set_description( N_("Podcast parser") )
  92.         add_shortcut( "playlist" )
  93.         add_shortcut( "podcast" )
  94.         set_capability( "demux", 10 )
  95.         set_callbacks( Import_podcast, Close_podcast )
  96.     add_submodule ()
  97.         set_description( N_("XSPF playlist import") )
  98.         add_shortcut( "playlist" )
  99.         add_shortcut( "xspf-open" )
  100.         set_capability( "demux", 10 )
  101.         set_callbacks( Import_xspf, Close_xspf )
  102.     add_submodule ()
  103.         set_description( N_("New winamp 5.2 shoutcast import") )
  104.         add_shortcut( "playlist" )
  105.         add_shortcut( "shout-winamp" )
  106.         set_capability( "demux", 10 )
  107.         set_callbacks( Import_Shoutcast, Close_Shoutcast )
  108.         add_bool( "shoutcast-show-adult", false, NULL,
  109.                    SHOW_ADULT_TEXT, SHOW_ADULT_LONGTEXT, false )
  110.     add_submodule ()
  111.         set_description( N_("ASX playlist import") )
  112.         add_shortcut( "playlist" )
  113.         add_shortcut( "asx-open" )
  114.         set_capability( "demux", 10 )
  115.         set_callbacks( Import_ASX, Close_ASX )
  116.     add_submodule ()
  117.         set_description( N_("Kasenna MediaBase parser") )
  118.         add_shortcut( "playlist" )
  119.         add_shortcut( "sgimb" )
  120.         set_capability( "demux", 10 )
  121.         set_callbacks( Import_SGIMB, Close_SGIMB )
  122.     add_submodule ()
  123.         set_description( N_("QuickTime Media Link importer") )
  124.         add_shortcut( "playlist" )
  125.         add_shortcut( "qtl" )
  126.         set_capability( "demux", 10 )
  127.         set_callbacks( Import_QTL, Close_QTL )
  128.     add_submodule ()
  129.         set_description( N_("Google Video Playlist importer") )
  130.         add_shortcut( "playlist" )
  131.         add_shortcut( "gvp" )
  132.         set_capability( "demux", 10 )
  133.         set_callbacks( Import_GVP, Close_GVP )
  134.     add_submodule ()
  135.         set_description( N_("Dummy ifo demux") )
  136.         add_shortcut( "playlist" )
  137.         set_capability( "demux", 12 )
  138.         set_callbacks( Import_IFO, Close_IFO )
  139.     add_submodule ()
  140.         set_description( N_("iTunes Music Library importer") )
  141.         add_shortcut( "playlist" )
  142.         add_shortcut( "itml" )
  143.         set_capability( "demux", 10 )
  144.         set_callbacks( Import_iTML, Close_iTML )
  145. vlc_module_end ()
  146. /**
  147.  * Find directory part of the path to the playlist file, in case of
  148.  * relative paths inside
  149.  */
  150. char *FindPrefix( demux_t *p_demux )
  151. {
  152.     char *psz_name;
  153.     char *psz_path = strdup( p_demux->psz_path );
  154. #ifndef WIN32
  155.     psz_name = strrchr( psz_path, '/' );
  156. #else
  157.     psz_name = strrchr( psz_path, '\' );
  158.     if( !psz_name ) psz_name = strrchr( psz_path, '/' );
  159. #endif
  160.     if( psz_name ) psz_name[1] = '';
  161.     else *psz_path = '';
  162.     return psz_path;
  163. }
  164. /**
  165.  * Add the directory part of the playlist file to the start of the
  166.  * mrl, if the mrl is a relative file path
  167.  */
  168. char *ProcessMRL( char *psz_mrl, char *psz_prefix )
  169. {
  170.     /* Check for a protocol name.
  171.      * for URL, we should look for "://"
  172.      * for MRL (Media Resource Locator) ([[<access>][/<demux>]:][<source>]),
  173.      * we should look for ":", so we end up looking simply for ":"
  174.      * PB: on some file systems, ':' are valid characters though */
  175.     /* Simple cases first */
  176.     if( !psz_mrl || !*psz_mrl ) return NULL;
  177.     if( !psz_prefix || !*psz_prefix ) return strdup( psz_mrl );
  178.     /* Check if the line specifies an absolute path */
  179.     if( *psz_mrl == '/' || *psz_mrl == '\' ) return strdup( psz_mrl );
  180.     /* Check if the line specifies an mrl/url
  181.      * (and on win32, contains a drive letter) */
  182.     if( strchr( psz_mrl, ':' ) ) return strdup( psz_mrl );
  183.     /* This a relative path, prepend the prefix */
  184.     if( asprintf( &psz_mrl, "%s%s", psz_prefix, psz_mrl ) != -1 )
  185.         return psz_mrl;
  186.     else
  187.         return NULL;
  188. }