diff options
-rwxr-xr-x | docs/CHANGELOG | 1 | ||||
-rw-r--r-- | lib/class/localplay.abstract.php | 17 | ||||
-rw-r--r-- | lib/class/localplay.class.php | 24 | ||||
-rw-r--r-- | lib/class/radio.class.php | 10 | ||||
-rw-r--r-- | lib/class/song.class.php | 4 | ||||
-rw-r--r-- | lib/class/stream.class.php | 45 | ||||
-rw-r--r-- | modules/localplay/mpd.controller.php | 45 | ||||
-rw-r--r-- | modules/mpd/mpd.class.php | 47 | ||||
-rw-r--r-- | server/localplay.ajax.php | 3 |
9 files changed, 112 insertions, 84 deletions
diff --git a/docs/CHANGELOG b/docs/CHANGELOG index 4a859148..48b71043 100755 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -4,6 +4,7 @@ -------------------------------------------------------------------------- v.3.4-Alpha3 + - Based MPD Support Restored - Moved catalog stats off to statistics page - Added basic sorting to all browse pages - Tweaked the Playback to try to fix some issues with WMP diff --git a/lib/class/localplay.abstract.php b/lib/class/localplay.abstract.php index d8e21387..d66750a7 100644 --- a/lib/class/localplay.abstract.php +++ b/lib/class/localplay.abstract.php @@ -50,8 +50,21 @@ abstract class localplay_controller { * get_url * This returns the URL for the passed object */ - private function get_url($object) { + public function get_url($object) { + // This can get a little complicated + switch ($object_type) { + case 'random': + + break; + case 'radio': + case 'song': + default: + $url = $object->get_url(Stream::$session); + break; + } // end switch on objecttype + + return $url; } // get_url @@ -60,7 +73,7 @@ abstract class localplay_controller { * This returns the Filename for the passed object, not * always possible */ - private function get_file($object) { + public function get_file($object) { } // get_file diff --git a/lib/class/localplay.class.php b/lib/class/localplay.class.php index 2f77cfd9..c5b16fd3 100644 --- a/lib/class/localplay.class.php +++ b/lib/class/localplay.class.php @@ -224,14 +224,7 @@ class Localplay { */ public function connect() { - $function = $this->_function_map['connect']; - - /* This is very bad, that means they don't even - * have a connection function defined - */ - if (!$function) { return false; } - - if (!$this->_player->$function()) { + if (!$this->_player->connect()) { debug_event('localplay','Error Unable to connect, check ' . $this->type . ' controller','1'); return false; } @@ -247,9 +240,7 @@ class Localplay { */ public function play() { - $function = $this->_function_map['play']; - - if (!$this->_player->$function()) { + if (!$this->_player->play()) { debug_event('localplay','Error Unable to start playback, check ' . $this->type . ' controller','1'); return false; } @@ -278,20 +269,15 @@ class Localplay { /** * add - * This function takes an array of song_ids and then passes the full URL + * This function takes a single object and then passes it to * to the player, this is a required function. */ - public function add($songs) { - - - /* Call the Function Specified in the Function Map */ - $function = $this->_function_map['add']; + public function add($object) { - if (!$this->_player->$function($songs)) { + if (!$this->_player->add($object)) { debug_event('localplay','Error Unable to add songs, check ' . $this->type . ' controller','1'); return false; } - return true; diff --git a/lib/class/radio.class.php b/lib/class/radio.class.php index 97bde2f6..45f57ade 100644 --- a/lib/class/radio.class.php +++ b/lib/class/radio.class.php @@ -96,6 +96,16 @@ class Radio { } // format /** + * get_url + * This returns the URL for this live stream + */ + public function get_url() { + + + + } // get_url + + /** * update * This is a static function that takes a key'd array for input * it depends on a ID element to determine which radio element it diff --git a/lib/class/song.class.php b/lib/class/song.class.php index af03e921..98de5616 100644 --- a/lib/class/song.class.php +++ b/lib/class/song.class.php @@ -799,10 +799,6 @@ class Song { $type = $this->type; - if ($GLOBALS['user']->prefs['play_type'] == 'downsample') { - $ds_string = "&ds=" . $GLOBALS['user']->prefs['sample_rate']; - } - /* Account for retarded players */ if ($this->type == 'flac') { $type = 'ogg'; } diff --git a/lib/class/stream.class.php b/lib/class/stream.class.php index 3e932997..7c07b8f3 100644 --- a/lib/class/stream.class.php +++ b/lib/class/stream.class.php @@ -36,6 +36,9 @@ class Stream { public $sess; public $user_id; + // Generate once an object is constructed + public static $session; + /** * Constructor for the stream class takes a type and an array * of song ids @@ -52,7 +55,7 @@ class Stream { } // Generate the session ID - $this->session = md5(uniqid(rand(), true));; + self::$session = md5(uniqid(rand(), true));; } // Constructor @@ -109,7 +112,7 @@ class Stream { $expire = time() + Config::get('stream_length'); $sql = "INSERT INTO `session_stream` (`id`,`expire`,`user`) " . - "VALUES('$this->session','$expire','$this->user_id')"; + "VALUES('" . self::$session . "','$expire','$this->user_id')"; $db_results = Dba::query($sql); if (!$db_results) { return false; } @@ -204,7 +207,7 @@ class Stream { if ($GLOBALS['user']->prefs['play_type'] == 'downsample') { $ds = $GLOBALS['user']->prefs['sample_rate']; } - echo $song->get_url($this->session); + echo $song->get_url(self::$session); } // end foreach /* Foreach the additional URLs */ @@ -241,7 +244,7 @@ class Stream { $song->format(); echo "#EXTINF:$song->time," . $song->f_artist_full . " - " . $song->title . "\n"; - echo $song->get_url($this->session) . "\n"; + echo $song->get_url(self::$session) . "\n"; } // end foreach /* Foreach URLS */ @@ -272,7 +275,7 @@ class Stream { $song = new Song($song_id); $song->format(); $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type; - $song_url = $song->get_url($this->session); + $song_url = $song->get_url(self::$session); echo "File" . $i . "=$song_url\n"; echo "Title" . $i . "=$song_name\n"; echo "Length" . $i . "=$song->time\n"; @@ -306,7 +309,7 @@ class Stream { foreach ($this->songs as $song_id) { $song = new Song($song_id); $song->format(); - $url = $song->get_url($this->session); + $url = $song->get_url(self::$session); $song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type; echo "<ENTRY>\n"; @@ -350,7 +353,7 @@ class Stream { $song->format(); $xml = array(); - $xml['track']['location'] = $song->get_url($this->session) . $flash_hack; + $xml['track']['location'] = $song->get_url(self::$session) . $flash_hack; $xml['track']['identifier'] = $xml['track']['location']; $xml['track']['title'] = $song->title; $xml['track']['creator'] = $song->f_artist_full; @@ -428,23 +431,19 @@ class Stream { */ function create_localplay() { - if (!$localplay = new Localplay($GLOBALS['user']->prefs['localplay_controller'])) { - debug_event('localplay','Player failed to init on song add','3'); - echo "Error: Localplay Init Failed check config"; - return false; - } + // First figure out what their current one is and create the object + $localplay = new Localplay($GLOBALS['user']->prefs['localplay_controller']); + $localplay->connect(); - if (!$localplay->connect()) { - debug_event('localplay','Localplay Player Connect failed','3'); - echo "Error: Localplay connect failed check config"; - return false; + //HACK!!! + // Yea.. you know the baby jesus... he's crying right meow + foreach ($this->songs as $song_id) { + $this->objects[] = new Song($song_id); } - $localplay->add($this->songs); - - /* Check for Support */ - if ($localplay->has_function('add_url')) { - $localplay->add_url($this->urls); + // Foreach the stuff we've got and add it + foreach ($this->objects as $object) { + $localplay->add($object,self::$session); } $localplay->play(); @@ -475,7 +474,7 @@ class Stream { // Build up our object $song_id = $this->songs['0']; $song = new Song($song_id); - $url = $song->get_url($this->session); + $url = $song->get_url(self::$session); // Append the fact we are downloading $url .= '&action=download'; @@ -497,7 +496,7 @@ class Stream { header("Content-Type: audio/x-pn-realaudio ram;"); foreach ($this->songs as $song_id) { $song = new Song($song_id); - echo $song->get_url($this->session); + echo $song->get_url(self::$session); } // foreach songs } // create_ram diff --git a/modules/localplay/mpd.controller.php b/modules/localplay/mpd.controller.php index b212b38c..afdd4442 100644 --- a/modules/localplay/mpd.controller.php +++ b/modules/localplay/mpd.controller.php @@ -178,6 +178,23 @@ class AmpacheMpd extends localplay_controller { } // get_instances /** + * get_instance + * This returns the specified instance and all it's pretty variables + */ + private function get_instance($instance) { + + $instance = Dba::escape($instance); + + $sql = "SELECT * FROM `localplay_mpd` WHERE `id`='$instance'"; + $db_results = Dba::query($sql); + + $row = Dba::fetch_assoc($db_results); + + return $row; + + } // get_instance + + /** * instance_fields * This returns a key'd array of [NAME]=>array([DESCRIPTION]=>VALUE,[TYPE]=>VALUE) for the * fields so that we can on-the-fly generate a form @@ -224,24 +241,22 @@ class AmpacheMpd extends localplay_controller { /** * add - * This must take an array of URL's from Ampache - * and then add them to MPD + * This takes a single object and adds it in, it uses the built in + * functions to generate the URL it needs */ - public function add($objects) { - + public function add($object) { + if (is_null($this->_mpd->ClearPLIfStopped())) { debug_event('mpd_add', 'Error: Unable to clear the MPD playlist ' . $this->_mpd->errStr,'1'); } - foreach ($songs as $song_id) { - $song = new Song($song_id); - $url = $song->get_url(0,1); - if (is_null($this->_mpd->PlAdd($url))) { - debug_event('mpd_add','Error: Unable to add $url to MPD ' . $this->_mpd->errStr,'1'); - } - - } // end foreach + $url = $this->get_url($object); + if (is_null($this->_mpd->PlAdd($url))) { + debug_event('mpd_add',"Error: Unable to add $url to MPD " . $this->_mpd->errStr,'1'); + return false; + } + return true; } // add_songs @@ -505,8 +520,10 @@ class AmpacheMpd extends localplay_controller { * is stored in this class */ public function connect() { - - $this->_mpd = new mpd(conf('localplay_mpd_hostname'),conf('localplay_mpd_port'),conf('localplay_mpd_password')); + + // Look at the current instance and pull the options for said instance + $options = self::get_instance($GLOBALS['user']->prefs['mpd_active']); + $this->_mpd = new mpd($options['host'],$options['port'],$options['password']); if ($this->_mpd->connected) { return true; } diff --git a/modules/mpd/mpd.class.php b/modules/mpd/mpd.class.php index ca853936..505425b1 100644 --- a/modules/mpd/mpd.class.php +++ b/modules/mpd/mpd.class.php @@ -128,29 +128,32 @@ class mpd { $this->errStr = "Could not connect"; return; } - else { list ( $this->mpd_version ) = sscanf($resp, MPD_RESPONSE_OK . " MPD %s\n"); - - if ( ! is_null($pwd) ) { - if ( is_null($this->SendCommand(MPD_CMD_PASSWORD,$pwd)) ) { - $this->connected = FALSE; - $this->errStr = "Password supplied is incorrect or Invalid Command"; - return; // bad password or command - } + + list ( $this->mpd_version ) = sscanf($resp, OK . " MPD %s\n"); + + if ( ! empty($pwd) ) { + if ( is_null($this->SendCommand(MPD_CMD_PASSWORD,$pwd)) ) { + $this->connected = FALSE; + $this->errStr = "Password supplied is incorrect or Invalid Command"; + return; // bad password or command + } - if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected!
- $this->connected = FALSE;
- $this->errStr = "Password supplied does not have read access";
- return;
- }
- } else {
- if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected!
- $this->connected = FALSE;
- $this->errStr = "Password required to access server";
- return;
- } - } + if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected!
+ $this->connected = FALSE;
+ $this->errStr = "Password supplied does not have read access";
+ return;
+ }
+ } // if password + else {
+ if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected! + $this->connected = FALSE; + $this->errStr = "Password required to access server"; + return; + } } - } + return true; + + } // constructor /* Connect() * @@ -185,7 +188,7 @@ class mpd { if (function_exists('socket_get_status')) { $status = socket_get_status($this->mpd_sock); } - if (strncmp(MPD_RESPONSE_OK,$response,strlen(MPD_RESPONSE_OK)) == 0) { + if (strstr($response,"OK")) { $this->connected = TRUE; return $response; break; diff --git a/server/localplay.ajax.php b/server/localplay.ajax.php index 7153b344..78142b18 100644 --- a/server/localplay.ajax.php +++ b/server/localplay.ajax.php @@ -29,7 +29,10 @@ switch ($_REQUEST['action']) { // Make sure they they are allowed to do this //... ok I don't really know what that means yet + $type = $_REQUEST['instance'] ? 'localplay' : 'stream'; + Preference::update('mpd_active',$GLOBALS['user']->id,$_REQUEST['instance']); + Preference::update('play_type',$GLOBALS['user']->id,$type); break; default: |