]> git.sesse.net Git - vlc/blobdiff - modules/demux/playlist/pls.c
all: updated my name and e-mail address
[vlc] / modules / demux / playlist / pls.c
index bc76f0365312a2621c13bd18dc0ba547090eb04f..6bd42f081c8175650d94129b3fc8ac8f7fd8841e 100644 (file)
@@ -1,11 +1,11 @@
 /*****************************************************************************
  * pls.c : PLS playlist format import
  *****************************************************************************
- * Copyright (C) 2004 VideoLAN
+ * Copyright (C) 2004 the VideoLAN team
  * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
- * Authors: Sigmund Augdal <sigmunau@idi.ntnu.no>
+ * Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
  *
  * 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
@@ -48,21 +48,17 @@ static int Control( demux_t *p_demux, int i_query, va_list args );
 /*****************************************************************************
  * Import_PLS: main import function
  *****************************************************************************/
-int Import_PLS( vlc_object_t *p_this )
+int E_(Import_PLS)( vlc_object_t *p_this )
 {
     demux_t *p_demux = (demux_t *)p_this;
 
     uint8_t *p_peek;
     char    *psz_ext;
 
-    if( stream_Peek( p_demux->s , &p_peek, 7 ) < 7 )
-    {
-        msg_Err( p_demux, "cannot peek" );
-        return VLC_EGENERIC;
-    }
+    if( stream_Peek( p_demux->s , &p_peek, 7 ) < 7 ) return VLC_EGENERIC;
     psz_ext = strrchr ( p_demux->psz_path, '.' );
 
-    if( !strncasecmp( p_peek, "[playlist]", 10 ) )
+    if( !strncasecmp( (char *)p_peek, "[playlist]", 10 ) )
     {
         ;
     }
@@ -71,12 +67,8 @@ int Import_PLS( vlc_object_t *p_this )
     {
         ;
     }
-    else
-    {
-        msg_Warn(p_demux, "pls import module discarded");
-        return VLC_EGENERIC;
-        
-    }
+    else return VLC_EGENERIC;
+
     msg_Dbg( p_demux, "found valid PLS playlist file");
 
     p_demux->pf_control = Control;
@@ -87,7 +79,7 @@ int Import_PLS( vlc_object_t *p_this )
         msg_Err( p_demux, "Out of memory" );
         return VLC_ENOMEM;
     }
-    p_demux->p_sys->psz_prefix = FindPrefix( p_demux );
+    p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
 
     return VLC_SUCCESS;
 }
@@ -95,7 +87,7 @@ int Import_PLS( vlc_object_t *p_this )
 /*****************************************************************************
  * Deactivate: frees unused data
  *****************************************************************************/
