From e984a3b47a539e3df20870b312564f874ebe4d07 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 17 Apr 2011 13:47:22 +0200 Subject: [PATCH 1/4] fix keeping track of foldersize --- lib/filestorage.php | 58 +++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/lib/filestorage.php b/lib/filestorage.php index fbd28a7dfb..66b91fc19a 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); } } } From 542a0a251874f69f9cf2cf9472998dc0a04880c8 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 17 Apr 2011 13:47:45 +0200 Subject: [PATCH 2/4] show real data in account information --- settings/index.php | 9 ++++++++- settings/templates/index.php | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/settings/index.php b/settings/index.php index 31db326f6b..521f2ade9d 100644 --- a/settings/index.php +++ b/settings/index.php @@ -8,7 +8,14 @@ if( !OC_USER::isLoggedIn()){ } -$tmpl = new OC_TEMPLATE( "settings", "index", "admin" ); +$tmpl = new OC_TEMPLATE( "settings", "index", "admin"); +$used=OC_FILESYSTEM::filesize('/'); +$free=disk_free_space(OC_CONFIG::getValue('datadirectory')); +$total=$free+$used; +$relative=round(($used/$total)*100); +$tmpl->assign('usage',OC_HELPER::humanFileSize($used)); +$tmpl->assign('total_space',OC_HELPER::humanFileSize($total)); +$tmpl->assign('usage_relative',$relative); $tmpl->printPage(); ?> diff --git a/settings/templates/index.php b/settings/templates/index.php index 910437fefc..f3f0b533a6 100644 --- a/settings/templates/index.php +++ b/settings/templates/index.php @@ -1,8 +1,8 @@
Account information -
 
-

You're currently using 72% (7.2GB) of your 10GB space.

+
 
+

You're currently using % () of your space.

From e37151a3f1e2954e11fca383b2aebb14ee4c28b5 Mon Sep 17 00:00:00 2001 From: Frank Karlitschek Date: Sun, 17 Apr 2011 15:05:34 +0200 Subject: [PATCH 3/4] move to admin area --- help/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help/index.php b/help/index.php index bed0ac7b6b..426abe3956 100644 --- a/help/index.php +++ b/help/index.php @@ -15,7 +15,7 @@ OC_APP::setActiveNavigationEntry( "help" ); $kbe=OC_OCSCLIENT::getKnownledgebaseEntries(); -$tmpl = new OC_TEMPLATE( "help", "index", "user" ); +$tmpl = new OC_TEMPLATE( "help", "index", "admin" ); $tmpl->assign( "kbe", $kbe ); $tmpl->printPage(); From 86356e888ecdcb80cde46c531305eef63cc49911 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 17 Apr 2011 15:25:51 +0200 Subject: [PATCH 4/4] save the correct config entry --- lib/installer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/installer.php b/lib/installer.php index 14e2be6600..965642e847 100644 --- a/lib/installer.php +++ b/lib/installer.php @@ -68,7 +68,7 @@ class OC_INSTALLER{ self::createDBUser($username,$password,$connection); //use the admin login data for the new database user OC_CONFIG::setValue('dbuser',$username); - OC_CONFIG::setValue('dbpass',$password); + OC_CONFIG::setValue('dbpassword',$password); //create the database self::createDatabase($dbname,$username,$connection);