Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/richdocuments.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2020-11-06 12:36:32 +0300
committerJulius Härtl <jus@bitgrid.net>2020-11-08 12:08:50 +0300
commit74bdf6d216060da02b6764e4de91b9db09c24fb8 (patch)
tree70e92270c57578337a17eeea268eee1a1c80d69c /lib
parent89f8bbeba6abc834dd54efc109d0ec4ac26b9b66 (diff)
Move storing capabilities to distributed cache
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib')
-rw-r--r--lib/AppInfo/Application.php2
-rw-r--r--lib/Backgroundjobs/ObtainCapabilities.php7
-rw-r--r--lib/Capabilities.php88
-rw-r--r--lib/Command/ActivateConfig.php2
-rw-r--r--lib/Controller/SettingsController.php4
-rw-r--r--lib/Service/CapabilitiesService.php96
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);
}
-
}