Commit 8c213790 authored by Mark Hassman's avatar Mark Hassman Committed by Ilkka Ollakka

http-interface: - changed logic so playlist is only downloaded initially and...

http-interface: - changed logic so playlist is only downloaded initially and on modification of playlist

no longer re-downloads playlist on each item change (this was causing
significant delays (>10sec) in the http service with large playlists).. now,
the playlist UI is updated locally based on information returned from
status.xml
Signed-off-by: default avatarIlkka Ollakka <ileoo@videolan.org>
parent 11c280f3
...@@ -279,6 +279,14 @@ function clear_children( elt ) ...@@ -279,6 +279,14 @@ function clear_children( elt )
while( elt.hasChildNodes() ) while( elt.hasChildNodes() )
elt.removeChild( elt.firstChild ); elt.removeChild( elt.firstChild );
} }
function playlist_populated()
{
if( document.getElementById( 'playtree' ) != null && document.getElementById( 'playtree' ).childElementCount > 0 )
{
return true;
}
return false;
}
/********************************************************************** /**********************************************************************
* Interface actions * Interface actions
...@@ -332,22 +340,22 @@ function pl_previous() ...@@ -332,22 +340,22 @@ function pl_previous()
function pl_delete( id ) function pl_delete( id )
{ {
loadXMLDoc( 'requests/status.xml?command=pl_delete&id='+id, parse_status ); loadXMLDoc( 'requests/status.xml?command=pl_delete&id='+id, parse_status );
setTimeout( 'update_playlist()', 1000 ); setTimeout( 'update_playlist(true)', 1000 );
} }
function pl_empty() function pl_empty()
{ {
loadXMLDoc( 'requests/status.xml?command=pl_empty', parse_status ); loadXMLDoc( 'requests/status.xml?command=pl_empty', parse_status );
setTimeout( 'update_playlist()', 1000 ); setTimeout( 'update_playlist(true)', 1000 );
} }
function pl_sort( sort, order ) function pl_sort( sort, order )
{ {
loadXMLDoc( 'requests/status.xml?command=pl_sort&id='+order+'&val='+sort, parse_status ); loadXMLDoc( 'requests/status.xml?command=pl_sort&id='+order+'&val='+sort, parse_status );
setTimeout( 'update_playlist()', 1000 ); setTimeout( 'update_playlist(true)', 1000 );
} }
function pl_shuffle() function pl_shuffle()
{ {
loadXMLDoc( 'requests/status.xml?command=pl_random', parse_status ); loadXMLDoc( 'requests/status.xml?command=pl_random', parse_status );
setTimeout( 'update_playlist()', 1000 ); setTimeout( 'update_playlist(true)', 1000 );
} }
function pl_loop() function pl_loop()
{ {
...@@ -395,9 +403,16 @@ function update_status() ...@@ -395,9 +403,16 @@ function update_status()
loadXMLDoc( 'requests/status.xml', parse_status ); loadXMLDoc( 'requests/status.xml', parse_status );
} }
} }
function update_playlist() function update_playlist(force_refresh)
{ {
loadXMLDoc( 'requests/playlist.xml', parse_playlist ); if( force_refresh || !playlist_populated() )
{
loadXMLDoc( 'requests/playlist.xml', parse_playlist );
}
else
{
loadXMLDoc( 'requests/status.xml', update_playlist_view );
}
} }
/********************************************************************** /**********************************************************************
...@@ -598,7 +613,7 @@ function parse_playlist() ...@@ -598,7 +613,7 @@ function parse_playlist()
var nowplaying = document.getElementById( 'nowplaying' ); var nowplaying = document.getElementById( 'nowplaying' );
clear_children( nowplaying ); clear_children( nowplaying );
nowplaying.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) ); nowplaying.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) );
pl.appendChild( document.createTextNode( '* ')); pl.appendChild( document.createTextNode( '' ));
pl_cur_id = elt.getAttribute( 'id' ); pl_cur_id = elt.getAttribute( 'id' );
} }
pl.setAttribute( 'title', elt.getAttribute( 'uri' )); pl.setAttribute( 'title', elt.getAttribute( 'uri' ));
...@@ -704,6 +719,65 @@ function parse_browse_dir( ) ...@@ -704,6 +719,65 @@ function parse_browse_dir( )
} }
} }
/* updates playlist to display active entry */
function update_playlist_view ()
{
if( req.readyState == 4 ) {
if( req.status == 200 ) {
var status = req.responseXML.documentElement;
var title = status.getElementsByTagName( 'title' );
if( title.length > 0 ) {
title = title[0].firstChild.data;
//update now-playing..
var nowplaying = document.getElementById( 'nowplaying' );
clear_children( nowplaying );
nowplaying.appendChild( document.createTextNode( title ) );
//update playlist..
var playtree = document.getElementById( 'playtree' );
if( playtree.hasChildNodes() )
{
var root = playtree.firstChild; //root div
if( root.hasChildNodes() )
{
for( var i = 0; i < root.childNodes.length - 1; i++ )
{
if ( root.childNodes[i].className == "pl_node" && root.childNodes[i].hasChildNodes() )
{
var node = root.childNodes[i]; //pl_node
if( node.className == "pl_node" && node.hasChildNodes() )
{
for( var j = 0; j < node.childNodes.length - 1; j++ )
{
if( node.childNodes[j].className == "pl_leaf" )
{
var leaf = node.childNodes[j]; //pl_leaf
var pl_title = leaf.textContent.substring( 0, leaf.textContent.length - leaf.text.length )
//if( leaf.style.fontWeight == "bold" && pl_title.substring(0, 2) == "* " ) //handle leaf currently identified as playing..
//{
// pl_title = pl_title.substring(2);
//}
if( pl_title == title )
{
leaf.style.fontWeight = "bold";
}
else
{
leaf.style.fontWeight = "";
}
}
}
}
}
}
}
}
}
}
}
}
/********************************************************************** /**********************************************************************
* Input dialog functions * Input dialog functions
*********************************************************************/ *********************************************************************/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment