Blame view
sources/lib/private/cache/file.php
3.2 KB
|
03e52840d
|
1 2 3 |
<?php /** * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> |
|
6d9380f96
|
4 |
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> |
|
03e52840d
|
5 6 7 8 |
* This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ |
|
31b7f2792
|
9 |
namespace OC\Cache; |
|
03e52840d
|
10 |
|
|
31b7f2792
|
11 |
class File {
|
|
03e52840d
|
12 |
protected $storage; |
|
6d9380f96
|
13 14 15 16 17 |
/** * Returns the cache storage for the logged in user * @return \OC\Files\View cache storage */ |
|
03e52840d
|
18 19 20 21 |
protected function getStorage() {
if (isset($this->storage)) {
return $this->storage;
}
|
|
31b7f2792
|
22 23 |
if(\OC_User::isLoggedIn()) {
\OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
|
|
6d9380f96
|
24 |
$this->storage = new \OC\Files\View('/' . \OC_User::getUser() . '/cache');
|
|
03e52840d
|
25 26 |
return $this->storage;
}else{
|
|
31b7f2792
|
27 |
\OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
|
|
6d9380f96
|
28 |
throw new \OC\ForbiddenException('Can\t get cache storage, user not logged in');
|
|
03e52840d
|
29 30 |
} } |
|
6d9380f96
|
31 32 33 |
/** * @param string $key */ |
|
03e52840d
|
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
public function get($key) {
$result = null;
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
if ($this->hasKey($key)) {
$storage = $this->getStorage();
$result = $storage->file_get_contents($key);
}
\OC_FileProxy::$enabled = $proxyStatus;
return $result;
}
/**
* Returns the size of the stored/cached data
*
|
|
6d9380f96
|
49 |
* @param string $key |
|
03e52840d
|
50 51 52 53 54 55 56 57 58 59 60 61 62 |
* @return int
*/
public function size($key) {
$result = 0;
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
if ($this->hasKey($key)) {
$storage = $this->getStorage();
$result = $storage->filesize($key);
}
\OC_FileProxy::$enabled = $proxyStatus;
return $result;
}
|
|
6d9380f96
|
63 64 65 |
/** * @param string $key */ |
|
03e52840d
|
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
public function set($key, $value, $ttl=0) {
$storage = $this->getStorage();
$result = false;
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
if ($storage and $storage->file_put_contents($key, $value)) {
if ($ttl === 0) {
$ttl = 86400; // 60*60*24
}
$result = $storage->touch($key, time() + $ttl);
}
\OC_FileProxy::$enabled = $proxyStatus;
return $result;
}
public function hasKey($key) {
$storage = $this->getStorage();
if ($storage && $storage->is_file($key)) {
|
|
03e52840d
|
84 85 86 87 |
return true; } return false; } |
|
6d9380f96
|
88 89 90 |
/** * @param string $key */ |
|
03e52840d
|
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
public function remove($key) {
$storage = $this->getStorage();
if(!$storage) {
return false;
}
return $storage->unlink($key);
}
public function clear($prefix='') {
$storage = $this->getStorage();
if($storage and $storage->is_dir('/')) {
$dh=$storage->opendir('/');
if(is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if($file!='.' and $file!='..' and ($prefix==='' || strpos($file, $prefix) === 0)) {
$storage->unlink('/'.$file);
}
}
}
}
return true;
}
public function gc() {
$storage = $this->getStorage();
if($storage and $storage->is_dir('/')) {
$now = time();
$dh=$storage->opendir('/');
if(!is_resource($dh)) {
return null;
}
while (($file = readdir($dh)) !== false) {
if($file!='.' and $file!='..') {
$mtime = $storage->filemtime('/'.$file);
if ($mtime < $now) {
$storage->unlink('/'.$file);
}
}
}
}
}
public static function loginListener() {
$c = new self();
$c->gc();
}
}
|