summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdocs/CHANGELOG1
-rw-r--r--lib/class/localplay.abstract.php17
-rw-r--r--lib/class/localplay.class.php24
-rw-r--r--lib/class/radio.class.php10
-rw-r--r--lib/class/song.class.php4
-rw-r--r--lib/class/stream.class.php45
-rw-r--r--modules/localplay/mpd.controller.php45
-rw-r--r--modules/mpd/mpd.class.php47
-rw-r--r--server/localplay.ajax.php3
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: