From: Robin Appelman Date: Tue, 24 Jan 2012 01:56:38 +0000 (+0100) Subject: Fix some issues in ampache resonponse X-Git-Tag: v3.0~17 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a77f3a07a10b074486a0c3a21ae27c5c067ba8b2;p=nextcloud-server.git Fix some issues in ampache resonponse Patch by Markus Germeier --- diff --git a/apps/media/lib_ampache.php b/apps/media/lib_ampache.php index bc1f853047f..138b65d1fd7 100644 --- a/apps/media/lib_ampache.php +++ b/apps/media/lib_ampache.php @@ -24,6 +24,31 @@ //implementation of ampache's xml api class OC_MEDIA_AMPACHE{ + /** + * fix the string to be XML compatible + * @param string name + * @return string + */ + + /* this is an ugly hack(tm), this should be: */ + /* htmlentities($name, ENT_XML1, 'UTF-8'); */ + /* with PHP 5.4 and later */ + public static function fixXmlString($name){ + $result=str_replace("&", "&", $name); + $result=str_replace("'", "'", $result); + $result=str_replace("<", "<", $result); + $result=str_replace(">", ">", $result); + $result=str_replace("\"", """, $result); + $result=str_replace("Ä", "Ä", $result); + $result=str_replace("Ö", "Ö", $result); + $result=str_replace("Ü", "Ü", $result); + $result=str_replace("ä", "ä", $result); + $result=str_replace("ö", "ö", $result); + $result=str_replace("ü", "ü", $result); + $result=str_replace("ß", "ß", $result); + return $result; + } + /** * do the initial handshake * @param array params @@ -34,6 +59,7 @@ class OC_MEDIA_AMPACHE{ $time=(isset($params['timestamp']))?$params['timestamp']:false; $now=time(); if($now-$time>(10*60)){ + echo(''); echo(" timestamp is more then 10 minutes old "); @@ -54,6 +80,7 @@ class OC_MEDIA_AMPACHE{ $query=OC_DB::prepare("INSERT INTO *PREFIX*media_sessions (`session_id`, `token`, `user_id`, `start`) VALUES (NULL, ?, ?, now());"); $query->execute(array($token,$user)); $expire=date('c',time()+600); + echo(''); echo(" $token 350001 @@ -71,10 +98,12 @@ class OC_MEDIA_AMPACHE{ return; } } + echo(''); echo(" Invalid login "); }else{ + echo(''); echo(" Missing arguments "); @@ -86,12 +115,14 @@ class OC_MEDIA_AMPACHE{ if(self::checkAuth($params['auth'])){ self::updateAuth($params['auth']); }else{ + echo(''); echo(" Invalid login "); return; } } + echo(''); echo(''); echo('350001'); echo(''); @@ -128,7 +159,7 @@ class OC_MEDIA_AMPACHE{ $albums=count(OC_MEDIA_COLLECTION::getAlbums($artist['artist_id'])); $songs=count(OC_MEDIA_COLLECTION::getSongs($artist['artist_id'])); $id=$artist['artist_id']; - $name=htmlentities($artist['artist_name'], ENT_COMPAT, 'UTF-8'); + $name=self::fixXmlString($artist['artist_name']); echo("\t\n"); echo("\t\t$name\n"); echo("\t\t$albums\n"); @@ -142,16 +173,19 @@ class OC_MEDIA_AMPACHE{ if(!$artistName){ $artistName=OC_MEDIA_COLLECTION::getArtistName($album['album_artist']); } - $artistName=htmlentities($artistName, ENT_COMPAT, 'UTF-8'); + $artistName=self::fixXmlString($artistName); $songs=count(OC_MEDIA_COLLECTION::getSongs($album['album_artist'],$album['album_id'])); $id=$album['album_id']; - $name=htmlentities($album['album_name'], ENT_COMPAT, 'UTF-8'); + $name=self::fixXmlString($album['album_name']); $artist=$album['album_artist']; echo("\t\n"); echo("\t\t$name\n"); echo("\t\t$artistName\n"); echo("\t\t$songs\n"); echo("\t\t0\n"); + echo("\t\t0\n"); /* make Viridian happy */ + echo("\t\t1\n"); /* make Viridian happy */ + echo("\t\t \n"); /* single space to make quickplay happy enough */ echo("\t\t0\n"); echo("\t\n"); } @@ -163,10 +197,10 @@ class OC_MEDIA_AMPACHE{ if(!$albumName){ $albumName=OC_MEDIA_COLLECTION::getAlbumName($song['song_album']); } - $artistName=htmlentities($artistName, ENT_COMPAT, 'UTF-8'); - $albumName=htmlentities($albumName, ENT_COMPAT, 'UTF-8'); + $artistName=self::fixXmlString($artistName); + $albumName=self::fixXmlString($albumName); $id=$song['song_id']; - $name=htmlentities($song['song_name'], ENT_COMPAT, 'UTF-8'); + $name=self::fixXmlString($song['song_name']); $artist=$song['song_artist']; $album=$song['song_album']; echo("\t\n"); @@ -174,12 +208,12 @@ class OC_MEDIA_AMPACHE{ echo("\t\t$artistName\n"); echo("\t\t$albumName\n"); $url=OC_Helper::linkTo('media', 'server/xml.server.php', null, true)."?action=play&song=$id&auth={$_GET['auth']}"; - $url=htmlentities($url); + $url=self::fixXmlString($url); echo("\t\t$url\n"); echo("\t\t\n"); echo("\t\t{$song['song_track']}\n"); echo("\t\t{$song['song_size']}\n"); - echo("\t\t\n"); + echo("\t\t \n"); /* single space to make Viridian happy enough */ echo("\t\t0\n"); echo("\t\t0\n"); echo("\t\n"); @@ -187,6 +221,7 @@ class OC_MEDIA_AMPACHE{ public static function artists($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -195,6 +230,7 @@ class OC_MEDIA_AMPACHE{ $filter=isset($params['filter'])?$params['filter']:''; $exact=isset($params['exact'])?($params['exact']=='true'):false; $artists=OC_MEDIA_COLLECTION::getArtists($filter,$exact); + echo(''); echo(''); foreach($artists as $artist){ self::printArtist($artist); @@ -204,6 +240,7 @@ class OC_MEDIA_AMPACHE{ public static function artist_songs($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -212,6 +249,7 @@ class OC_MEDIA_AMPACHE{ $filter=isset($params['filter'])?$params['filter']:''; $songs=OC_MEDIA_COLLECTION::getSongs($filter); $artist=OC_MEDIA_COLLECTION::getArtistName($filter); + echo(''); echo(''); foreach($songs as $song){ self::printSong($song,$artist); @@ -221,6 +259,7 @@ class OC_MEDIA_AMPACHE{ public static function artist_albums($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -230,6 +269,7 @@ class OC_MEDIA_AMPACHE{ $filter=$params['filter']; $albums=OC_MEDIA_COLLECTION::getAlbums($filter); $artist=OC_MEDIA_COLLECTION::getArtistName($filter); + echo(''); echo(''); foreach($albums as $album){ self::printAlbum($album,$artist); @@ -239,6 +279,7 @@ class OC_MEDIA_AMPACHE{ public static function albums($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -247,15 +288,17 @@ class OC_MEDIA_AMPACHE{ $filter=isset($params['filter'])?$params['filter']:''; $exact=isset($params['exact'])?($params['exact']=='true'):false; $albums=OC_MEDIA_COLLECTION::getAlbums(0,$filter,$exact); + echo(''); echo(''); foreach($albums as $album){ - self::printAlbum($album,$artist); + self::printAlbum($album,false); } echo(''); } public static function album_songs($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -265,6 +308,7 @@ class OC_MEDIA_AMPACHE{ if(count($songs)>0){ $artist=OC_MEDIA_COLLECTION::getArtistName($songs[0]['song_artist']); } + echo(''); echo(''); foreach($songs as $song){ self::printSong($song,$artist); @@ -274,6 +318,7 @@ class OC_MEDIA_AMPACHE{ public static function songs($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -282,6 +327,7 @@ class OC_MEDIA_AMPACHE{ $filter=isset($params['filter'])?$params['filter']:''; $exact=isset($params['exact'])?($params['exact']=='true'):false; $songs=OC_MEDIA_COLLECTION::getSongs(0,0,$filter,$exact); + echo(''); echo(''); foreach($songs as $song){ self::printSong($song); @@ -291,12 +337,14 @@ class OC_MEDIA_AMPACHE{ public static function song($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); return; } if($song=OC_MEDIA_COLLECTION::getSong($params['filter'])){ + echo(''); echo(''); self::printSong($song); echo(''); @@ -306,6 +354,7 @@ class OC_MEDIA_AMPACHE{ public static function play($params){ $username=!self::checkAuth($params); if($username){ + echo(''); echo(" Invalid login "); @@ -322,6 +371,7 @@ class OC_MEDIA_AMPACHE{ public static function url_to_song($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -330,6 +380,7 @@ class OC_MEDIA_AMPACHE{ $url=$params['url']; $songId=substr($url,strrpos($url,'song=')+5); if($song=OC_MEDIA_COLLECTION::getSong($songId)){ + echo(''); echo(''); self::printSong($song); echo(''); @@ -338,6 +389,7 @@ class OC_MEDIA_AMPACHE{ public static function search_songs($params){ if(!self::checkAuth($params)){ + echo(''); echo(" Invalid login "); @@ -353,6 +405,7 @@ class OC_MEDIA_AMPACHE{ foreach($albums as $album){ $songs=array_merge($songs,OC_MEDIA_COLLECTION::getSongs($album['album_artist'],$album['album_id'])); } + echo(''); echo(''); foreach($songs as $song){ self::printSong($song); diff --git a/apps/media/server/xml.server.php b/apps/media/server/xml.server.php index 7e320a7f595..cb9b68fc422 100644 --- a/apps/media/server/xml.server.php +++ b/apps/media/server/xml.server.php @@ -69,6 +69,9 @@ if(isset($arguments['action'])){ case 'search_songs': OC_MEDIA_AMPACHE::search_songs($arguments); break; + case 'song': + OC_MEDIA_AMPACHE::song($arguments); + break; } }