Skip to content

Commit

Permalink
Merge pull request #3932 from nextcloud/backport/3916/stable30
Browse files Browse the repository at this point in the history
[stable30] Cache `extractFields` response from Collabora
  • Loading branch information
elzody committed Aug 19, 2024
2 parents e89e70a + aebc8c8 commit 75b8ecd
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions lib/Service/TemplateFieldService.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use OCP\Files\Template\Field;
use OCP\Files\Template\FieldType;
use OCP\Http\Client\IClientService;
use OCP\ICacheFactory;
use Psr\Log\LoggerInterface;

class TemplateFieldService {
Expand All @@ -21,7 +22,8 @@ public function __construct(
private CapabilitiesService $capabilitiesService,
private AppConfig $appConfig,
private IRootFolder $rootFolder,
private LoggerInterface $logger
private LoggerInterface $logger,
private ICacheFactory $cacheFactory
) {
}

Expand All @@ -38,18 +40,26 @@ public function extractFields(Node|int $file) {
$file = $this->rootFolder->getFirstNodeById($file);
}

$collaboraUrl = $this->appConfig->getCollaboraUrlInternal();
$httpClient = $this->clientService->newClient();
try {
$localCache = $this->cacheFactory->createLocal('richdocuments_templates/');
$cacheName = $file->getId() . "/" . $file->getEtag();
$cachedResponse = $localCache->get($cacheName);

if ($cachedResponse !== null) {
return $cachedResponse;
}

$form = RemoteOptionsService::getDefaultOptions();
$form['query'] = ['limit' => 'content-control'];
$form['multipart'] = [[
'name' => 'data',
'contents' => $file->getStorage()->fopen($file->getInternalPath(), 'r'),
'headers' => ['Content-Type' => 'multipart/form-data'],
]];
$collaboraUrl = $this->appConfig->getCollaboraUrlInternal();
$httpClient = $this->clientService->newClient();

$form = RemoteOptionsService::getDefaultOptions();
$form['query'] = ['limit' => 'content-control'];
$form['multipart'] = [[
'name' => 'data',
'contents' => $file->getStorage()->fopen($file->getInternalPath(), 'r'),
'headers' => ['Content-Type' => 'multipart/form-data'],
]];

try {
$response = $httpClient->post(
$collaboraUrl . "/cool/extract-document-structure",
$form
Expand All @@ -76,7 +86,10 @@ public function extractFields(Node|int $file) {
];
}

return array_merge([], ...$fields);
$fields = array_merge([], ...$fields);
$localCache->set($cacheName, $fields, 3600);

return $fields;
} catch (\Exception $e) {
$this->logger->error($e->getMessage());
return [];
Expand Down

0 comments on commit 75b8ecd

Please sign in to comment.