move the identification of the real path of a shared file to the filecache

This commit is contained in:
Björn Schießle 2012-11-14 15:34:52 +01:00
parent cb55229c1e
commit cb0666e235
2 changed files with 26 additions and 13 deletions

View File

@ -49,19 +49,8 @@ if(strpos($dir, '..') === false) {
for($i=0;$i<$fileCount;$i++) { for($i=0;$i<$fileCount;$i++) {
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]); $target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) { if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i], $target)) {
if ( OC_App::isEnabled('files_sharing') && !strncmp($target, '/Shared/', 8)) { $meta = OC_FileCache::get($target);
$source = OC_Files_Sharing_Util::getSourcePath(str_replace('/Shared/', '', $target)); $id = OC_FileCache::getId($target);
$parts = explode('/', $source, 4);
$root = '/'.$parts[1].'/files';
$path = '/'.$parts[3];
} else {
$path = $target;
$root = false;
}
$meta = OC_FileCache::get($path, $root);
$id = OC_FileCache::getId($path, $root);
$result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'], 'id'=>$id, 'name'=>basename($target)); $result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'], 'id'=>$id, 'name'=>basename($target));
} }
} }

View File

@ -43,6 +43,9 @@ class OC_FileCache{
* - versioned * - versioned
*/ */
public static function get($path,$root=false) { public static function get($path,$root=false) {
list($path, $root) = self::getSourcePathOfSharedFile($path);
if(OC_FileCache_Update::hasUpdated($path,$root)) { if(OC_FileCache_Update::hasUpdated($path,$root)) {
if($root===false) {//filesystem hooks are only valid for the default root if($root===false) {//filesystem hooks are only valid for the default root
OC_Hook::emit('OC_Filesystem','post_write',array('path'=>$path)); OC_Hook::emit('OC_Filesystem','post_write',array('path'=>$path));
@ -277,6 +280,9 @@ class OC_FileCache{
* @return int * @return int
*/ */
public static function getId($path,$root=false) { public static function getId($path,$root=false) {
list($path, $root) = self::getSourcePathOfSharedFile($path);
if($root===false) { if($root===false) {
$root=OC_Filesystem::getRoot(); $root=OC_Filesystem::getRoot();
} }
@ -507,6 +513,24 @@ class OC_FileCache{
$query->execute(array('httpd/unix-directory')); $query->execute(array('httpd/unix-directory'));
} }
} }
/**
* get the real path and the root of a shared file
* @param string $path
* @return array with the path and the root of the give file
*/
private static function getSourcePathOfSharedFile($path) {
if ( OC_App::isEnabled('files_sharing') && !strncmp($path, '/Shared/', 8)) {
$source = OC_Files_Sharing_Util::getSourcePath(str_replace('/Shared/', '', $path));
$parts = explode('/', $source, 4);
$root = '/'.$parts[1].'/files';
$path = '/'.$parts[3];
} else {
$root = false;
}
return array($path, $root);
}
} }
//watch for changes and try to keep the cache up to date //watch for changes and try to keep the cache up to date