'tracklist','default'=>'/var/tmp/tracklist.txt','type'=>'string','description'=>'Icecast Tracklist');
$preferences[] = array('name'=>'basedir','default'=>'/var/tmp','type'=>'string','description'=>'Icecast BaseDir');
$preferences[] = array('name'=>'config','default'=>'/usr/local/etc/ices.conf','type'=>'string','description'=>'Icecast Config');
$preferences[] = array('name'=>'command','default'=>'/usr/local/bin/ices','type'=>'string','description'=>'Icecast Command');
return $preferences;
} // preferences
/**
* add_songs
* This must take an array of URL's from Ampache
* and then add them to MPD
*/
function add_songs($songs) {
$filename = conf('localplay_icecast_tracklist');
//echo "$filename " . _("Opened for writing") . "
\n";
/* Open the file for writing */
if (!$handle = @fopen($filename, "w")) {
debug_event('icecast',"Fopen: $filename Failed",'3');
return false;
}
foreach ($songs as $song_id) {
$song = new Song($song_id);
$url = $song->get_url();
//echo "$song->file
\n";
$line = "$song->file\n";
if (!fwrite($handle, $line)) {
debug_event('icecast',"Fwrite: Unabled to write $line into $filename",'3');
return false;
} // if write fails
} // end foreach
//echo $filename . " " . _("Closed after write") . "
\n";
fclose($handle);
return true;
} // add_songs
/**
* delete_songs
* This must take an array of ID's (as passed by get function) from Ampache
* and delete them from MPD
*/
function delete_songs($songs) {
/* Default to true */
$return = true;
/* This should be an array of UID's as returned by
* the get function so that we can just call the class based
* functions to remove them or if there isn't a uid for
* the songs, then however ya'll have stored them
* in this controller
*/
foreach ($songs as $uid) {
//if (is_null($this->_icecast->plremove($uid))) { $return = false; }
} // foreach of songs
//return $return;
return $false;
} // delete_songs
/**
* play
* This just tells ICES to start playing, it does not
* take any arguments
*/
function play() {
// get the pid from basedir and reload tracklist information
$pid = conf('localplay_icecast_basedir') . "/ices.pid";
$PrevPid = file_get_contents($pid);
if(($PrevPid !== FALSE) && posix_kill(rtrim($PrevPid),0)) {
//echo "Error: Server is already running with PID: $PrevPid\n";
// Causes ices to exit (can be in stop function)
//$restart = "kill -s SIGTERM " . $PrevPid;
// Causes ices to close and reopen the log file and the playlist
$reload = "kill -s SIGHUP " . $PrevPid;
// Causes ices to skip to the next track in the playlist immediately.
$next = "kill -s SIGUSR1 " . $PrevPid;
exec($reload);
exec($next);
//exit(-99);
} else {
//echo "Starting Server...\n";
$cmd = conf('localplay_icecast_command') . " -c " . conf('localplay_icecast_config') . " -F " . conf('localplay_icecast_tracklist') . " -B";
debug_event('icecast',"Exec: $cmd",'5');
exec($cmd);
}
return true;
} // play
/**
* stop
* This just tells MPD to stop playing, it does not take
* any arguments
*/
function stop() {
// get the pid from basedir and reload tracklist information
$pid = conf('localplay_icecast_basedir') . "/ices.pid";
$PrevPid = file_get_contents($pid);
if(($PrevPid !== FALSE) && posix_kill(rtrim($PrevPid),0)) {
// Causes ices to exit (can be in stop function)
$stop = "kill -s SIGTERM " . $PrevPid;
exec($stop);
return true;
}
return false;
} // stop
/**
* next
* This just tells MPD to skip to the next song
*/
function next() {
// get the pid from basedir and reload tracklist information
$pid = conf('localplay_icecast_basedir') . "/ices.pid";
$PrevPid = file_get_contents($pid);
if(($PrevPid !== FALSE) && posix_kill(rtrim($PrevPid),0)) {
// Causes ices to exit (can be in stop function)
$next = "kill -s SIGUSR1 " . $PrevPid;
exec($next);
return true;
}
return false;
} // next
/**
* prev
* This just tells MPD to skip to the prev song
*/
/**
* get_songs
* This functions returns an array containing information about
* The songs that ICES currently has in it's playlist. This must be
* done in a standardized fashion
*/
function get_songs() {
/* Get the Current Playlist */
$source = conf('localplay_icecast_tracklist');
$playlist = array_map('rtrim',file($source));
$i = 1;
foreach ($playlist as $entry) {
$data = array();
/* Required Elements */
$data['id'] = $i;
//$data['raw'] = $entry;
/* Parse out the song ID and then create the song object */
$sql = "SELECT id FROM song WHERE file LIKE '" . sql_escape($entry) . "'";
$db_results = mysql_query($sql, dbh());
$dbdata = mysql_fetch_assoc($db_results);
$song = new Song($dbdata['id']);
$song->format_song();
$data['name'] = $song->f_artist . ' - ' . $song->f_title;
//$data['name'] = $song->f_title . ' - ' . $song->f_album . ' - ' . $song->f_artist;
/* Just incase prevent emtpy names */
if (!$song->title) { $data['name'] = _('Unknown'); }
/* Optional Elements */
$data['link'] = '';
$data['track'] = $i;
$results[] = $data;
$i++;
} // foreach playlist items
return $results;
} // get_songs
/**
* get_status
* This returns bool/int values for features, loop, repeat and any other features
* That this localplay method support
*/
function get_status() {
/* Construct the Array */
//$array['state'] = $this->_icecast->state;
//$array['repeat'] = $this->_icecast->repeat;
//$array['random'] = $this->_icecast->random;
//return $array;
} // get_status
/**
* connect
* This functions creates the connection to MPD and returns
* a boolean value for the status, to save time this handle
* is stored in this class
*/
function connect() {
// ICECAST server checkout
// can be implemented here
// is it running?
// so we can put ICECAST host, port, url
// and check against it...
return true;
} // connect
} //end of AmpacheIcecast
?>