-void Close_PLS( vlc_object_t *p_this )
+void E_(Close_PLS)( vlc_object_t *p_this )
 {
     demux_t *p_demux = (demux_t *)p_this;
     if( p_demux->p_sys->psz_prefix )
@@ -108,7 +100,7 @@ void Close_PLS( vlc_object_t *p_this )
 static int Demux( demux_t *p_demux )
 {
     mtime_t        i_duration = -1;
-    char          *psz_name = NULL;    
+    char          *psz_name = NULL;
     char          *psz_line;
     char          *psz_mrl = NULL;
     char          *psz_key;
@@ -119,6 +111,7 @@ static int Demux( demux_t *p_demux )
     int            i_new_item = 0;
     int            i_key_length;
     playlist_item_t *p_parent;
+    vlc_bool_t b_play;
 
     p_playlist = (playlist_t *) vlc_object_find( p_demux, VLC_OBJECT_PLAYLIST,
                                                  FIND_PARENT );
@@ -127,15 +120,16 @@ static int Demux( demux_t *p_demux )
         msg_Err( p_demux, "can't find playlist" );
         return -1;
     }
-    p_parent = p_playlist->status.p_item;
+
+    b_play = E_(FindItem)( p_demux, p_playlist, &p_parent );
     p_parent->input.i_type = ITEM_TYPE_PLAYLIST;
 
-//    p_playlist->pp_items[p_playlist->i_index]->b_autodeletion = VLC_TRUE;
-    /* Change the item to a node */    
-    if( p_parent->i_children == -1)    
-    {  
-        playlist_ItemToNode( p_playlist,p_parent );    
-    }    
+    /* Change the item to a node */
+    if( p_parent->i_children == -1)
+    {
+        playlist_ItemToNode( p_playlist,p_parent );
+    }
+
     while( ( psz_line = stream_ReadLine( p_demux->s ) ) )
     {
         if( !strncasecmp( psz_line, "[playlist]", sizeof("[playlist]")-1 ) )
@@ -193,12 +187,12 @@ static int Demux( demux_t *p_demux )
             {
                 playlist_item_t *p_item = playlist_ItemNew( p_playlist, psz_mrl,
                                                             psz_name );
-                
-                playlist_NodeAddItem( p_playlist,p_item,       
-                                      p_parent->pp_parents[0]->i_view, 
-                                      p_parent,        
-                                      PLAYLIST_APPEND, PLAYLIST_END ); 
-               
+
+                playlist_NodeAddItem( p_playlist,p_item,
+                                      p_parent->pp_parents[0]->i_view,
+                                      p_parent,
+                                      PLAYLIST_APPEND, PLAYLIST_END );
+
                 playlist_CopyParents( p_parent, p_item );
                 if( i_duration != -1 )
                 {
@@ -207,6 +201,9 @@ static int Demux( demux_t *p_demux )
                 i_position++;
                 free( psz_mrl );
                 psz_mrl = NULL;
+
+                vlc_input_item_CopyOptions( &p_parent->input,
+                                            &p_item->input );
             }
             else
             {
@@ -223,7 +220,7 @@ static int Demux( demux_t *p_demux )
         }
         if( !strncasecmp( psz_key, "file", sizeof("file") -1 ) )
         {
-            psz_mrl = ProcessMRL( psz_value, p_demux->p_sys->psz_prefix );
+            psz_mrl = E_(ProcessMRL)( psz_value, p_demux->p_sys->psz_prefix );
         }
         else if( !strncasecmp( psz_key, "title", sizeof("title") -1 ) )
         {
@@ -248,12 +245,12 @@ static int Demux( demux_t *p_demux )
     {
         playlist_item_t *p_item = playlist_ItemNew( p_playlist, psz_mrl,
                                                     psz_name );
-        
-        playlist_NodeAddItem( p_playlist,p_item,       
-                              p_parent->pp_parents[0]->i_view, 
-                              p_parent,        
-                              PLAYLIST_APPEND, PLAYLIST_END ); 
-               
+
+        playlist_NodeAddItem( p_playlist,p_item,
+                              p_parent->pp_parents[0]->i_view,
+                              p_parent,
+                              PLAYLIST_APPEND, PLAYLIST_END );
+
         playlist_CopyParents( p_parent, p_item );
         if( i_duration != -1 )
         {
@@ -261,6 +258,9 @@ static int Demux( demux_t *p_demux )
         }
         free( psz_mrl );
         psz_mrl = NULL;
+
+        vlc_input_item_CopyOptions( &p_parent->input,
+                                    &p_item->input );
     }
     else
     {
@@ -272,8 +272,14 @@ static int Demux( demux_t *p_demux )
         psz_name = NULL;
     }
 
-    playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,p_playlist->status.i_view, 
-                      p_playlist->status.p_item, NULL );
+    if( b_play && p_playlist->status.p_item &&
+        p_playlist->status.p_item->i_children > 0 )
+    {
+        playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+                          p_playlist->status.i_view,
+                          p_playlist->status.p_item,
+                          p_playlist->status.p_item->pp_children[0] );
+    }
     vlc_object_release( p_playlist );
     return VLC_SUCCESS;
 }