aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/base.php4
-rw-r--r--lib/cache.php8
-rw-r--r--lib/cache/broker.php4
-rw-r--r--lib/cache/file.php13
-rw-r--r--lib/cache/fileglobal.php7
-rw-r--r--lib/cache/fileglobalgc.php5
-rw-r--r--lib/cache/usercache.php77
-rw-r--r--lib/filechunking.php2
-rw-r--r--lib/public/icache.php55
-rw-r--r--lib/public/iservercontainer.php7
-rw-r--r--lib/server.php34
-rw-r--r--tests/lib/cache/file.php30
-rw-r--r--tests/lib/cache/usercache.php68
13 files changed, 270 insertions, 44 deletions
diff --git a/lib/base.php b/lib/base.php
index 1720a5fd7e1..520be11bc52 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -564,11 +564,11 @@ class OC {
if (OC_Config::getValue('installed', false)) { //don't try to do this before we are properly setup
// register cache cleanup jobs
try { //if this is executed before the upgrade to the new backgroundjob system is completed it will throw an exception
- \OCP\BackgroundJob::registerJob('OC_Cache_FileGlobalGC');
+ \OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
} catch (Exception $e) {
}
- OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
+ OC_Hook::connect('OC_User', 'post_login', 'OC\Cache\File', 'loginListener');
}
}
diff --git a/lib/cache.php b/lib/cache.php
index 48b9964ba9d..c99663a0ca5 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class OC_Cache {
+namespace OC\Cache;
+
+class Cache {
/**
* @var OC_Cache $user_cache
*/
@@ -22,7 +24,7 @@ class OC_Cache {
*/
static public function getGlobalCache() {
if (!self::$global_cache) {
- self::$global_cache = new OC_Cache_FileGlobal();
+ self::$global_cache = new FileGlobal();
}
return self::$global_cache;
}
@@ -33,7 +35,7 @@ class OC_Cache {
*/
static public function getUserCache() {
if (!self::$user_cache) {
- self::$user_cache = new OC_Cache_File();
+ self::$user_cache = new File();
}
return self::$user_cache;
}
diff --git a/lib/cache/broker.php b/lib/cache/broker.php
index a161dbfa3bb..b7f1b67a6d3 100644
--- a/lib/cache/broker.php
+++ b/lib/cache/broker.php
@@ -6,7 +6,9 @@
* See the COPYING-README file.
*/
-class OC_Cache_Broker {
+namespace OC\Cache;
+
+class Broker {
protected $fast_cache;
protected $slow_cache;
diff --git a/lib/cache/file.php b/lib/cache/file.php
index 361138e4736..2ab914d17b8 100644
--- a/lib/cache/file.php
+++ b/lib/cache/file.php
@@ -6,24 +6,25 @@
* See the COPYING-README file.
*/
+namespace OC\Cache;
-class OC_Cache_File{
+class File {
protected $storage;
protected function getStorage() {
if (isset($this->storage)) {
return $this->storage;
}
- if(OC_User::isLoggedIn()) {
- \OC\Files\Filesystem::initMountPoints(OC_User::getUser());
+ if(\OC_User::isLoggedIn()) {
+ \OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
$subdir = 'cache';
- $view = new \OC\Files\View('/'.OC_User::getUser());
+ $view = new \OC\Files\View('/' . \OC_User::getUser());
if(!$view->file_exists($subdir)) {
$view->mkdir($subdir);
}
- $this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
+ $this->storage = new \OC\Files\View('/' . \OC_User::getUser().'/'.$subdir);
return $this->storage;
}else{
- OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
+ \OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
return false;
}
}
diff --git a/lib/cache/fileglobal.php b/lib/cache/fileglobal.php
index c0bd8e45f39..9ca17402933 100644
--- a/lib/cache/fileglobal.php
+++ b/lib/cache/fileglobal.php
@@ -6,8 +6,9 @@
* See the COPYING-README file.
*/
+namespace OC\Cache;
-class OC_Cache_FileGlobal{
+class FileGlobal {
static protected function getCacheDir() {
$cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
if (!is_dir($cache_dir)) {
@@ -80,13 +81,13 @@ class OC_Cache_FileGlobal{
}
static public function gc() {
- $last_run = OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
+ $last_run = \OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
$now = time();
if (($now - $last_run) < 300) {
// only do cleanup every 5 minutes
return;
}
- OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
+ \OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
$cache_dir = self::getCacheDir();
if($cache_dir and is_dir($cache_dir)) {
$dh=opendir($cache_dir);
diff --git a/lib/cache/fileglobalgc.php b/lib/cache/fileglobalgc.php
index a29c31f9063..399dd5e6f94 100644
--- a/lib/cache/fileglobalgc.php
+++ b/lib/cache/fileglobalgc.php
@@ -1,8 +1,9 @@
<?php
+namespace OC\Cache;
-class OC_Cache_FileGlobalGC extends \OC\BackgroundJob\Job{
+class FileGlobalGC extends \OC\BackgroundJob\Job{
public function run($argument){
- OC_Cache_FileGlobal::gc();
+ FileGlobal::gc();
}
}
diff --git a/lib/cache/usercache.php b/lib/cache/usercache.php
new file mode 100644
index 00000000000..aac3b39af33
--- /dev/null
+++ b/lib/cache/usercache.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Cache;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+class UserCache implements \OCP\ICache {
+
+ /**
+ * @var OC\Cache\File $userCache
+ */
+ protected $userCache;
+
+ public function __construct() {
+ $this->userCache = new File();
+ }
+
+ /**
+ * Get a value from the user cache
+ *
+ * @param string $key
+ * @return mixed
+ */
+ public function get($key) {
+ return $this->userCache->get($key);
+ }
+
+ /**
+ * Set a value in the user cache
+ *
+ * @param string $key
+ * @param mixed $value
+ * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+ * @return bool
+ */
+ public function set($key, $value, $ttl = 0) {
+ if (empty($key)) {
+ return false;
+ }
+ return $this->userCache->set($key, $value, $ttl);
+ }
+
+ /**
+ * Check if a value is set in the user cache
+ *
+ * @param string $key
+ * @return bool
+ */
+ public function hasKey($key) {
+ return $this->userCache->hasKey($key);
+ }
+
+ /**
+ * Remove an item from the user cache
+ *
+ * @param string $key
+ * @return bool
+ */
+ public function remove($key) {
+ return $this->userCache->remove($key);
+ }
+
+ /**
+ * clear the user cache of all entries starting with a prefix
+ * @param string prefix (optional)
+ * @return bool
+ */
+ public function clear($prefix = '') {
+ return $this->userCache->clear($prefix);
+ }
+}
diff --git a/lib/filechunking.php b/lib/filechunking.php
index e6d69273a44..313a6ee87d2 100644
--- a/lib/filechunking.php
+++ b/lib/filechunking.php
@@ -29,7 +29,7 @@ class OC_FileChunking {
protected function getCache() {
if (!isset($this->cache)) {
- $this->cache = new OC_Cache_File();
+ $this->cache = new \OC\Cache\File();
}
return $this->cache;
}
diff --git a/lib/public/icache.php b/lib/public/icache.php
new file mode 100644
index 00000000000..202459f7c24
--- /dev/null
+++ b/lib/public/icache.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+interface ICache {
+
+ /**
+ * Get a value from the user cache
+ *
+ * @param string $key
+ * @return mixed
+ */
+ public function get($key);
+
+ /**
+ * Set a value in the user cache
+ *
+ * @param string $key
+ * @param mixed $value
+ * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+ * @return bool
+ */
+ public function set($key, $value, $ttl = 0);
+
+ /**
+ * Check if a value is set in the user cache
+ *
+ * @param string $key
+ * @return bool
+ */
+ public function hasKey($key);
+
+ /**
+ * Remove an item from the user cache
+ *
+ * @param string $key
+ * @return bool
+ */
+ public function remove($key);
+
+ /**
+ * clear the user cache of all entries starting with a prefix
+ * @param string prefix (optional)
+ * @return bool
+ */
+ public function clear($prefix = '');
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index d88330698dc..1087c24edc0 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,4 +62,11 @@ interface IServerContainer {
*/
function getRootFolder();
+ /**
+ * Returns an ICache instance
+ *
+ * @return \OCP\ICache
+ */
+ function getCache();
+
}
diff --git a/lib/server.php b/lib/server.php
index 9e87bd3190d..f02b2bed8de 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -17,10 +17,10 @@ use OCP\IServerContainer;
class Server extends SimpleContainer implements IServerContainer {
function __construct() {
- $this->registerService('ContactsManager', function($c){
+ $this->registerService('ContactsManager', function($c) {
return new ContactsManager();
});
- $this->registerService('Request', function($c){
+ $this->registerService('Request', function($c) {
$params = array();
// we json decode the body only in case of content type json
@@ -46,10 +46,10 @@ class Server extends SimpleContainer implements IServerContainer {
)
);
});
- $this->registerService('PreviewManager', function($c){
+ $this->registerService('PreviewManager', function($c) {
return new PreviewManager();
});
- $this->registerService('RootFolder', function($c){
+ $this->registerService('RootFolder', function($c) {
// TODO: get user and user manager from container as well
$user = \OC_User::getUser();
$user = \OC_User::getManager()->get($user);
@@ -57,6 +57,9 @@ class Server extends SimpleContainer implements IServerContainer {
$view = new View();
return new Root($manager, $view, $user);
});
+ $this->registerService('UserCache', function($c) {
+ return new UserCache();
+ });
}
/**
@@ -67,14 +70,13 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
- * The current request object holding all information about the request currently being processed
- * is returned from this method.
+ * The current request object holding all information about the request
+ * currently being processed is returned from this method.
* In case the current execution was not initiated by a web request null is returned
*
* @return \OCP\IRequest|null
*/
- function getRequest()
- {
+ function getRequest() {
return $this->query('Request');
}
@@ -83,8 +85,7 @@ class Server extends SimpleContainer implements IServerContainer {
*
* @return \OCP\IPreview
*/
- function getPreviewManager()
- {
+ function getPreviewManager() {
return $this->query('PreviewManager');
}
@@ -93,8 +94,17 @@ class Server extends SimpleContainer implements IServerContainer {
*
* @return \OCP\Files\Folder
*/
- function getRootFolder()
- {
+ function getRootFolder() {
return $this->query('RootFolder');
}
+
+ /**
+ * Returns an ICache instance
+ *
+ * @return \OCP\ICache
+ */
+ function getCache() {
+ return $this->query('UserCache');
+ }
+
}
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 038cb21b257..3767c83fcb1 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -20,7 +20,9 @@
*
*/
-class Test_Cache_File extends Test_Cache {
+namespace Test\Cache;
+
+class FileCache extends \Test_Cache {
private $user;
private $datadir;
@@ -30,8 +32,8 @@ class Test_Cache_File extends Test_Cache {
public function setUp() {
//clear all proxies and hooks so we can do clean testing
- OC_FileProxy::clearProxies();
- OC_Hook::clear('OC_Filesystem');
+ \OC_FileProxy::clearProxies();
+ \OC_Hook::clear('OC_Filesystem');
//disabled atm
//enable only the encryption hook if needed
@@ -44,27 +46,27 @@ class Test_Cache_File extends Test_Cache {
$storage = new \OC\Files\Storage\Temporary(array());
\OC\Files\Filesystem::mount($storage,array(),'/');
$datadir = str_replace('local::', '', $storage->getId());
- $this->datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data');
- OC_Config::setValue('datadirectory', $datadir);
+ $this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+ \OC_Config::setValue('datadirectory', $datadir);
- OC_User::clearBackends();
- OC_User::useBackend(new OC_User_Dummy());
+ \OC_User::clearBackends();
+ \OC_User::useBackend(new \OC_User_Dummy());
//login
- OC_User::createUser('test', 'test');
+ \OC_User::createUser('test', 'test');
- $this->user=OC_User::getUser();
- OC_User::setUserId('test');
+ $this->user = \OC_User::getUser();
+ \OC_User::setUserId('test');
//set up the users dir
- $rootView=new \OC\Files\View('');
+ $rootView = new \OC\Files\View('');
$rootView->mkdir('/test');
- $this->instance=new OC_Cache_File();
+ $this->instance=new \OC\Cache\File();
}
public function tearDown() {
- OC_User::setUserId($this->user);
- OC_Config::setValue('datadirectory', $this->datadir);
+ \OC_User::setUserId($this->user);
+ \OC_Config::setValue('datadirectory', $this->datadir);
}
}
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
new file mode 100644
index 00000000000..21b7f848ab6
--- /dev/null
+++ b/tests/lib/cache/usercache.php
@@ -0,0 +1,68 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace Test\Cache;
+
+class UserCache extends \Test_Cache {
+ private $user;
+ private $datadir;
+
+ public function setUp() {
+ //clear all proxies and hooks so we can do clean testing
+ \OC_FileProxy::clearProxies();
+ \OC_Hook::clear('OC_Filesystem');
+
+ //disabled atm
+ //enable only the encryption hook if needed
+ //if(OC_App::isEnabled('files_encryption')) {
+ // OC_FileProxy::register(new OC_FileProxy_Encryption());
+ //}
+
+ //set up temporary storage
+ \OC\Files\Filesystem::clearMounts();
+ $storage = new \OC\Files\Storage\Temporary(array());
+ \OC\Files\Filesystem::mount($storage,array(),'/');
+ $datadir = str_replace('local::', '', $storage->getId());
+ $this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+ \OC_Config::setValue('datadirectory', $datadir);
+
+ \OC_User::clearBackends();
+ \OC_User::useBackend(new \OC_User_Dummy());
+
+ //login
+ \OC_User::createUser('test', 'test');
+
+ $this->user = \OC_User::getUser();
+ \OC_User::setUserId('test');
+
+ //set up the users dir
+ $rootView=new \OC\Files\View('');
+ $rootView->mkdir('/test');
+
+ $this->instance=new \OC\Cache\UserCache();
+ }
+
+ public function tearDown() {
+ \OC_User::setUserId($this->user);
+ \OC_Config::setValue('datadirectory', $this->datadir);
+ }
+}