summaryrefslogtreecommitdiffstats
path: root/lib/stream.lib.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stream.lib.php')
-rw-r--r--lib/stream.lib.php119
1 files changed, 53 insertions, 66 deletions
diff --git a/lib/stream.lib.php b/lib/stream.lib.php
index 00416a7d..df07e821 100644
--- a/lib/stream.lib.php
+++ b/lib/stream.lib.php
@@ -20,30 +20,6 @@
*/
-/**
- * delete_now_playing
- * This function checks to see if we should delete the last now playing entry now that it's
- * finished streaming the song. Basicly this is an exception for WMP10
- * @package General
- * @catagory Now Playing
- */
-function delete_now_playing($insert_id) {
-
- $user_agent = $_SERVER['HTTP_USER_AGENT'];
-
- // Account for WMP and the Flash Player
-// if (stristr($user_agent,"NSPlayer") || $_REQUEST['flash_hack'] == 1) {
- // Commented out until I can figure out the
- // trick to making this work
-// return true;
-// }
-
- // Remove the song from the now_playing table
- $sql = "DELETE FROM `now_playing` WHERE `id` = '$insert_id'";
- $db_result = Dba::query($sql);
-
-} // delete_now_playing
-
/**
* gc_now_playing
* this is a garbage collection function for now playing this is called every time something
@@ -53,18 +29,16 @@ function delete_now_playing($insert_id) {
*/
function gc_now_playing() {
- /* Account for WMP11's Initial Streaming */
- //if (strstr($_SERVER['HTTP_USER_AGENT'],"WMFSDK/11")) { return false; }
+ // Delete expired songs
+ $sql = "DELETE FROM `now_playing` WHERE `expire` < '$time'";
+ $db_result = Dba::query($sql);
- $time = time();
- $session_id = Dba::escape($_REQUEST['sid']);
- if (strlen($session_id)) {
- $session_sql = " OR session = '$session_id'";
- }
+ // Remove any now playing entries for session_streams that have been GC'd
+ $sql = "DELETE FROM `now_playing` USING `now_playing` " .
+ "LEFT JOIN `session_stream` ON `session_stream`.`id`=`now_playing`.`id` " .
+ "WHERE `session_stream`.`id` IS NULL";
+ $db_results = Dba::query($sql);
- $sql = "DELETE FROM `now_playing` WHERE `expire` < '$time'" . $session_sql;
- $db_result = Dba::query($sql);
-
} // gc_now_playing
/**
@@ -73,41 +47,16 @@ function gc_now_playing() {
* we use this function because we need to do thing differently
* depending upon which play is actually streaming
*/
-function insert_now_playing($song_id,$uid,$song_length) {
+function insert_now_playing($song_id,$uid,$song_length,$sid) {
- $user_agent = $_SERVER['HTTP_USER_AGENT'];
$time = time()+$song_length;
- $session_id = Dba::escape($_REQUEST['sid']);
-
- /* Check for against a list of clients that have abusive traffic patterns causing
- * faulty now playing data and return without inserting
- */
- $banned_clients = array('Audacious/1.3');
-
- foreach ($banned_clients as $banned_agent) {
- if (stristr($user_agent,$banned_agent)) {
- debug_event('Banned Agent',$banned_agent . ' clients now playing data not entered because Ampache is unable to handle its request pattern','5');
- return false;
- }
- }
-
- /* Windows Media Player is evil and it makes multiple requests per song */
- if (stristr($user_agent,"Windows-Media-Player")) { $session_id = ' '; }
-
- /* Check for Windows Media Player 11 */
- if (strstr($user_agent,'NSPlayer/11') AND !strstr($user_agent,'WMFSDK/11')) { $session_id = ' '; }
-
- // If they are using Windows media player
- if (strstr($user_agent,"NSPlayer") || $_REQUEST['flash_hack'] == 1) { $session_id = ' '; }
+ $session_id = Dba::escape($sid);
- $sql = "INSERT INTO now_playing (`song_id`, `user`, `expire`,`session`)" .
- " VALUES ('$song_id', '$uid', '$time','$session_id')";
-
- $db_result = Dba::query($sql);
-
- $insert_id = Dba::insert_id();
-
- return $insert_id;
+ // Do a replace into ensuring that this client always only has a single row
+ $sql = "REPLACE INTO `now_playing` (`id`,`song_id`, `user`, `expire`)" .
+ " VALUES ('$session_id','$song_id', '$uid', '$time')";
+
+ $db_result = Dba::query($sql);
} // insert_now_playing
@@ -126,6 +75,44 @@ function clear_now_playing() {
} // clear_now_playing
/**
+ * show_now_playing
+ * shows the now playing template
+ */
+function show_now_playing() {
+
+ $web_path = Config::get('web_path');
+ $results = get_now_playing();
+ require Config::get('prefix') . '/templates/show_now_playing.inc.php';
+
+} // show_now_playing
+
+/**
+ * get_now_playing
+ * gets the now playing information
+ */
+function get_now_playing($filter='') {
+
+ $sql = "SELECT `session_stream`.`agent`,`now_playing`.`song_id`,`now_playing`.`user` FROM `now_playing` " .
+ "LEFT JOIN `session_stream` ON `session_stream`.`id`=`now_playing`.`id` " .
+ "ORDER BY `now_playing`.`expire` DESC";
+ $db_results = Dba::query($sql);
+
+ $results = array();
+
+ /* While we've got stuff playing */
+ while ($r = Dba::fetch_assoc($db_results)) {
+ $song = new Song($r['song_id']);
+ $song->format();
+ $np_user = new User($r['user']);
+ $results[] = array('song'=>$song,'user'=>$np_user,'agent'=>$r['agent']);
+ } // end while
+
+ return $results;
+
+} // get_now_playing
+
+
+/**
* check_lock_songs
* This checks to see if the song is already playing, if it is then it prevents the user
* from streaming it