diff options
-rw-r--r-- | lib/AppInfo/Application.php | 2 | ||||
-rw-r--r-- | lib/Backgroundjobs/ObtainCapabilities.php | 7 | ||||
-rw-r--r-- | lib/Capabilities.php | 88 | ||||
-rw-r--r-- | lib/Command/ActivateConfig.php | 2 | ||||
-rw-r--r-- | lib/Controller/SettingsController.php | 4 | ||||
-rw-r--r-- | lib/Service/CapabilitiesService.php | 96 |
6 files changed, 67 insertions, 132 deletions
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 0e7f0b8e..c2e78e3b 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -186,7 +186,7 @@ class Application extends App { $discoveryManager->refretch(); $capabilitiesService->clear(); - $capabilitiesService->refretch(); + $capabilitiesService->refetch(); } } } diff --git a/lib/Backgroundjobs/ObtainCapabilities.php b/lib/Backgroundjobs/ObtainCapabilities.php index 2103d632..4aee0034 100644 --- a/lib/Backgroundjobs/ObtainCapabilities.php +++ b/lib/Backgroundjobs/ObtainCapabilities.php @@ -25,11 +25,6 @@ namespace OCA\Richdocuments\Backgroundjobs; use OC\BackgroundJob\TimedJob; use OCA\Richdocuments\Service\CapabilitiesService; -use OCP\Files\IAppData; -use OCP\Files\NotFoundException; -use OCP\Files\SimpleFS\ISimpleFolder; -use OCP\Http\Client\IClientService; -use OCP\IConfig; class ObtainCapabilities extends TimedJob { @@ -43,6 +38,6 @@ class ObtainCapabilities extends TimedJob { } protected function run($argument) { - $this->capabilitiesService->refretch(); + $this->capabilitiesService->refetch(); } } diff --git a/lib/Capabilities.php b/lib/Capabilities.php index 51e46e9e..efc412ba 100644 --- a/lib/Capabilities.php +++ b/lib/Capabilities.php @@ -23,15 +23,9 @@ namespace OCA\Richdocuments; -use OCP\AppFramework\Utility\ITimeFactory; +use OCA\Richdocuments\Service\CapabilitiesService; use OCP\Capabilities\ICapability; -use OCP\Files\IAppData; -use OCP\Files\NotFoundException; -use OCP\Files\SimpleFS\ISimpleFolder; -use OCP\Http\Client\IClientService; -use OCP\IConfig; use OCP\IL10N; -use OCP\IURLGenerator; class Capabilities implements ICapability { @@ -77,69 +71,43 @@ class Capabilities implements ICapability { 'text/spreadsheet' ]; - /** @var ISimpleFolder */ - private $appData; - /** @var IL10N */ private $l10n; /** @var AppConfig */ private $config; + /** @var CapabilitiesService */ + private $capabilitiesService; + + private $capabilities = null; - /** - * Capabilities constructor. - * - * @param IAppData $appData - * @throws \OCP\Files\NotPermittedException - */ - public function __construct(IAppData $appData, IL10N $l10n, AppConfig $config) { + public function __construct(IL10N $l10n, AppConfig $config, CapabilitiesService $capabilitiesService) { $this->l10n = $l10n; $this->config = $config; - try { - $this->appData = $appData->getFolder('richdocuments'); - } catch (NotFoundException $e) { - $this->appData = $appData->newFolder('richdocuments'); - } + $this->capabilitiesService = $capabilitiesService; } public function getCapabilities() { - $collaboraCapabilities = $this->getCollaboraCapabilities(); - return [ - 'richdocuments' => [ - 'mimetypes' => self::MIMETYPES, - 'mimetypesNoDefaultOpen' => self::MIMETYPES_OPTIONAL, - 'collabora' => $collaboraCapabilities, - 'direct_editing' => isset($collaboraCapabilities['hasMobileSupport']) ? : false, - 'templates' => isset($collaboraCapabilities['hasTemplateSaveAs']) || isset($collaboraCapabilities['hasTemplateSource']) ? : false, - 'productName' => isset($collaboraCapabilities['productName']) ? $collaboraCapabilities['productName'] : $this->l10n->t('Collabora Online'), - 'config' => [ - 'wopi_url' => $this->config->getAppValue('wopi_url'), - 'public_wopi_url' => $this->config->getAppValue('public_wopi_url'), - 'disable_certificate_verification' => $this->config->getAppValue('disable_certificate_verification'), - 'edit_groups' => $this->config->getAppValue('edit_groups'), - 'use_groups' => $this->config->getAppValue('use_groups'), - 'doc_format' => $this->config->getAppValue('doc_format'), - ] - ], - ]; - } - - /** - * TODO: use CapabilitiesService - * @return array - * @throws \OCP\Files\NotPermittedException - */ - private function getCollaboraCapabilities() { - try { - $file = $this->appData->getFile('capabilities.json'); - $decodedFile = \json_decode($file->getContent(), true); - } catch (NotFoundException $e) { - return []; - } - - if (!is_array($decodedFile)) { - return []; + if (!$this->capabilities) { + $collaboraCapabilities = $this->capabilitiesService->getCapabilities(); + $this->capabilities = [ + 'richdocuments' => [ + 'mimetypes' => self::MIMETYPES, + 'mimetypesNoDefaultOpen' => self::MIMETYPES_OPTIONAL, + 'collabora' => $collaboraCapabilities, + 'direct_editing' => isset($collaboraCapabilities['hasMobileSupport']) ?: false, + 'templates' => isset($collaboraCapabilities['hasTemplateSaveAs']) || isset($collaboraCapabilities['hasTemplateSource']) ?: false, + 'productName' => isset($collaboraCapabilities['productName']) ? $collaboraCapabilities['productName'] : $this->l10n->t('Collabora Online'), + 'config' => [ + 'wopi_url' => $this->config->getAppValue('wopi_url'), + 'public_wopi_url' => $this->config->getAppValue('public_wopi_url'), + 'disable_certificate_verification' => $this->config->getAppValue('disable_certificate_verification'), + 'edit_groups' => $this->config->getAppValue('edit_groups'), + 'use_groups' => $this->config->getAppValue('use_groups'), + 'doc_format' => $this->config->getAppValue('doc_format'), + ] + ], + ]; } - - return $decodedFile; + return $this->capabilities; } } diff --git a/lib/Command/ActivateConfig.php b/lib/Command/ActivateConfig.php index 899052c9..793d9fde 100644 --- a/lib/Command/ActivateConfig.php +++ b/lib/Command/ActivateConfig.php @@ -75,7 +75,7 @@ class ActivateConfig extends Command { } } $this->capabilitiesService->clear(); - $this->capabilitiesService->refretch(); + $this->capabilitiesService->refetch(); $output->writeln('<info>Activated any config changes</info>'); } catch (\Exception $e) { $output->writeln('<error>Failed to activate any config changes</error>'); diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 707c9a81..2b649eaf 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -20,8 +20,6 @@ use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\NotFoundResponse; -use OCP\Http\Client\IClientService; -use OCP\ICache; use \OCP\IRequest; use \OCP\IL10N; use OCA\Richdocuments\AppConfig; @@ -195,7 +193,7 @@ class SettingsController extends Controller{ } $this->capabilitiesService->clear(); - $this->capabilitiesService->refretch(); + $this->capabilitiesService->refetch(); $response = [ 'status' => 'success', diff --git a/lib/Service/CapabilitiesService.php b/lib/Service/CapabilitiesService.php index be5880dc..d2111dae 100644 --- a/lib/Service/CapabilitiesService.php +++ b/lib/Service/CapabilitiesService.php @@ -23,11 +23,10 @@ namespace OCA\Richdocuments\Service; -use OCP\Files\IAppData; -use OCP\Files\NotFoundException; -use OCP\Files\SimpleFS\ISimpleFile; -use OCP\Files\SimpleFS\ISimpleFolder; +use OCP\App\IAppManager; use OCP\Http\Client\IClientService; +use OCP\ICache; +use OCP\ICacheFactory; use OCP\IConfig; class CapabilitiesService { @@ -36,44 +35,39 @@ class CapabilitiesService { private $config; /** @var IClientService */ private $clientService; - /** @var ISimpleFolder */ - private $appData; + /** @var ICache */ + private $cache; + /** @var IAppManager */ + private $appManager; + /** @var array */ private $capabilities; - public function __construct(IConfig $config, IClientService $clientService, IAppData $appData) { + + public function __construct(IConfig $config, IClientService $clientService, ICacheFactory $cacheFactory, IAppManager $appManager) { $this->config = $config; $this->clientService = $clientService; - try { - $this->appData = $appData->getFolder('richdocuments'); - } catch (NotFoundException $e) { - $this->appData = $appData->newFolder('richdocuments'); - } + $this->cache = $cacheFactory->createDistributed('richdocuments'); + $this->appManager = $appManager; } - public function getCapabilities() { - if ($this->capabilities) { - $isARM64 = php_uname('m') === 'aarch64'; - $CODEAppID = $isARM64 ? 'richdocumentscode_arm64' : 'richdocumentscode'; - $isCODEInstalled = $this->getContainer()->getServer()->getAppManager()->isEnabledForUser($CODEAppID); - $isCODEEnabled = strpos($this->config->getAppValue('richdocuments', 'wopi_url'), 'proxy.php?req=') !== false; - if($isCODEInstalled && $isCODEEnabled && count($this->capabilities) === 0) { - $this->refretch(); - } - return $this->capabilities; + if (!$this->capabilities) { + $this->capabilities = $this->cache->get('capabilities'); } - try { - $file = $this->appData->getFile('capabilities.json'); - $decodedFile = \json_decode($file->getContent(), true); - } catch (NotFoundException $e) { - return []; + + $isARM64 = php_uname('m') === 'aarch64'; + $CODEAppID = $isARM64 ? 'richdocumentscode_arm64' : 'richdocumentscode'; + $isCODEInstalled = $this->appManager->isEnabledForUser($CODEAppID); + $isCODEEnabled = strpos($this->config->getAppValue('richdocuments', 'wopi_url'), 'proxy.php?req=') !== false; + $shouldRecheckCODECapabilities = $isCODEInstalled && $isCODEEnabled && count($this->capabilities) === 0; + if($this->capabilities === null || $shouldRecheckCODECapabilities) { + $this->refetch(); } - if (!is_array($decodedFile)) { + if (!is_array($this->capabilities)) { return []; } - $this->capabilities = $decodedFile; return $this->capabilities; } @@ -86,32 +80,11 @@ class CapabilitiesService { return $this->getCapabilities()['hasTemplateSource'] ?? false; } - private function getFile() { - try { - $file = $this->appData->getFile('capabilities.json'); - } catch (NotFoundException $e) { - $file = $this->appData->newFile('capabilities.json'); - $file->putContent(json_encode([])); - } - - return $file; - } - public function clear() { - $file = $this->getFile(); - $file->putContent(json_encode([])); - } - - public function refretch() { - $capabilties = $this->renewCapabilities(); - - if ($capabilties !== []) { - $file = $this->getFile(); - $file->putContent(json_encode($capabilties)); - } + $this->cache->remove('capabilities'); } - private function renewCapabilities() { + public function refetch() { $remoteHost = $this->config->getAppValue('richdocuments', 'wopi_url'); if ($remoteHost === '') { return []; @@ -127,18 +100,19 @@ class CapabilitiesService { try { $response = $client->get($capabilitiesEndpoint, $options); - } catch (\Exception $e) { - return []; - } + $responseBody = $response->getBody(); + $capabilities = \json_decode($responseBody, true); - $responseBody = $response->getBody(); - $ret = \json_decode($responseBody, true); + if (!is_array($capabilities)) { + $capabilities = []; + } - if (!is_array($ret)) { - return []; + + } catch (\Exception $e) { + $capabilities = []; } - return $ret; + $this->capabilities = $capabilities; + $this->cache->set('capabilities', $capabilities, 3600); } - } |