From 53e51fe46b3a78b117bd43de922c0fea67d49670 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Tue, 28 Aug 2012 23:07:09 +0200
Subject: [PATCH] Clean user cache on login

---
 lib/base.php       |  3 ++-
 lib/cache/file.php | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/lib/base.php b/lib/base.php
index af860027c1d..d3f3c5ba1c6 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 562c3d17167..7298ba9074c 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();
+	}
 }
-- 
GitLab