"); $aret = explode("
  • ",$ret); $aret = array_slice($aret,1); return $aret; } return ""; } //aXBMCCmd function XBMCCmd($cmd, $param=''){ if($param == ''){ $fs = fopen("http://" . conf('localplay_xbmc_hostname') . "/xbmcCmds/xbmcHttp?command=" . $cmd,"r"); }else{ $fs = fopen("http://" . conf('localplay_xbmc_hostname') . "/xbmcCmds/xbmcHttp?command=" . $cmd . "¶meter=" . $param,"r"); } if($fs){ stream_set_timeout($fs,1); $ret = ""; while (!feof($fs)) { $ret = $ret . fgets($fs, 128); } fclose($fs); $ret = strip_tags($ret); return trim($ret); } return ""; }//XBMCCmd // /** * preference * This function returns an array of the preferences and their * information for Ampache to use All preferences will get a * localplay_xbmc_ appended to their name to avoid conflicts * however this controller does not need to take that into acount * REQUIRE for Locaplay */ function preferences() { $preferences = array(); $preferences[] = array('name'=>'hostname','default'=>'xbox','type'=>'string','description'=>'XBOX Hostname'); $preferences[] = array('name'=>'smbpath','default'=>'smb://hostname/mp3/','type'=>'string','description'=>'Samba share path to mp3s'); //needed to add basic authentication support later //$preferences[] = array('name'=>'username','default'=>'xbox','type'=>'string','description'=>'XBMC Username'); //$preferences[] = array('name'=>'password','default'=>'','type'=>'string','description'=>'XBMC Password'); return $preferences; } // preferences /** * add_songs * This must take an array of URL's from Ampache * and then add them to XBMC */ function add_songs($songs) { //set playlist to music, playlist 0 $ret = $this->XBMCCmd("SetCurrentPlaylist","0"); if ($ret != "OK") { debug_event('xbmc_add','Error: Unable to set playlist on xbmc ' . $ret,'1'); } foreach ($songs as $song_id) { $song = new Song($song_id); //print($song->get_rel_path()); $url = conf('localplay_xbmc_smbpath') . $song->get_rel_path(); //add song to playlist 0, note the ;0 after the url... $ret = $this->XBMCCmd("AddToPlayList",urlencode($url . ";0")); //print(urlencode($url).";0"); if ($ret != "OK") { debug_event('xbmc_add','Error: Unable to add $url to xbmc ' . $ret,'1'); } } // end foreach 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 */ //RemoveFromPlaylist foreach ($songs as $song_id) { $song = new Song($song_id); $url = conf('localplay_xbmc_smbpath') . $song->get_rel_path(); $ret = $this->XBMCCmd("RemoveFromPlaylist",urlencode($url . ";0")); if ($ret != "OK") { $return = false; debug_event('xbmc_del','Error: Unable to del $url from xbmc ' . $ret,'1'); } } // foreach of songs return $return; } // delete_songs /** * play * This just tells XBMC to start playing, it does not * take any arguments, it plays the NEXT track on the * playlist or the first one if it is the first time... */ function play() { if ($this->XBMCCmd("PlayNext")!="OK") { return false; } return true; } // play /** * stop * This just tells XBMC to stop playing, it does not take * any arguments */ function stop() { if ($this->XBMCCmd("Stop")!="OK") { return false; } return true; } // stop /** * next * This just tells XBMC to skip to the next song */ function next() { if ($this->XBMCCmd("PlayNext")!="OK") { return false; } return true; } // next /** * prev * This just tells XBMC to skip to the prev song */ function prev() { if ($this->XBMCCmd("PlayPrev")!="OK") { return false; } return true; } // prev /** * pause * This tells XBMC to pause the current song */ function pause() { if ($this->XBMCCmd("Pause")!="OK") { return false; } return true; } // pause /** * volume * This tells XBMC to set the volume to the parameter */ function volume_set($volume) { if ($this->XBMCCmd("SetVolume",$volume)!="OK") { return false; } return true; } // volume /** * xbmc_shutdown * This tells XBMC to turn off */ function xbmc_shutdown() { if ($this->XBMCCmd("shutdown")!="OK") { return false; } return true; } // xbmc_shutdown /** * clear_playlist * This tells XBMC to clear the playlist */ function clear_playlist() { if ($this->XBMCCmd("clearplaylist","0")!="OK") { return false; } return true; } // clear_playlist /** * get_songs * This functions returns an array containing information about * The songs that XBMC currently has in it's playlist. This must be * done in a standardized fashion */ function get_songs() { /* Get the Current Playlist */ //echo $this->XBMCCmd("getcurrentplaylist"); $playlist = $this->aXBMCCmd("getplaylistcontents","0"); foreach ($playlist as $entry) { $data = array(); /* Required Elements */ $data['id'] = get_song_id_from_file(trim(substr($entry,strrpos($entry,"/")+1))); $data['raw'] = ''; /* Optional Elements */ $song = new Song($data['id']); $song->format_song(); $data['name'] = $song->f_artist . " - " . $song->f_title; $results[] = $data; } // 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'] = false; //$this->_mpd->state; $array['volume'] = $this->XBMCCmd("GetVolume"); return $array; } // get_status /** * connect * This functions tests the connection to XBMC and returns * a boolean value for the status */ function connect() { if (is_null($this->XBMCCmd("help"))) { return false; } return true; } // connect } //end of AmpacheXBMC ?>