[vlc-devel] [PATCH] Improve the playlist experience

Mario Speiß 1034-135 at online.de
Sun Feb 10 22:31:58 CET 2013


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.

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

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 0c43e07..964b6c8 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 );
-- 
1.7.5.4




More information about the vlc-devel mailing list