1111
1212use OC \AppFramework \Bootstrap \Coordinator ;
1313use OC \SystemConfig ;
14+ use OCP \Files \Conversion \ConversionMimeTuple ;
1415use OCP \Files \Conversion \IConversionManager ;
1516use OCP \Files \Conversion \IConversionProvider ;
1617use 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}
0 commit comments