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 )
while( elt.hasChildNodes() )
elt.removeChild( elt.firstChild );
}
function playlist_populated()
{
if( document.getElementById( 'playtree' ) != null && document.getElementById( 'playtree' ).childElementCount > 0 )
{
return true;
}
return false;
}
/**********************************************************************
* Interface actions
......@@ -332,22 +340,22 @@ function pl_previous()
function pl_delete( id )
{
loadXMLDoc( 'requests/status.xml?command=pl_delete&id='+id, parse_status );
setTimeout( 'update_playlist()', 1000 );
setTimeout( 'update_playlist(true)', 1000 );
}
function pl_empty()
{
loadXMLDoc( 'requests/status.xml?command=pl_empty', parse_status );
setTimeout( 'update_playlist()', 1000 );
setTimeout( 'update_playlist(true)', 1000 );
}
function pl_sort( sort, order )
{
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()
{
loadXMLDoc( 'requests/status.xml?command=pl_random', parse_status );
setTimeout( 'update_playlist()', 1000 );
setTimeout( 'update_playlist(true)', 1000 );
}
function pl_loop()
{
......@@ -395,9 +403,16 @@ function update_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()
var nowplaying = document.getElementById( 'nowplaying' );
clear_children( nowplaying );
nowplaying.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) );
pl.appendChild( document.createTextNode( '* '));
pl.appendChild( document.createTextNode( '' ));
pl_cur_id = elt.getAttribute( 'id' );
}
pl.setAttribute( 'title', elt.getAttribute( 'uri' ));
......@@ -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
*********************************************************************/
......
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