[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