aboutsummaryrefslogtreecommitdiffstats
path: root/apps/media/lib_collection.php
diff options
context:
space:
mode:
authorRobin Appelman <icewind1991@gmail.com>2011-07-22 06:30:52 +0200
committerRobin Appelman <icewind1991@gmail.com>2011-07-22 06:30:52 +0200
commit38f1cffab39ae763f3929bcc37e6f8746f582083 (patch)
treea833cacb98acc372f40dda0c757904b4cba9c331 /apps/media/lib_collection.php
parentf441059b015b01af1fcafcdeeef8727f19d0d2d5 (diff)
downloadnextcloud-server-38f1cffab39ae763f3929bcc37e6f8746f582083.tar.gz
nextcloud-server-38f1cffab39ae763f3929bcc37e6f8746f582083.zip
import media app
Diffstat (limited to 'apps/media/lib_collection.php')
-rw-r--r--apps/media/lib_collection.php348
1 files changed, 348 insertions, 0 deletions
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
new file mode 100644
index 00000000000..7429379bcb1
--- /dev/null
+++ b/apps/media/lib_collection.php
@@ -0,0 +1,348 @@
+<?php
+
+/**
+* ownCloud - media plugin
+*
+* @author Robin Appelman
+* @copyright 2010 Robin Appelman icewind1991@gmail.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+
+//class for managing a music collection
+class OC_MEDIA_COLLECTION{
+ public static $uid;
+ private static $artistIdCache=array();
+ private static $albumIdCache=array();
+ private static $songIdCache=array();
+
+ /**
+ * get the id of an artist (case-insensitive)
+ * @param string name
+ * @return int
+ */
+ public static function getArtistId($name){
+ if(empty($name)){
+ return 0;
+ }
+ $name=strtolower($name);
+ if(isset(self::$artistIdCache[$name])){
+ return self::$artistIdCache[$name];
+ }else{
+ $query=OC_DB::prepare("SELECT artist_id FROM *PREFIX*media_artists WHERE artist_name LIKE ?");
+ $artists=$query->execute(array($name))->fetchAll();
+ if(is_array($artists) and isset($artists[0])){
+ self::$artistIdCache[$name]=$artists[0]['artist_id'];
+ return $artists[0]['artist_id'];
+ }else{
+ return 0;
+ }
+ }
+ }
+
+ /**
+ * get the id of an album (case-insensitive)
+ * @param string name
+ * @param int artistId
+ * @return int
+ */
+ public static function getAlbumId($name,$artistId){
+ if(empty($name)){
+ return 0;
+ }
+ $name=strtolower($name);
+ if(!isset(self::$albumIdCache[$artistId])){
+ self::$albumIdCache[$artistId]=array();
+ }
+ if(isset(self::$albumIdCache[$artistId][$name])){
+ return self::$albumIdCache[$artistId][$name];
+ }else{
+ $query=OC_DB::prepare("SELECT album_id FROM *PREFIX*media_albums WHERE album_name LIKE ? AND album_artist=?");
+ $albums=$query->execute(array($name,$artistId))->fetchAll();
+ if(is_array($albums) and isset($albums[0])){
+ self::$albumIdCache[$artistId][$name]=$albums[0]['album_id'];
+ return $albums[0]['album_id'];
+ }else{
+ return 0;
+ }
+ }
+ }
+
+ /**
+ * get the id of an song (case-insensitive)
+ * @param string name
+ * @param int artistId
+ * @param int albumId
+ * @return int
+ */
+ public static function getSongId($name,$artistId,$albumId){
+ if(empty($name)){
+ return 0;
+ }
+ $name=strtolower($name);
+ if(!isset(self::$albumIdCache[$artistId])){
+ self::$albumIdCache[$artistId]=array();
+ }
+ if(!isset(self::$albumIdCache[$artistId][$albumId])){
+ self::$albumIdCache[$artistId][$albumId]=array();
+ }
+ if(isset(self::$albumIdCache[$artistId][$albumId][$name])){
+ return self::$albumIdCache[$artistId][$albumId][$name];
+ }else{
+ $uid=$_SESSION['user_id'];
+ $query=OC_DB::prepare("SELECT song_id FROM *PREFIX*media_songs WHERE song_user=? AND song_name LIKE ? AND song_artist=? AND song_album=?");
+ $songs=$query->execute(array($uid,$name,$artistId,$albumId))->fetchAll();
+ if(is_array($songs) and isset($songs[0])){
+ self::$albumIdCache[$artistId][$albumId][$name]=$songs[0]['song_id'];
+ return $songs[0]['song_id'];
+ }else{
+ return 0;
+ }
+ }
+ }
+
+ /**
+ * Get the list of artists that (optionally) match a search string
+ * @param string search optional
+ * @return array the list of artists found
+ */
+ static public function getArtists($search='%',$exact=false){
+ if(!$exact and $search!='%'){
+ $search="%$search%";
+ }
+ $query=OC_DB::prepare("SELECT * FROM *PREFIX*media_artists WHERE artist_name LIKE ?");
+ $artists=$query->execute(array($search))->fetchAll();
+ if(is_array($artists)){
+ return $artists;
+ }else{
+ return array();
+ }
+ }
+
+ /**
+ * Add an artists to the database
+ * @param string name
+ * @return integer the artist_id of the added artist
+ */
+ static public function addArtist($name){
+ $name=trim($name);
+ if($name==''){
+ return 0;
+ }
+ //check if the artist is already in the database
+ $artistId=self::getArtistId($name);
+ if($artistId!=0){
+ return $artistId;
+ }else{
+ $query=OC_DB::prepare("INSERT INTO `*PREFIX*media_artists` (`artist_id` ,`artist_name`) VALUES (NULL , ?)");
+ $result=$query->execute(array($name));
+ return self::getArtistId($name);;
+ }
+ }
+
+ /**
+ * Get the list of albums that (optionally) match an artist and/or search string
+ * @param integer artist optional
+ * @param string search optional
+ * @return array the list of albums found
+ */
+ static public function getAlbums($artist=0,$search='%',$exact=false){
+ $cmd="SELECT * FROM *PREFIX*media_albums WHERE 1=1 ";
+ $params=array();
+ if($artist!=0){
+ $cmd.="AND album_artist = ? ";
+ array_push($params,$artist);
+ }
+ if($search!='%'){
+ $cmd.="AND album_name LIKE ? ";
+ if(!$exact){
+ $search="%$search%";
+ }
+ array_push($params,$search);
+ }
+ $query=OC_DB::prepare($cmd);
+ $albums=$query->execute($params)->fetchAll();
+ if(is_array($albums)){
+ return $albums;
+ }else{
+ return array();
+ }
+ }
+
+ /**
+ * Add an album to the database
+ * @param string name
+ * @param integer artist
+ * @return integer the album_id of the added artist
+ */
+ static public function addAlbum($name,$artist){
+ $name=trim($name);
+ if($name==''){
+ return 0;
+ }
+ //check if the album is already in the database
+ $albumId=self::getAlbumId($name,$artist);
+ if($albumId!=0){
+ return $albumId;
+ }else{
+ $query=OC_DB::prepare("INSERT INTO `*PREFIX*media_albums` (`album_id` ,`album_name` ,`album_artist`) VALUES (NULL , ?, ?)");
+ $query->execute(array($name,$artist));
+ return self::getAlbumId($name,$artist);
+ }
+ }
+
+ /**
+ * Get the list of songs that (optionally) match an artist and/or album and/or search string
+ * @param integer artist optional
+ * @param integer album optional
+ * @param string search optional
+ * @return array the list of songs found
+ */
+ static public function getSongs($artist=0,$album=0,$search='',$exact=false){
+ $uid=self::$uid;
+ if(empty($uid)){
+ $uid=self::$uid=$_SESSION['user_id'];
+ }
+ $params=array($uid);
+ if($artist!=0){
+ $artistString="AND song_artist = ?";
+ array_push($params,$artist);
+ }else{
+ $artistString='';
+ }
+ if($album!=0){
+ $albumString="AND song_album = ?";
+ array_push($params,$album);
+ }else{
+ $albumString='';
+ }
+ if($search){
+ if(!$exact){
+ $search="%$search%";
+ }
+ $searchString ="AND song_name LIKE ?";
+ array_push($params,$search);
+ }else{
+ $searchString='';
+ }
+ $query=OC_DB::prepare("SELECT * FROM *PREFIX*media_songs WHERE song_user=? $artistString $albumString $searchString");
+ $songs=$query->execute($params)->fetchAll();
+ if(is_array($songs)){
+ return $songs;
+ }else{
+ return array();
+ }
+ }
+
+ /**
+ * Add an song to the database
+ * @param string name
+ * @param string path
+ * @param integer artist
+ * @param integer album
+ * @return integer the song_id of the added artist
+ */
+ static public function addSong($name,$path,$artist,$album,$length,$track,$size){
+ $name=trim($name);
+ $path=trim($path);
+ if($name=='' or $path==''){
+ return 0;
+ }
+ $uid=$_SESSION['user_id'];
+ //check if the song is already in the database
+ $songId=self::getSongId($name,$artist,$album);
+ if($songId!=0){
+ return $songId;
+ }else{
+ $query=OC_DB::prepare("INSERT INTO `*PREFIX*media_songs` (`song_id` ,`song_name` ,`song_artist` ,`song_album` ,`song_path` ,`song_user`,`song_length`,`song_track`,`song_size`) VALUES (NULL , ?, ?, ?, ?,?,?,?,?)");
+ $query->execute(array($name,$artist,$album,$path,$uid,$length,$track,$size));
+ $songId=OC_DB::insertid();
+// self::setLastUpdated();
+ return self::getSongId($name,$artist,$album);
+ }
+ }
+
+ public static function getSongCount(){
+ $query=OC_DB::prepare("SELECT COUNT(song_id) AS count FROM *PREFIX*media_songs");
+ $result=$query->execute()->fetchAll();
+ return $result[0]['count'];
+ }
+
+ public static function getArtistCount(){
+ $query=OC_DB::prepare("SELECT COUNT(artist_id) AS count FROM *PREFIX*media_artists");
+ $result=$query->execute()->fetchAll();
+ return $result[0]['count'];
+ }
+
+ public static function getAlbumCount(){
+ $query=OC_DB::prepare("SELECT COUNT(album_id) AS count FROM *PREFIX*media_albums");
+ $result=$query->execute()->fetchAll();
+ return $result[0]['count'];
+ }
+
+ public static function getArtistName($artistId){
+ $query=OC_DB::prepare("SELECT artist_name FROM *PREFIX*media_artists WHERE artist_id=?");
+ $artist=$query->execute(array($artistId))->fetchAll();
+ if(count($artist)>0){
+ return $artist[0]['artist_name'];
+ }else{
+ return '';
+ }
+ }
+
+ public static function getAlbumName($albumId){
+ $query=OC_DB::prepare("SELECT album_name FROM *PREFIX*media_albums WHERE album_id=?");
+ $album=$query->execute(array($albumId))->fetchAll();
+ if(count($album)>0){
+ return $album[0]['album_name'];
+ }else{
+ return '';
+ }
+ }
+
+ public static function getSong($id){
+ $query=OC_DB::prepare("SELECT * FROM *PREFIX*media_songs WHERE song_id=?");
+ $song=$query->execute(array($id))->fetchAll();
+ if(count($song)>0){
+ return $song[0];
+ }else{
+ return '';
+ }
+ }
+
+ /**
+ * get the number of songs in a directory
+ * @param string $path
+ */
+ public static function getSongCountByPath($path){
+ $query=OC_DB::prepare("SELECT COUNT(song_id) AS count FROM *PREFIX*media_songs WHERE song_path LIKE ?");
+ $result=$query->execute(array("$path%"))->fetchAll();
+ return $result[0]['count'];
+ }
+
+ /**
+ * remove a song from the database by path
+ * @param string $path the path of the song
+ *
+ * if a path of a folder is passed, all songs stored in the folder will be removed from the database
+ */
+ public static function deleteSongByPath($path){
+ $query=OC_DB::prepare("DELETE FROM *PREFIX*media_songs WHERE song_path LIKE ?");
+ $query->execute(array("$path%"));
+ }
+}
+
+?> \ No newline at end of file