diff options
author | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2006-11-26 22:04:36 +0000 |
---|---|---|
committer | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2006-11-26 22:04:36 +0000 |
commit | 5f2e9ab7f914f216b6a3c6545332bbc22234ba0c (patch) | |
tree | 31cf433198515b8aa70a1dee875013cd5e932cbc /contrib | |
parent | 8429e5dc1443d5fb76afd8fe482da7dedf066f36 (diff) | |
download | ampache-5f2e9ab7f914f216b6a3c6545332bbc22234ba0c.tar.gz ampache-5f2e9ab7f914f216b6a3c6545332bbc22234ba0c.tar.bz2 ampache-5f2e9ab7f914f216b6a3c6545332bbc22234ba0c.zip |
wups I am an idiot
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/plugins/Last.FM/Lastfm.patch | 482 |
1 files changed, 250 insertions, 232 deletions
diff --git a/contrib/plugins/Last.FM/Lastfm.patch b/contrib/plugins/Last.FM/Lastfm.patch index 84468315..fa383e0c 100644 --- a/contrib/plugins/Last.FM/Lastfm.patch +++ b/contrib/plugins/Last.FM/Lastfm.patch @@ -1,232 +1,250 @@ -diff -Nnr --exclude=.svn ampache.ref/lib/class/audioscrobbler.class.php ampache.dev/lib/class/audioscrobbler.class.php -a0 211 -<?php -/* - - Copyright (c) 2001 - 2006 Ampache.org - All rights reserved. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License v2 - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -class scrobbler { - - var $error_msg; - var $username; - var $password; - var $challenge; - var $submit_host; - var $submit_port; - var $submit_url; - var $queued_tracks; - - /** - * Constructor - * This is the constructer it takes a username and password - */ - function scrobbler($username, $password) { - - $this->error_msg = ''; - $this->username = $username; - $this->password = $password; - $this->challenge = ''; - $this->queued_tracks = array(); - - } // scrobbler - - /** - * get_error_msg - */ - function get_error_msg() { - - return $this->error_msg; - - } // get_error_msg - - /** - * get_queue_count - function get_queue_count() { - - return count($this->queued_tracks); - - } // get_queue_count - - /** - * handshake - * This does a handshake with the audioscrobber server - */ - function handshake() { - - $as_socket = @fsockopen('post.audioscrobbler.com', 80, $errno, $errstr, 10); - if(!$as_socket) { - $this->error_msg = $errstr; - return FALSE; - } - - $username = rawurlencode($this->username); - fwrite($as_socket, "GET /?hs=true&p=1.1&c=m3a&v=0.1&u=".$username." HTTP/1.1\r\n"); - fwrite($as_socket, "Host: post.audioscrobbler.com\r\n"); - fwrite($as_socket, "Accept: */*\r\n\r\n"); - - $buffer = ''; - while(!feof($as_socket)) { - $buffer .= fread($as_socket, 8192); - } - fclose($as_socket); - - $split_response = preg_split("/\r\n\r\n/", $buffer); - if(!isset($split_response[1])) { - $this->error_msg = 'Did not receive a valid response'; - return FALSE; - } - $response = explode("\n", $split_response[1]); - - if(substr($response[0], 0, 6) == 'FAILED') { - $this->error_msg = substr($response[0], 7); - return FALSE; - } - if(substr($response[0], 0, 7) == 'BADUSER') { - $this->error_msg = 'Invalid Username'; - return FALSE; - } - if(substr($response[0], 0, 6) == 'UPDATE') { - $this->error_msg = 'You need to update your client: '.substr($response[0], 7); - return FALSE; - } - - if(preg_match('/http:\/\/(.*):(\d+)(.*)/', $response[2], $matches)) { - $this->submit_host = $matches[1]; - $this->submit_port = $matches[2]; - $this->submit_url = $matches[3]; - } else { - $this->error_msg = 'Invalid POST URL returned, unable to continue'; - return FALSE; - } - - $this->challenge = $response[1]; - return true; - - } // handshake - - function queue_track($artist, $album, $track, $timestamp, $length) { - $date = gmdate('Y-m-d H:i:s', $timestamp); - $mydate = date('Y-m-d H:i:s T', $timestamp); - - if($length < 30) { - //printf("Skipping: %-25.25s %-25.25s %-25.25s (%-4.4d secs), too short\n", $artist, $album, $track, $length); - return FALSE; - } else { - //printf("Queueing: %-25.25s %-25.25s %-25.25s (%-4.4d secs)\n", $artist, $album, $track, $length); - //printf(" %23.23s (%23.23s)\n", $date." UTC", $mydate); - } - - $newtrack = array(); - $newtrack['artist'] = $artist; - $newtrack['album'] = $album; - $newtrack['track'] = $track; - $newtrack['length'] = $length; - $newtrack['time'] = $date; - - $this->queued_tracks[$timestamp] = $newtrack; - return TRUE; - } - - function submit_tracks() { - if(count($this->queued_tracks) == 0) { - $this->error_msg = "No tracks to submit\n"; - return FALSE; - } - - ksort($this->queued_tracks); //sort array by timestamp - - $query_str = 'u='.rawurlencode($this->username).'&s='.rawurlencode(md5( md5($this->password).$this->challenge)).'&'; - $i = 0; - foreach($this->queued_tracks as $track) { - $query_str .= "a[$i]=".rawurlencode($track['artist'])."&t[$i]=".rawurlencode($track['track'])."&b[$i]=".rawurlencode($track['album'])."&"; - $query_str .= "m[$i]=&l[$i]=".rawurlencode($track['length'])."&i[$i]=".rawurlencode($track['time'])."&"; - $i++; - } - $as_socket = @fsockopen($this->submit_host, $this->submit_port, $errno, $errstr, 10); - if(!$as_socket) { - $this->error_msg = $errstr; - return FALSE; - } - - $action = "POST ".$this->submit_url." HTTP/1.0\r\n"; - fwrite($as_socket, $action); - fwrite($as_socket, "Host: ".$this->submit_host."\r\n"); - fwrite($as_socket, "Accept: */*\r\n"); - fwrite($as_socket, "Content-type: application/x-www-form-urlencoded\r\n"); - fwrite($as_socket, "Content-length: ".strlen($query_str)."\r\n\r\n"); - - fwrite($as_socket, $query_str."\r\n\r\n"); - - $buffer = ''; - while(!feof($as_socket)) { - $buffer .= fread($as_socket, 8192); - } - fclose($as_socket); - - $split_response = preg_split("/\r\n\r\n/", $buffer); - if(!isset($split_response[1])) { - $this->error_msg = 'Did not receive a valid response'; - return FALSE; - } - $response = explode("\n", $split_response[1]); - - if(!isset($response[0])) { - $this->error_msg = 'Unknown error submitting tracks'. - "\nDebug output:\n".$buffer; - return FALSE; - } - if(substr($response[0], 0, 6) == 'FAILED') { - $this->error_msg = substr($response[6], 7); - return FALSE; - } - if(substr($response[0], 0, 7) == 'BADAUTH') { - $this->error_msg = 'Invalid username/password'; - return FALSE; - } - if(substr($response[0], 0, 2) != 'OK') { - $this->error_msg = 'Unknown error submitting tracks'. - "\nDebug output:\n".$buffer; - return FALSE; - } - - return TRUE; - } - -} - -?> -diff -Nnr --exclude=.svn ampache.ref/lib/class/user.class.php ampache.dev/lib/class/user.class.php -a436 14 - /* Record this play to LastFM */ - if ($this->prefs['lastfm_user'] AND $this->prefs['lastfm_pass']) { - $song->format_song(); - $lastfm = new scrobbler($this->prefs['lastfm_user'],$this->prefs['lastfm_pass']); - /* Attempt handshake */ - if ($lastfm->handshake()) { - $lastfm->queue_track($song->f_artist_full,$song->f_album_full,$song->title,time(),$song->time); - $lastfm->submit_tracks(); - } // if handshake - else { - debug_event('plugins','Error: Handshake failed with LastFM','3'); - } - } // record to LastFM - -diff -Nnr --exclude=.svn ampache.ref/lib/init.php ampache.dev/lib/init.php -a187 1 -require_once(conf('prefix') . '/lib/class/audioscrobbler.class.php'); +diff -Naur --exclude=.svn ampache.ref/lib/class/audioscrobbler.class.php ampache.dev/lib/class/audioscrobbler.class.php +--- ampache.ref/lib/class/audioscrobbler.class.php 1969-12-31 16:00:00.000000000 -0800 ++++ ampache.dev/lib/class/audioscrobbler.class.php 2006-11-26 14:01:23.000000000 -0800 +@@ -0,0 +1,210 @@ ++<?php ++/* ++ ++ Copyright (c) 2001 - 2006 Ampache.org ++ All rights reserved. ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License v2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++*/ ++ ++class scrobbler { ++ ++ var $error_msg; ++ var $username; ++ var $password; ++ var $challenge; ++ var $submit_host; ++ var $submit_port; ++ var $submit_url; ++ var $queued_tracks; ++ ++ /** ++ * Constructor ++ * This is the constructer it takes a username and password ++ */ ++ function scrobbler($username, $password) { ++ ++ $this->error_msg = ''; ++ $this->username = $username; ++ $this->password = $password; ++ $this->challenge = ''; ++ $this->queued_tracks = array(); ++ ++ } // scrobbler ++ ++ /** ++ * get_error_msg ++ */ ++ function get_error_msg() { ++ ++ return $this->error_msg; ++ ++ } // get_error_msg ++ ++ /** ++ * get_queue_count ++ function get_queue_count() { ++ ++ return count($this->queued_tracks); ++ ++ } // get_queue_count ++ ++ /** ++ * handshake ++ * This does a handshake with the audioscrobber server ++ */ ++ function handshake() { ++ ++ $as_socket = @fsockopen('post.audioscrobbler.com', 80, $errno, $errstr, 10); ++ if(!$as_socket) { ++ $this->error_msg = $errstr; ++ return FALSE; ++ } ++ ++ $username = rawurlencode($this->username); ++ fwrite($as_socket, "GET /?hs=true&p=1.1&c=m3a&v=0.1&u=".$username." HTTP/1.1\r\n"); ++ fwrite($as_socket, "Host: post.audioscrobbler.com\r\n"); ++ fwrite($as_socket, "Accept: */*\r\n\r\n"); ++ ++ $buffer = ''; ++ while(!feof($as_socket)) { ++ $buffer .= fread($as_socket, 8192); ++ } ++ fclose($as_socket); ++ ++ $split_response = preg_split("/\r\n\r\n/", $buffer); ++ if(!isset($split_response[1])) { ++ $this->error_msg = 'Did not receive a valid response'; ++ return FALSE; ++ } ++ $response = explode("\n", $split_response[1]); ++ ++ if(substr($response[0], 0, 6) == 'FAILED') { ++ $this->error_msg = substr($response[0], 7); ++ return FALSE; ++ } ++ if(substr($response[0], 0, 7) == 'BADUSER') { ++ $this->error_msg = 'Invalid Username'; ++ return FALSE; ++ } ++ if(substr($response[0], 0, 6) == 'UPDATE') { ++ $this->error_msg = 'You need to update your client: '.substr($response[0], 7); ++ return FALSE; ++ } ++ ++ if(preg_match('/http:\/\/(.*):(\d+)(.*)/', $response[2], $matches)) { ++ $this->submit_host = $matches[1]; ++ $this->submit_port = $matches[2]; ++ $this->submit_url = $matches[3]; ++ } else { ++ $this->error_msg = 'Invalid POST URL returned, unable to continue'; ++ return FALSE; ++ } ++ ++ $this->challenge = $response[1]; ++ return true; ++ ++ } // handshake ++ ++ function queue_track($artist, $album, $track, $timestamp, $length) { ++ $date = gmdate('Y-m-d H:i:s', $timestamp); ++ $mydate = date('Y-m-d H:i:s T', $timestamp); ++ ++ if($length < 30) { ++ //printf("Skipping: %-25.25s %-25.25s %-25.25s (%-4.4d secs), too short\n", $artist, $album, $track, $length); ++ return FALSE; ++ } else { ++ //printf("Queueing: %-25.25s %-25.25s %-25.25s (%-4.4d secs)\n", $artist, $album, $track, $length); ++ //printf(" %23.23s (%23.23s)\n", $date." UTC", $mydate); ++ } ++ ++ $newtrack = array(); ++ $newtrack['artist'] = $artist; ++ $newtrack['album'] = $album; ++ $newtrack['track'] = $track; ++ $newtrack['length'] = $length; ++ $newtrack['time'] = $date; ++ ++ $this->queued_tracks[$timestamp] = $newtrack; ++ return TRUE; ++ } ++ ++ function submit_tracks() { ++ if(count($this->queued_tracks) == 0) { ++ $this->error_msg = "No tracks to submit\n"; ++ return FALSE; ++ } ++ ++ ksort($this->queued_tracks); //sort array by timestamp ++ ++ $query_str = 'u='.rawurlencode($this->username).'&s='.rawurlencode(md5( md5($this->password).$this->challenge)).'&'; ++ $i = 0; ++ foreach($this->queued_tracks as $track) { ++ $query_str .= "a[$i]=".rawurlencode($track['artist'])."&t[$i]=".rawurlencode($track['track'])."&b[$i]=".rawurlencode($track['album'])."&"; ++ $query_str .= "m[$i]=&l[$i]=".rawurlencode($track['length'])."&i[$i]=".rawurlencode($track['time'])."&"; ++ $i++; ++ } ++ $as_socket = @fsockopen($this->submit_host, $this->submit_port, $errno, $errstr, 10); ++ if(!$as_socket) { ++ $this->error_msg = $errstr; ++ return FALSE; ++ } ++ ++ $action = "POST ".$this->submit_url." HTTP/1.0\r\n"; ++ fwrite($as_socket, $action); ++ fwrite($as_socket, "Host: ".$this->submit_host."\r\n"); ++ fwrite($as_socket, "Accept: */*\r\n"); ++ fwrite($as_socket, "Content-type: application/x-www-form-urlencoded\r\n"); ++ fwrite($as_socket, "Content-length: ".strlen($query_str)."\r\n\r\n"); ++ ++ fwrite($as_socket, $query_str."\r\n\r\n"); ++ ++ $buffer = ''; ++ while(!feof($as_socket)) { ++ $buffer .= fread($as_socket, 8192); ++ } ++ fclose($as_socket); ++ ++ $split_response = preg_split("/\r\n\r\n/", $buffer); ++ if(!isset($split_response[1])) { ++ $this->error_msg = 'Did not receive a valid response'; ++ return FALSE; ++ } ++ $response = explode("\n", $split_response[1]); ++ ++ if(!isset($response[0])) { ++ $this->error_msg = 'Unknown error submitting tracks'. ++ "\nDebug output:\n".$buffer; ++ return FALSE; ++ } ++ if(substr($response[0], 0, 6) == 'FAILED') { ++ $this->error_msg = substr($response[6], 7); ++ return FALSE; ++ } ++ if(substr($response[0], 0, 7) == 'BADAUTH') { ++ $this->error_msg = 'Invalid username/password'; ++ return FALSE; ++ } ++ if(substr($response[0], 0, 2) != 'OK') { ++ $this->error_msg = 'Unknown error submitting tracks'. ++ "\nDebug output:\n".$buffer; ++ return FALSE; ++ } ++ ++ return TRUE; ++ } ++ ++} ++?> +diff -Naur --exclude=.svn ampache.ref/lib/class/user.class.php ampache.dev/lib/class/user.class.php +--- ampache.ref/lib/class/user.class.php 2006-11-26 13:47:45.000000000 -0800 ++++ ampache.dev/lib/class/user.class.php 2006-11-26 14:01:51.000000000 -0800 +@@ -434,6 +434,20 @@ + $stats->insert('artist',$song_info->artist,$user); + $stats->insert('genre',$song_info->genre,$user); + ++ /* Record this play to LastFM */ ++ if ($this->prefs['lastfm_user'] AND $this->prefs['lastfm_pass']) { ++ $song->format_song(); ++ $lastfm = new scrobbler($this->prefs['lastfm_user'],$this->prefs['lastfm_pass']); ++ /* Attempt handshake */ ++ if ($lastfm->handshake()) { ++ $lastfm->queue_track($song->f_artist_full,$song->f_album_full,$song->title,time(),$song->time); ++ $lastfm->submit_tracks(); ++ } // if handshake ++ else { ++ debug_event('plugins','Error: Handshake failed with LastFM','3'); ++ } ++ } // record to LastFM ++ + } // update_stats + + /** +diff -Naur --exclude=.svn ampache.ref/lib/init.php ampache.dev/lib/init.php +--- ampache.ref/lib/init.php 2006-11-26 13:47:45.000000000 -0800 ++++ ampache.dev/lib/init.php 2006-11-26 14:02:14.000000000 -0800 +@@ -185,6 +185,8 @@ + require_once(conf('prefix') . '/lib/class/error.class.php'); + require_once(conf('prefix') . '/lib/class/genre.class.php'); + require_once(conf('prefix') . '/lib/class/flag.class.php'); ++require_once(conf('prefix') . '/lib/class/audioscrobbler.class.php'); ++ + + /* Set a new Error Handler */ + $old_error_handler = set_error_handler("ampache_error_handler"); |