diff options
author | Frank Karlitschek <karlitschek@kde.org> | 2011-04-17 15:06:18 +0200 |
---|---|---|
committer | Frank Karlitschek <karlitschek@kde.org> | 2011-04-17 15:06:18 +0200 |
commit | c070b624a69c0f51ebfb1cd3c3fda01d98bfd91d (patch) | |
tree | 104a32d3518be3cdac72428e708b6d37a653188d /lib | |
parent | e37151a3f1e2954e11fca383b2aebb14ee4c28b5 (diff) | |
parent | 542a0a251874f69f9cf2cf9472998dc0a04880c8 (diff) | |
download | nextcloud-server-c070b624a69c0f51ebfb1cd3c3fda01d98bfd91d.tar.gz nextcloud-server-c070b624a69c0f51ebfb1cd3c3fda01d98bfd91d.zip |
Merge branch 'refactoring' of git.kde.org:owncloud into refactoring
Diffstat (limited to 'lib')
-rw-r--r-- | lib/filestorage.php | 58 |
1 files changed, 43 insertions, 15 deletions
diff --git a/lib/filestorage.php b/lib/filestorage.php index fbd28a7dfb3..66b91fc19aa 100644 --- a/lib/filestorage.php +++ b/lib/filestorage.php @@ -92,13 +92,14 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ } public function mkdir($path){ if($return=mkdir($this->datadir.$path)){ - $this->notifyObservers($path,OC_FILEACTION_CREATE); + $this->clearFolderSizeCache($path); } return $return; } public function rmdir($path){ if($return=rmdir($this->datadir.$path)){ $this->notifyObservers($path,OC_FILEACTION_DELETE); + $this->clearFolderSizeCache($path); } return $return; } @@ -170,6 +171,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ public function unlink($path){ if($return=unlink($this->datadir.$path)){ $this->notifyObservers($path,OC_FILEACTION_DELETE); + $this->clearFolderSizeCache($path); } return $return; } @@ -189,6 +191,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ } if($return=copy($this->datadir.$path1,$this->datadir.$path2)){ $this->notifyObservers($path2,OC_FILEACTION_CREATE); + $this->clearFolderSizeCache($path); } return $return; } @@ -383,6 +386,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ if(rename($tmpFile,$this->datadir.$path)){ touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']); $this->notifyObservers($path,OC_FILEACTION_CREATE); + $this->clearFolderSizeCache($path); return true; }else{ return false; @@ -394,6 +398,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ if(move_uploaded_file($tmpFile,$this->datadir.$path)){ touch($this->datadir.$path, $fileStats['mtime'], $fileStats['atime']); $this->notifyObservers($path,OC_FILEACTION_CREATE); + $this->clearFolderSizeCache($path); return true; }else{ return false; @@ -410,6 +415,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ if(is_file($dir.'/'.$item)){ if(unlink($dir.'/'.$item)){ $this->notifyObservers($dir.'/'.$item,OC_FILEACTION_DELETE); + $this->clearFolderSizeCache($path); } }elseif(is_dir($dir.'/'.$item)){ if (!$this->delTree($dirRelative. "/" . $item)){ @@ -419,6 +425,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ } if($return=rmdir($dir)){ $this->notifyObservers($dir,OC_FILEACTION_DELETE); + $this->clearFolderSizeCache($path); } return $return; } @@ -481,24 +488,33 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ * @return int size of folder and it's content */ public function calculateFolderSize($path){ + if($this->is_file($path)){ + $path=dirname($path); + } + $path=str_replace('//','/',$path); + if($this->is_dir($path) and substr($path,-1)!='/'){ + $path.='/'; + } + error_log("calc: $path"); $size=0; if ($dh = $this->opendir($path)) { - while (($filename = readdir($dh)) !== false) { - if($filename!='.' and $filename!='..'){ - $subFile=$path.'/'.$filename; - if($this->is_file($subFile)){ - $size+=$this->filesize($subFile); - }else{ - $size+=$this->calculateFolderSize($subFile); - } - } - } $query=OC_DB::prepare("SELECT size FROM *PREFIX*foldersize WHERE path=?"); $hasSize=$query->execute(array($path))->fetchAll(); if(count($hasSize)>0){// yes, update it $query=OC_DB::prepare("UPDATE *PREFIX*foldersize SET size=? WHERE path=?"); $result=$query->execute(array($size,$path)); + $size+=$hasSize[0]['size']; }else{// no insert it + while (($filename = readdir($dh)) !== false) { + if($filename!='.' and $filename!='..'){ + $subFile=$path.'/'.$filename; + if($this->is_file($subFile)){ + $size+=$this->filesize($subFile); + }else{ + $size+=$this->calculateFolderSize($subFile); + } + } + } $query=OC_DB::prepare("INSERT INTO *PREFIX*foldersize VALUES(?,?)"); $result=$query->execute(array($path,$size)); } @@ -511,13 +527,25 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ * @param string $path */ public function clearFolderSizeCache($path){ - $path=dirname($path); + if($this->is_file($path)){ + $path=dirname($path); + } + $path=str_replace('//','/',$path); + if($this->is_dir($path) and substr($path,-1)!='/'){ + $path.='/'; + } + error_log($path); $query=OC_DB::prepare("DELETE FROM *PREFIX*foldersize WHERE path = ?"); $result=$query->execute(array($path)); - if($path!='/'){ - $parts=explode('/'); - array_pop($parts); + if($path!='/' and $path!=''){ + $parts=explode('/',$path); + //pop empty part + $part=array_pop($parts); + if(empty($part)){ + array_pop($parts); + } $parent=implode('/',$parts); + $this->clearFolderSizeCache($parent); } } } |