[vlc-commits] Lua demuxers: show the original URL in playlist

Mario Speiß git at videolan.org
Mon Apr 15 11:47:53 CEST 2013


vlc | branch: master | Mario Speiß <1034-135 at online.de> | Sun Feb 10 22:31:58 2013 +0100| [18c00a3862853a83a7b7349f65dc428885ebdd12] | committer: Jean-Baptiste Kempf

Lua demuxers: show the original URL in playlist

If playlists containing youtube urls are exported or imported, these patches
improve the usability of the playlist.

Lua remembers the original url (i.e. the website _containing_ the content) if
no other url is passed by the lua parsers. It also puts the content title to
the meta-title entry.

XSPF export / import now uses the <info> to deal with the meta-url.

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=18c00a3862853a83a7b7349f65dc428885ebdd12
---

 modules/demux/playlist/xspf.c |    4 +++-
 modules/lua/vlc.c             |   20 ++++++++++++++++++++
 modules/misc/playlist/xspf.c  |    5 +++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c
index 92c60c2..8606759 100644
--- a/modules/demux/playlist/xspf.c
+++ b/modules/demux/playlist/xspf.c
@@ -355,7 +355,7 @@ static bool parse_track_node COMPLEX_INTERFACE
           {"title",        {.smpl = set_item_info}, false },
           {"creator",      {.smpl = set_item_info}, false },
           {"annotation",   {.smpl = set_item_info}, false },
-          {"info",         {NULL}, false },
+          {"info",         {.smpl = set_item_info}, false },
           {"image",        {.smpl = set_item_info}, false },
           {"album",        {.smpl = set_item_info}, false },
           {"trackNum",     {.smpl = set_item_info}, false },
@@ -545,6 +545,8 @@ static bool set_item_info SIMPLE_INTERFACE
     }
     else if (!strcmp(psz_name, "annotation"))
         input_item_SetDescription(p_input, psz_value);
+    else if (!strcmp(psz_name, "info"))
+        input_item_SetURL(p_input, psz_value);
     else if (!strcmp(psz_name, "image"))
         input_item_SetArtURL(p_input, psz_value);
     return true;
diff --git a/modules/lua/vlc.c b/modules/lua/vlc.c
index 90ea73e..1da88ce 100644
--- a/modules/lua/vlc.c
+++ b/modules/lua/vlc.c
@@ -486,6 +486,7 @@ int vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L,
                 /* playlist key item path */
                 if( lua_isstring( L, -1 ) )
                 {
+                    char         *psz_oldurl   = NULL;
                     const char   *psz_path     = NULL;
                     char         *psz_u8path   = NULL;
                     const char   *psz_name     = NULL;
@@ -495,6 +496,8 @@ int vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L,
                     input_item_t *p_input;
 
                     /* Read path and name */
+                    psz_oldurl = input_item_GetURI( p_parent );
+                    msg_Dbg( p_this, "old path: %s", psz_oldurl );
                     psz_path = lua_tostring( L, -1 );
                     msg_Dbg( p_this, "Path: %s", psz_path );
                     lua_getfield( L, -2, "name" );
@@ -542,6 +545,23 @@ int vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L,
                     /* Read meta data: item must be on top of stack */
                     vlclua_read_meta_data( p_this, L, p_input );
 
+                    /* copy the original URL to the meta data, if "URL" is still empty */
+                    char* url = input_item_GetURL( p_input );
+                    if( url == NULL )
+                    {
+                        EnsureUTF8( psz_oldurl );
+                        msg_Dbg( p_this, "meta-URL: %s", psz_oldurl );
+                        input_item_SetURL ( p_input, psz_oldurl );
+                    }
+                    free( url );
+                    free( psz_oldurl );
+
+                    /* copy the psz_name to the meta data, if "Title" is still empty */
+                    char* title = input_item_GetTitle( p_input );
+                    if( title == NULL )
+                        input_item_SetTitle ( p_input, psz_name );
+                    free( title );
+
                     /* Read custom meta data: item must be on top of stack*/
                     vlclua_read_custom_meta_data( p_this, L, p_input );
 
diff --git a/modules/misc/playlist/xspf.c b/modules/misc/playlist/xspf.c
index ffc1cee..e41cd25 100644
--- a/modules/misc/playlist/xspf.c
+++ b/modules/misc/playlist/xspf.c
@@ -127,6 +127,11 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
         fprintf( p_file, "\t\t\t<annotation>%s</annotation>\n", psz );
     free( psz );
 
+    psz = input_xml( p_input, input_item_GetURL );
+    if( psz && *psz )
+        fprintf( p_file, "\t\t\t<info>%s</info>\n", psz );
+    free( psz );
+
     psz = input_xml( p_input, input_item_GetArtURL );
     if( psz && *psz )
         fprintf( p_file, "\t\t\t<image>%s</image>\n", psz );



More information about the vlc-commits mailing list