From d01cfde98229c6d1bd14feefd889205027920d14 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 1 Apr 2015 15:37:22 +0200 Subject: [PATCH] Correctly purge the cache when an app is disabled via cli --- lib/private/app/appmanager.php | 18 +++++++++++++++++- lib/private/server.php | 10 ++++++---- settings/ajax/disableapp.php | 4 ---- settings/ajax/enableapp.php | 3 --- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php index 1cfa0bce25c..c05b2a3b035 100644 --- a/lib/private/app/appmanager.php +++ b/lib/private/app/appmanager.php @@ -24,6 +24,7 @@ namespace OC\App; use OCP\App\IAppManager; use OCP\IAppConfig; +use OCP\ICacheFactory; use OCP\IGroupManager; use OCP\IUser; use OCP\IUserSession; @@ -44,6 +45,9 @@ class AppManager implements IAppManager { */ private $groupManager; + /** @var \OCP\ICacheFactory */ + private $memCacheFactory; + /** * @var string[] $appId => $enabled */ @@ -54,10 +58,11 @@ class AppManager implements IAppManager { * @param \OCP\IAppConfig $appConfig * @param \OCP\IGroupManager $groupManager */ - public function __construct(IUserSession $userSession, IAppConfig $appConfig, IGroupManager $groupManager) { + public function __construct(IUserSession $userSession, IAppConfig $appConfig, IGroupManager $groupManager, ICacheFactory $memCacheFactory) { $this->userSession = $userSession; $this->appConfig = $appConfig; $this->groupManager = $groupManager; + $this->memCacheFactory = $memCacheFactory; } /** @@ -157,6 +162,7 @@ class AppManager implements IAppManager { public function enableApp($appId) { $this->installedAppsCache[$appId] = 'yes'; $this->appConfig->setValue($appId, 'enabled', 'yes'); + $this->clearAppsCache(); } /** @@ -172,6 +178,7 @@ class AppManager implements IAppManager { }, $groups); $this->installedAppsCache[$appId] = json_encode($groupIds); $this->appConfig->setValue($appId, 'enabled', json_encode($groupIds)); + $this->clearAppsCache(); } /** @@ -186,5 +193,14 @@ class AppManager implements IAppManager { } unset($this->installedAppsCache[$appId]); $this->appConfig->setValue($appId, 'enabled', 'no'); + $this->clearAppsCache(); + } + + /** + * Clear the cached list of apps when enabling/disabling an app + */ + protected function clearAppsCache() { + $settingsMemCache = $this->memCacheFactory->create('settings'); + $settingsMemCache->clear('listApps'); } } diff --git a/lib/private/server.php b/lib/private/server.php index 592f8d9a042..8c5169f229e 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -309,10 +309,12 @@ class Server extends SimpleContainer implements IServerContainer { return new TempManager(get_temp_dir(), $c->getLogger()); }); $this->registerService('AppManager', function(Server $c) { - $userSession = $c->getUserSession(); - $appConfig = $c->getAppConfig(); - $groupManager = $c->getGroupManager(); - return new \OC\App\AppManager($userSession, $appConfig, $groupManager); + return new \OC\App\AppManager( + $c->getUserSession(), + $c->getAppConfig(), + $c->getGroupManager(), + $c->getMemCacheFactory() + ); }); $this->registerService('DateTimeZone', function(Server $c) { return new DateTimeZone( diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php index cc02203b4a3..f99969d91a4 100644 --- a/settings/ajax/disableapp.php +++ b/settings/ajax/disableapp.php @@ -31,9 +31,5 @@ if (!array_key_exists('appid', $_POST)) { $appId = (string)$_POST['appid']; $appId = OC_App::cleanAppId($appId); -// FIXME: Clear the cache - move that into some sane helper method -\OC::$server->getMemCacheFactory()->create('settings')->remove('listApps-0'); -\OC::$server->getMemCacheFactory()->create('settings')->remove('listApps-1'); - OC_App::disable($appId); OC_JSON::success(); diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php index aa688c4964c..b63bce76d92 100644 --- a/settings/ajax/enableapp.php +++ b/settings/ajax/enableapp.php @@ -30,9 +30,6 @@ $groups = isset($_POST['groups']) ? (array)$_POST['groups'] : null; try { OC_App::enable(OC_App::cleanAppId((string)$_POST['appid']), $groups); - // FIXME: Clear the cache - move that into some sane helper method - \OC::$server->getMemCacheFactory()->create('settings')->remove('listApps-0'); - \OC::$server->getMemCacheFactory()->create('settings')->remove('listApps-1'); OC_JSON::success(); } catch (Exception $e) { OC_Log::write('core', $e->getMessage(), OC_Log::ERROR); -- 2.39.5