Procházet zdrojové kódy

Merge pull request #39944 from nextcloud/share-cache-share

pass the share to the cache instead of having to ask the storage
Robin Appelman před 9 měsíci
rodič
revize
d4e67afed7

+ 12 - 4
apps/files_sharing/lib/Cache.php

@@ -41,6 +41,7 @@ use OCP\Files\Search\ISearchOperator;
 use OCP\Files\StorageNotAvailableException;
 use OCP\ICacheFactory;
 use OCP\IUserManager;
+use OCP\Share\IShare;
 
 /**
  * Metadata cache for shared files
@@ -55,15 +56,22 @@ class Cache extends CacheJail {
 	private ?string $ownerDisplayName = null;
 	private $numericId;
 	private DisplayNameCache $displayNameCache;
+	private IShare $share;
 
 	/**
 	 * @param SharedStorage $storage
 	 */
-	public function __construct($storage, ICacheEntry $sourceRootInfo, DisplayNameCache $displayNameCache) {
+	public function __construct(
+		$storage,
+		ICacheEntry $sourceRootInfo,
+		DisplayNameCache $displayNameCache,
+		IShare $share
+	) {
 		$this->storage = $storage;
 		$this->sourceRootInfo = $sourceRootInfo;
 		$this->numericId = $sourceRootInfo->getStorageId();
 		$this->displayNameCache = $displayNameCache;
+		$this->share = $share;
 
 		parent::__construct(
 			null,
@@ -150,7 +158,7 @@ class Cache extends CacheJail {
 
 		try {
 			if (isset($entry['permissions'])) {
-				$entry['permissions'] &= $this->storage->getShare()->getPermissions();
+				$entry['permissions'] &= $this->share->getPermissions();
 			} else {
 				$entry['permissions'] = $this->storage->getPermissions($entry['path']);
 			}
@@ -159,7 +167,7 @@ class Cache extends CacheJail {
 			// (IDE may say the exception is never thrown – false negative)
 			$sharePermissions = 0;
 		}
-		$entry['uid_owner'] = $this->storage->getOwner('');
+		$entry['uid_owner'] = $this->share->getShareOwner();
 		$entry['displayname_owner'] = $this->getOwnerDisplayName();
 		if ($path === '') {
 			$entry['is_share_mount_point'] = true;
@@ -169,7 +177,7 @@ class Cache extends CacheJail {
 
 	private function getOwnerDisplayName() {
 		if (!$this->ownerDisplayName) {
-			$uid = $this->storage->getOwner('');
+			$uid = $this->share->getShareOwner();
 			$this->ownerDisplayName = $this->displayNameCache->getDisplayName($uid) ?? $uid;
 		}
 		return $this->ownerDisplayName;

+ 2 - 1
apps/files_sharing/lib/SharedStorage.php

@@ -413,7 +413,8 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 		$this->cache = new \OCA\Files_Sharing\Cache(
 			$storage,
 			$sourceRoot,
-			\OC::$server->get(DisplayNameCache::class)
+			\OC::$server->get(DisplayNameCache::class),
+			$this->getShare()
 		);
 		return $this->cache;
 	}