diff --git a/lib/base.php b/lib/base.php index af860027c1..d3f3c5ba1c 100644 --- a/lib/base.php +++ b/lib/base.php @@ -346,8 +346,9 @@ class OC{ } } - // register cache cleanup + // register cache cleanup jobs OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc'); + OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener'); // Check for blacklisted files OC_Hook::connect('OC_Filesystem','write','OC_Filesystem','isBlacklisted'); diff --git a/lib/cache/file.php b/lib/cache/file.php index 562c3d1716..7298ba9074 100644 --- a/lib/cache/file.php +++ b/lib/cache/file.php @@ -74,4 +74,25 @@ class OC_Cache_File{ } return true; } + + public function gc() { + $storage = $this->getStorage(); + if($storage and $storage->is_dir('/')) { + $now = time(); + $dh=$storage->opendir('/'); + while($file=readdir($dh)) { + if($file!='.' and $file!='..') { + $mtime = $storage->filemtime('/'.$file); + if ($mtime < $now) { + $storage->unlink('/'.$file); + } + } + } + } + } + + public static function loginListener() { + $c = new self(); + $c->gc(); + } }