[PATCH] Ability to save and load input item options in xspf playlist as it is possible in m3u playlist.
Antoine Lejeune
phytos at via.ecp.fr
Tue Mar 25 12:43:46 CET 2008
---
modules/demux/playlist/xspf.c | 19 ++++++++++++++++++-
modules/demux/playlist/xspf.h | 1 +
modules/misc/playlist/xspf.c | 12 ++++++++++++
3 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c
index 96c74a2..197f229 100644
--- a/modules/demux/playlist/xspf.c
+++ b/modules/demux/playlist/xspf.c
@@ -410,7 +410,7 @@ static vlc_bool_t parse_track_node COMPLEX_INTERFACE
{"duration", SIMPLE_CONTENT, {.smpl = set_item_info} },
{"link", SIMPLE_CONTENT, {NULL} },
{"meta", SIMPLE_CONTENT, {NULL} },
- {"extension", COMPLEX_CONTENT, {.cmplx = skip_element} },
+ {"extension", COMPLEX_CONTENT, {.cmplx = parse_extension_node} },
{NULL, UNKNOWN_CONTENT, {NULL} }
};
@@ -661,6 +661,22 @@ static vlc_bool_t set_item_info SIMPLE_INTERFACE
return VLC_TRUE;
}
+/**
+ * \brief handles the <option> elements
+ */
+static vlc_bool_t set_option SIMPLE_INTERFACE
+{
+ /* exit if setting is impossible */
+ if( !psz_name || !psz_value || !p_input )
+ return VLC_FALSE;
+
+ /* re-convert xml special characters inside psz_value */
+ resolve_xml_special_chars( psz_value );
+
+ input_ItemAddOption( p_input, psz_value );
+
+ return VLC_TRUE;
+}
/**
* \brief parse the extension node of a XSPF playlist
@@ -678,6 +694,7 @@ static vlc_bool_t parse_extension_node COMPLEX_INTERFACE
xml_elem_hnd_t pl_elements[] =
{ {"node", COMPLEX_CONTENT, {.cmplx = parse_extension_node} },
{"item", COMPLEX_CONTENT, {.cmplx = parse_extitem_node} },
+ {"option", SIMPLE_CONTENT, {.smpl = set_option} },
{NULL, UNKNOWN_CONTENT, {NULL} }
};
diff --git a/modules/demux/playlist/xspf.h b/modules/demux/playlist/xspf.h
index d0a5aac..c9bf1fb 100644
--- a/modules/demux/playlist/xspf.h
+++ b/modules/demux/playlist/xspf.h
@@ -47,6 +47,7 @@ static vlc_bool_t parse_track_node COMPLEX_INTERFACE;
static vlc_bool_t parse_extension_node COMPLEX_INTERFACE;
static vlc_bool_t parse_extitem_node COMPLEX_INTERFACE;
static vlc_bool_t set_item_info SIMPLE_INTERFACE;
+static vlc_bool_t set_option SIMPLE_INTERFACE;
static vlc_bool_t skip_element COMPLEX_INTERFACE;
/* datatypes */
diff --git a/modules/misc/playlist/xspf.c b/modules/misc/playlist/xspf.c
index eb6fe40..d87cfd2 100644
--- a/modules/misc/playlist/xspf.c
+++ b/modules/misc/playlist/xspf.c
@@ -115,6 +115,7 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
{
char *psz;
char *psz_temp;
+ int i;
mtime_t i_duration;
if( !p_item ) return;
@@ -224,6 +225,17 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
free( psz_uri );
}
free( psz );
+
+ /* export the input's options (bookmarks, ...) in <extension> */
+ fprintf( p_file, "\t\t\t<extension application=\"http://www.videolan.org/vlc/playlist/0\">\n" );
+ for( i = 0; i < p_item->p_input->i_options; i++ )
+ {
+ fprintf( p_file, "\t\t\t\t<option>%s</option>\n",
+ p_item->p_input->ppsz_options[i][0] == ':' ?
+ p_item->p_input->ppsz_options[i] + 1 :
+ p_item->p_input->ppsz_options[i] );
+ }
+ fprintf( p_file, "\t\t\t</extension>\n" );
xspfexportitem_end:
/* -> the duration */
--
1.5.3.7
--+QahgC5+KEYLbs62
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="0002-Ability-to-remember-the-item-playing-when-VLC-is-clo.patch"
More information about the vlc-devel
mailing list