Skip to content

Commit 1073cfd

Browse files
committed
feat: re-add ability to specify multiple conversion tuples per provider
Signed-off-by: Elizabeth Danzberger <lizzy7128@tutanota.de>
1 parent 23e4606 commit 1073cfd

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

apps/files/lib/Capabilities.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function getCapabilities(): array {
4444

4545
'file_conversions' => array_map(function (ConversionMimeTuple $mimeTuple) {
4646
return $mimeTuple->jsonSerialize();
47-
}, $this->fileConversionManager->getMimeTypes())
47+
}, $this->fileConversionManager->getMimeTypes()),
4848
],
4949
];
5050
}

apps/testing/lib/Conversion/ConversionProvider.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ public function __construct(
2020
) {
2121
}
2222

23-
public function getSupportedMimeType(): ConversionMimeTuple {
24-
return new ConversionMimeTuple('image/jpeg', [
25-
'image/png' => $this->l10n->t('Image (.png)'),
26-
]);
23+
public function getSupportedMimeTypes(): array {
24+
return [
25+
new ConversionMimeTuple('image/jpeg', [
26+
'image/png' => $this->l10n->t('Image (.png)'),
27+
])
28+
];
2729
}
2830

2931
public function convertFile(File $file, string $targetMimeType): mixed {

lib/private/Files/Conversion/ConversionManager.php

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
use OC\AppFramework\Bootstrap\Coordinator;
1313
use OC\SystemConfig;
14+
use OCP\Files\Conversion\ConversionMimeTuple;
1415
use OCP\Files\Conversion\IConversionManager;
1516
use OCP\Files\Conversion\IConversionProvider;
1617
use OCP\Files\File;
@@ -53,10 +54,13 @@ public function hasProviders(): bool {
5354
}
5455

5556
public function getMimeTypes(): array {
57+
/** @var list<ConversionMimeTuple> */
5658
$mimeTypes = [];
5759

5860
foreach ($this->getProviders() as $provider) {
59-
$mimeTypes[] = $provider->getSupportedMimeType();
61+
/** @var list<ConversionMimeTuple> */
62+
$providerMimeTypes = $provider->getSupportedMimeTypes();
63+
$mimeTypes = array_merge($mimeTypes, $providerMimeTypes);
6064
}
6165

6266
return $mimeTypes;
@@ -75,18 +79,9 @@ public function convert(File $file, string $targetMimeType, ?string $destination
7579
}
7680

7781
$fileMimeType = $file->getMimetype();
78-
$validProvider = null;
79-
foreach ($this->getProviders() as $provider) {
80-
['from' => $from, 'to' => $to] = $provider->getSupportedMimeType()->jsonSerialize();
81-
$canConvert = ($from === $fileMimeType) && array_key_exists($targetMimeType, $to);
82+
$validProvider = $this->getValidProvider($fileMimeType, $targetMimeType);
8283

83-
if ($canConvert) {
84-
$validProvider = $provider;
85-
break;
86-
}
87-
}
88-
89-
if ($validProvider) {
84+
if ($validProvider !== null) {
9085
$convertedFile = $validProvider->convertFile($file, $targetMimeType);
9186

9287
if ($destination !== null) {
@@ -133,4 +128,25 @@ public function getProviders(): array {
133128
private function writeToDestination(string $destination, mixed $content): File {
134129
return $this->rootFolder->newFile($destination, $content);
135130
}
131+
132+
private function getValidProvider(string $fileMimeType, string $targetMimeType): ?IConversionProvider {
133+
$validProvider = null;
134+
foreach ($this->getProviders() as $provider) {
135+
$suitableMimeTypes = array_filter(
136+
$provider->getSupportedMimeTypes(),
137+
function (ConversionMimeTuple $mimeTuple) use ($fileMimeType, $targetMimeType) {
138+
['from' => $from, 'to' => $to] = $mimeTuple->jsonSerialize();
139+
140+
return ($from === $fileMimeType) && array_key_exists($targetMimeType, $to);
141+
}
142+
);
143+
144+
if (!empty($suitableMimeTypes)) {
145+
$validProvider = $provider;
146+
break;
147+
}
148+
}
149+
150+
return $validProvider;
151+
}
136152
}

lib/public/Files/Conversion/IConversionProvider.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
*/
2020
interface IConversionProvider {
2121
/**
22-
* Get the MIME type tuple this conversion provider supports
22+
* Get an array of MIME type tuples this conversion provider supports
23+
*
24+
* @return list<ConversionMimeTuple>
2325
*
2426
* @since 31.0.0
2527
*/
26-
public function getSupportedMimeType(): ConversionMimeTuple;
28+
public function getSupportedMimeTypes(): array;
2729

2830
/**
2931
* Convert a file to a given MIME type

0 commit comments

Comments
 (0)