@ -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
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /