diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-02-21 20:48:14 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-02-21 20:48:49 +0100 |
commit | c20319d37701efb9d32c38dd71880739ca75b33f (patch) | |
tree | 1f2f523650e24ea0d1cefd02f653cb85eee57c37 /lib | |
parent | d9c7e4c333f858efaaee35d26ea12733d29bd694 (diff) | |
download | nextcloud-server-c20319d37701efb9d32c38dd71880739ca75b33f.tar.gz nextcloud-server-c20319d37701efb9d32c38dd71880739ca75b33f.zip |
fix incorrect information in the filecache when using encryption
Diffstat (limited to 'lib')
-rw-r--r-- | lib/filecache.php | 40 | ||||
-rw-r--r-- | lib/filesystemview.php | 6 |
2 files changed, 41 insertions, 5 deletions
diff --git a/lib/filecache.php b/lib/filecache.php index 5d299ff24ee..83eaffb171a 100644 --- a/lib/filecache.php +++ b/lib/filecache.php @@ -28,6 +28,8 @@ * It will try to keep the data up to date but changes from outside ownCloud can invalidate the cache */ class OC_FileCache{ + private static $savedData=array(); + /** * get the filesystem info from the cache * @param string path @@ -93,6 +95,14 @@ class OC_FileCache{ self::update($id,$data); return; } + if(isset(self::$savedData[$path])){ + $data=array_merge($data,self::$savedData[$path]); + unset(self::$savedData[$path]); + } + if(!isset($data['size']) or !isset($data['mtime'])){//save incomplete data for the next time we write it + self::$savedData[$path]=$data; + return; + } if(!isset($data['encrypted'])){ $data['encrypted']=false; } @@ -101,9 +111,8 @@ class OC_FileCache{ } $mimePart=dirname($data['mimetype']); $user=OC_User::getUser(); - $query=OC_DB::prepare('INSERT INTO *PREFIX*fscache(parent, name, path, size, mtime, ctime, mimetype, mimepart,user,writable) VALUES(?,?,?,?,?,?,?,?,?,?)'); - $query->execute(array($parent,basename($path),$path,$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart,$user,$data['writable'])); - + $query=OC_DB::prepare('INSERT INTO *PREFIX*fscache(parent, name, path, size, mtime, ctime, mimetype, mimepart,user,writable,encrypted,versioned) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)'); + $query->execute(array($parent,basename($path),$path,$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart,$user,$data['writable'],$data['encrypted'],$data['versioned'])); } /** @@ -323,7 +332,29 @@ class OC_FileCache{ } self::increaseSize(dirname($fullPath),$size-$cachedSize); } - + + public static function getCached($path,$root=''){ + if(!$root){ + $root=OC_Filesystem::getRoot(); + }else{ + if($root=='/'){ + $root=''; + } + } + $path=$root.$path; + $query=OC_DB::prepare('SELECT ctime,mtime,mimetype,size,encrypted,versioned,writable FROM *PREFIX*fscache WHERE path=?'); + $result=$query->execute(array($path))->fetchRow(); + if(is_array($result)){ + if(isset(self::$savedData[$path])){ + $result=array_merge($result,self::$savedData[$path]); + } + return $result; + }else{ + OC_Log::write('get(): file not found in cache ('.$path.')','core',OC_Log::DEBUG); + return false; + } + } + private static function getCachedSize($path,$root){ if(!$root){ $root=OC_Filesystem::getRoot(); @@ -332,6 +363,7 @@ class OC_FileCache{ $root=''; } } + $path=$root.$path; $query=OC_DB::prepare('SELECT size FROM *PREFIX*fscache WHERE path=?'); $result=$query->execute(array($path)); if($row=$result->fetchRow()){ diff --git a/lib/filesystemview.php b/lib/filesystemview.php index 58d5b3af715..c4d5ff35142 100644 --- a/lib/filesystemview.php +++ b/lib/filesystemview.php @@ -171,6 +171,7 @@ class OC_FilesystemView { } fclose($target); fclose($data); + OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, array( OC_Filesystem::signal_param_path => $path)); return true; }else{ return false; @@ -278,6 +279,9 @@ class OC_FilesystemView { } public function fromTmpFile($tmpFile,$path){ if(OC_Filesystem::isValidPath($path)){ + if(!$tmpFile){ + debug_print_backtrace(); + } $source=fopen($tmpFile,'r'); if($source){ $this->file_put_contents($path,$source); @@ -286,7 +290,7 @@ class OC_FilesystemView { }else{ } }else{ - error_log('invalid path'); + return false; } } |