aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/files/cache/scanner.php9
-rw-r--r--lib/files/view.php30
-rw-r--r--tests/lib/files/view.php1
3 files changed, 23 insertions, 17 deletions
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 4c0ec9617f9..526d4a2aab5 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -24,11 +24,6 @@ class Scanner {
*/
private $cache;
- /**
- * @var \OC\Files\Cache\Permissions $permissionsCache
- */
- private $permissionsCache;
-
const SCAN_RECURSIVE = true;
const SCAN_SHALLOW = false;
@@ -36,7 +31,6 @@ class Scanner {
$this->storage = $storage;
$this->storageId = $this->storage->getId();
$this->cache = $storage->getCache();
- $this->permissionsCache = $storage->getPermissionsCache();
}
/**
@@ -53,10 +47,8 @@ class Scanner {
$data['mtime'] = $this->storage->filemtime($path);
if ($data['mimetype'] == 'httpd/unix-directory') {
$data['size'] = -1; //unknown
- $data['permissions'] = $this->storage->getPermissions($path . '/');
} else {
$data['size'] = $this->storage->filesize($path);
- $data['permissions'] = $this->storage->getPermissions($path);
}
return $data;
}
@@ -81,7 +73,6 @@ class Scanner {
}
}
$id = $this->cache->put($file, $data);
- $this->permissionsCache->set($id, \OC_User::getUser(), $data['permissions']);
}
return $data;
}
diff --git a/lib/files/view.php b/lib/files/view.php
index 9ba3eea3cf9..124345f3c6f 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -680,6 +680,8 @@ class View {
list($storage, $internalPath) = Filesystem::resolvePath($path);
if ($storage) {
$cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
if (!$cache->inCache($internalPath)) {
$scanner = $storage->getScanner($internalPath);
@@ -705,8 +707,12 @@ class View {
}
}
- $permissionsCache = $storage->getPermissionsCache($internalPath);
- $data['permissions'] = $permissionsCache->get($data['fileid'], \OC_User::getUser());
+ $permissions = $permissionsCache->get($data['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($internalPath);
+ $permissionsCache->set($data['fileid'], $user, $permissions);
+ }
+ $data['permissions'] = $permissions;
}
}
return $data;
@@ -728,6 +734,8 @@ class View {
list($storage, $internalPath) = Filesystem::resolvePath($path);
if ($storage) {
$cache = $storage->getCache($internalPath);
+ $permissionsCache = $storage->getPermissionsCache($internalPath);
+ $user = \OC_User::getUser();
if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) {
$scanner = $storage->getScanner($internalPath);
@@ -743,12 +751,13 @@ class View {
foreach ($files as $i => $file) {
$files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
$ids[] = $file['fileid'];
- }
- $permissionsCache = $storage->getPermissionsCache($internalPath);
- $permissions = $permissionsCache->getMultiple($ids, \OC_User::getUser());
- foreach ($files as $i => $file) {
- $files[$i]['permissions'] = $permissions[$file['fileid']];
+ $permissions = $permissionsCache->get($file['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $storage->getPermissions($file['path']);
+ $permissionsCache->set($file['fileid'], $user, $permissions);
+ }
+ $files[$i]['permissions'] = $permissions;
}
//add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders
@@ -772,7 +781,12 @@ class View {
$rootEntry['name'] = $relativePath;
$rootEntry['type'] = $rootEntry['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
$subPermissionsCache = $subStorage->getPermissionsCache('');
- $rootEntry['permissions'] = $subPermissionsCache->get($rootEntry['fileid'], \OC_User::getUser());
+ $permissions = $subPermissionsCache->get($rootEntry['fileid'], $user);
+ if ($permissions === -1) {
+ $permissions = $subStorage->getPermissions($rootEntry['path']);
+ $subPermissionsCache->set($rootEntry['fileid'], $user, $permissions);
+ }
+ $rootEntry['permissions'] = $subPermissionsCache;
$files[] = $rootEntry;
}
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 712166ab32c..4b0abc2201d 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -43,6 +43,7 @@ class View extends \PHPUnit_Framework_TestCase {
$cachedData = $rootView->getFileInfo('/foo.txt');
$this->assertEquals($textSize, $cachedData['size']);
$this->assertEquals('text/plain', $cachedData['mimetype']);
+ $this->assertEquals(\OCP\PERMISSION_ALL ^ \OCP\PERMISSION_CREATE, $cachedData['permissions']);
$cachedData = $rootView->getFileInfo('/');
$this->assertEquals($storageSize * 3, $cachedData['size']);