Skip to content

Commit 2cf6f46

Browse files
committed
feat: register conversion provider
Signed-off-by: Elizabeth Danzberger <lizzy7128@tutanota.de>
1 parent d495a66 commit 2cf6f46

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

lib/AppInfo/Application.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
use OCA\Files_Sharing\Event\ShareLinkAccessedEvent;
1212
use OCA\Richdocuments\Capabilities;
13+
use OCA\Richdocuments\Conversion\ConversionProvider;
1314
use OCA\Richdocuments\Db\WopiMapper;
1415
use OCA\Richdocuments\Listener\AddContentSecurityPolicyListener;
1516
use OCA\Richdocuments\Listener\AddFeaturePolicyListener;
@@ -81,6 +82,7 @@ public function register(IRegistrationContext $context): void {
8182
$context->registerPreviewProvider(OOXML::class, OOXML::MIMETYPE_REGEX);
8283
$context->registerPreviewProvider(OpenDocument::class, OpenDocument::MIMETYPE_REGEX);
8384
$context->registerPreviewProvider(Pdf::class, Pdf::MIMETYPE_REGEX);
85+
$context->registerFileConversionProvider(ConversionProvider::class);
8486
$context->registerNotifierService(Notifier::class);
8587
}
8688

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OCA\Richdocuments\Conversion;
11+
12+
use OCA\Richdocuments\Service\RemoteService;
13+
use OCP\Files\Conversion\ConversionMimeProvider;
14+
use OCP\Files\Conversion\IConversionProvider;
15+
use OCP\Files\File;
16+
use OCP\IL10N;
17+
18+
class ConversionProvider implements IConversionProvider {
19+
public function __construct(
20+
private RemoteService $remoteService,
21+
private IL10N $l10n,
22+
) {
23+
}
24+
25+
public function getSupportedMimeTypes(): array {
26+
return [
27+
new ConversionMimeProvider(
28+
'application/vnd.oasis.opendocument.text',
29+
'application/pdf',
30+
'pdf',
31+
$this->l10n->t('Portable Document Format (.pdf)'),
32+
),
33+
];
34+
}
35+
36+
public function convertFile(File $file, string $targetMimeType): mixed {
37+
$targetFileExtension = $this->getExtensionForMimeType($targetMimeType);
38+
if ($targetFileExtension === null) {
39+
throw new \Exception($this->l10n->t(
40+
'Unable to determine the proper file extension for %1$s',
41+
[$targetMimeType]
42+
));
43+
}
44+
45+
return $this->remoteService->convertFileTo($file, $targetFileExtension);
46+
}
47+
48+
private function getExtensionForMimeType(string $mimeType): ?string {
49+
foreach ($this->getSupportedMimeTypes() as $mimeProvider) {
50+
if ($mimeProvider->getTo() === $mimeType) {
51+
return $mimeProvider->getExtension();
52+
}
53+
}
54+
55+
return null;
56+
}
57+
}

0 commit comments

Comments
 (0)