From 64b68f2474c2101ccd24e06dc78934133753865f Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 25 Sep 2011 01:34:19 +0200 Subject: [PATCH] correctly update the collection when music files are moved around --- apps/media/ajax/api.php | 2 +- apps/media/lib_collection.php | 20 ++++++++++++++++---- apps/media/lib_media.php | 9 +++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/apps/media/ajax/api.php b/apps/media/ajax/api.php index 31ff33bf03a..c5909e4c78b 100644 --- a/apps/media/ajax/api.php +++ b/apps/media/ajax/api.php @@ -134,7 +134,7 @@ if($arguments['action']){ } } -function findMusic($path='/'){ +function findMusic($path=''){ $music=array(); $dh=OC_Filesystem::opendir($path); if($dh){ diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php index 273ea2494f8..82c4afedd0a 100644 --- a/apps/media/lib_collection.php +++ b/apps/media/lib_collection.php @@ -251,10 +251,12 @@ class OC_MEDIA_COLLECTION{ if($name=='' or $path==''){ return 0; } - $uid=$_SESSION['user_id']; + $uid=OC_User::getUser(); //check if the song is already in the database $songId=self::getSongId($name,$artist,$album); if($songId!=0){ + $songInfo=self::getSong($songId); + self::moveSong($songInfo['song_path'],$path); return $songId; }else{ if(!isset(self::$queries['addsong'])){ @@ -357,13 +359,23 @@ class OC_MEDIA_COLLECTION{ */ public static function getSongByPath($path){ $query=OC_DB::prepare("SELECT song_id FROM *PREFIX*media_songs WHERE song_path = ?"); - $result=$query->execute(array($path))->fetchAll(); - if(count($result)>0){ - return $result[0]['song_id']; + $result=$query->execute(array($path)); + if($row=$result->fetchRow()){ + return $row['song_id']; }else{ return 0; } } + + /** + * set the path of a song + * @param string $oldPath + * @param string $newPath + */ + public static function moveSong($oldPath,$newPath){ + $query=OC_DB::prepare("UPDATE *PREFIX*media_songs SET song_path = ? WHERE song_path = ?"); + $query->execute(array($newPath,$oldPath)); + } } ?> \ No newline at end of file diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php index 1d8321a774c..7a666be8c27 100644 --- a/apps/media/lib_media.php +++ b/apps/media/lib_media.php @@ -30,6 +30,9 @@ OC_Hook::connect('OC_Filesystem','post_write','OC_MEDIA','updateFile'); //listen for file deletions to clean the database if a song is deleted OC_Hook::connect('OC_Filesystem','delete','OC_MEDIA','deleteFile'); +//list for file moves to update the database +OC_Hook::connect('OC_Filesystem','post_rename','OC_MEDIA','moveFile'); + class OC_MEDIA{ /** * get the sha256 hash of the password needed for ampache @@ -61,6 +64,7 @@ class OC_MEDIA{ $path=substr($path,1); } $path='/'.$path; + error_log("$path was updated"); OC_MEDIA_SCANNER::scanFile($path); } @@ -72,6 +76,11 @@ class OC_MEDIA{ require_once 'lib_collection.php'; OC_MEDIA_COLLECTION::deleteSongByPath($path); } + + public static function moveFile($params){ + require_once 'lib_collection.php'; + OC_MEDIA_COLLECTION::moveSong($params['oldpath'],$params['newpath']); + } } class OC_MediaSearchProvider extends OC_Search_Provider{ -- 2.39.5