aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-08-16 11:48:50 +0200
committerGitHub <noreply@github.com>2022-08-16 11:48:50 +0200
commit604c1752845df068a7dd5d168abfbfc04065ac3f (patch)
tree1e820dfbeffc80ea19a0f7b9cf718ebd7ad48411
parent3e2ab35af5aa14ed77fba66b63b9d858a5607394 (diff)
parent51b9847fad73a1ca67dbf504358d90bd8f9e71d8 (diff)
downloadnextcloud-server-604c1752845df068a7dd5d168abfbfc04065ac3f.tar.gz
nextcloud-server-604c1752845df068a7dd5d168abfbfc04065ac3f.zip
Merge pull request #32461 from nextcloud/display-name-cache-public
expose display name cache trough a public interface
-rw-r--r--lib/private/Files/View.php7
-rw-r--r--lib/private/Server.php5
-rw-r--r--lib/private/User/LazyUser.php6
-rw-r--r--lib/private/User/Manager.php11
-rw-r--r--lib/public/IUserManager.php11
-rw-r--r--tests/lib/User/ManagerTest.php1
6 files changed, 30 insertions, 11 deletions
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index d12869fbdaa..e5394e72ffe 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -49,9 +49,7 @@ namespace OC\Files;
use Icewind\Streams\CallbackWrapper;
use OC\Files\Mount\MoveableMount;
use OC\Files\Storage\Storage;
-use OC\User\DisplayNameCache;
use OC\User\LazyUser;
-use OC\User\User;
use OCA\Files_Sharing\SharedMount;
use OCP\Constants;
use OCP\Files\Cache\ICacheEntry;
@@ -103,8 +101,6 @@ class View {
private LoggerInterface $logger;
- private DisplayNameCache $displayNameCache;
-
/**
* @param string $root
* @throws \Exception If $root contains an invalid path
@@ -121,7 +117,6 @@ class View {
$this->lockingProvider = \OC::$server->getLockingProvider();
$this->lockingEnabled = !($this->lockingProvider instanceof \OC\Lock\NoopLockingProvider);
$this->userManager = \OC::$server->getUserManager();
- $this->displayNameCache = \OC::$server->get(DisplayNameCache::class);
$this->logger = \OC::$server->get(LoggerInterface::class);
}
@@ -1319,7 +1314,7 @@ class View {
* @return IUser
*/
private function getUserObjectForOwner(string $ownerId) {
- return new LazyUser($ownerId, $this->displayNameCache, $this->userManager);
+ return new LazyUser($ownerId, $this->userManager);
}
/**
diff --git a/lib/private/Server.php b/lib/private/Server.php
index b473f4e75c0..7223c3b8ae3 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -151,6 +151,7 @@ use OC\SystemTag\ManagerFactory as SystemTagManagerFactory;
use OC\Tagging\TagMapper;
use OC\Talk\Broker;
use OC\Template\JSCombiner;
+use OC\User\DisplayNameCache;
use OC\User\Listeners\UserChangedListener;
use OC\User\Listeners\UserDeletedListener;
use OCA\Theming\ImageManager;
@@ -474,6 +475,10 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerDeprecatedAlias('UserManager', \OC\User\Manager::class);
$this->registerAlias(\OCP\IUserManager::class, \OC\User\Manager::class);
+ $this->registerService(DisplayNameCache::class, function (ContainerInterface $c) {
+ return $c->get(\OC\User\Manager::class)->getDisplayNameCache();
+ });
+
$this->registerService(\OCP\IGroupManager::class, function (ContainerInterface $c) {
$groupManager = new \OC\Group\Manager(
$this->get(IUserManager::class),
diff --git a/lib/private/User/LazyUser.php b/lib/private/User/LazyUser.php
index 8e93d6481ab..118dd3d0699 100644
--- a/lib/private/User/LazyUser.php
+++ b/lib/private/User/LazyUser.php
@@ -29,12 +29,10 @@ use OCP\UserInterface;
class LazyUser implements IUser {
private ?IUser $user = null;
- private DisplayNameCache $displayNameCache;
private string $uid;
private IUserManager $userManager;
- public function __construct(string $uid, DisplayNameCache $displayNameCache, IUserManager $userManager) {
- $this->displayNameCache = $displayNameCache;
+ public function __construct(string $uid, IUserManager $userManager) {
$this->uid = $uid;
$this->userManager = $userManager;
}
@@ -53,7 +51,7 @@ class LazyUser implements IUser {
}
public function getDisplayName() {
- return $this->displayNameCache->getDisplayName($this->uid);
+ return $this->userManager->getDisplayName($this->uid);
}
public function setDisplayName($displayName) {
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index a6f56585325..55ac663f3ec 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -95,6 +95,8 @@ class Manager extends PublicEmitter implements IUserManager {
/** @var IEventDispatcher */
private $eventDispatcher;
+ private DisplayNameCache $displayNameCache;
+
public function __construct(IConfig $config,
EventDispatcherInterface $oldDispatcher,
ICacheFactory $cacheFactory,
@@ -108,6 +110,7 @@ class Manager extends PublicEmitter implements IUserManager {
unset($cachedUsers[$user->getUID()]);
});
$this->eventDispatcher = $eventDispatcher;
+ $this->displayNameCache = new DisplayNameCache($cacheFactory, $this);
}
/**
@@ -185,6 +188,10 @@ class Manager extends PublicEmitter implements IUserManager {
return null;
}
+ public function getDisplayName(string $uid): string {
+ return $this->displayNameCache->getDisplayName($uid);
+ }
+
/**
* get or construct the user object
*
@@ -742,4 +749,8 @@ class Manager extends PublicEmitter implements IUserManager {
return !file_exists(rtrim($dataDirectory, '/') . '/' . $uid);
}
+
+ public function getDisplayNameCache(): DisplayNameCache {
+ return $this->displayNameCache;
+ }
}
diff --git a/lib/public/IUserManager.php b/lib/public/IUserManager.php
index 77e2fc21a22..c107b2c5025 100644
--- a/lib/public/IUserManager.php
+++ b/lib/public/IUserManager.php
@@ -85,6 +85,17 @@ interface IUserManager {
public function get($uid);
/**
+ * Get the display name of a user
+ *
+ * Note that this will return the uid if the user is not found instead of throwing an exception
+ *
+ * @param string $uid
+ * @return string
+ * @since 25.0.0
+ */
+ public function getDisplayName(string $uid): string;
+
+ /**
* check if a user exists
*
* @param string $uid
diff --git a/tests/lib/User/ManagerTest.php b/tests/lib/User/ManagerTest.php
index 2536eee8441..cef578e9555 100644
--- a/tests/lib/User/ManagerTest.php
+++ b/tests/lib/User/ManagerTest.php
@@ -50,7 +50,6 @@ class ManagerTest extends TestCase {
$this->cache = $this->createMock(ICache::class);
$this->cacheFactory->method('createDistributed')
- ->with('user_backend_map')
->willReturn($this->cache);
}