nextcloud / richdocuments

📑 Collabora Online for Nextcloud
https://nextcloud.com/collaboraonline
355 stars 116 forks source link

doxf/oform support #3282

Open juliusknorr opened 1 year ago

juliusknorr commented 1 year ago

Patch to add mimetypes for richdocuments and work around missing discovery entry of online:

diff --git a/lib/Capabilities.php b/lib/Capabilities.php
index 96e811dd..f3c795d6 100644
--- a/lib/Capabilities.php
+++ b/lib/Capabilities.php
@@ -70,6 +70,8 @@ class Capabilities implements ICapability {
                'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
                'application/vnd.ms-powerpoint.template.macroEnabled.12',
                'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
+               'application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform',
+               'application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf',
                'text/csv',
        ];

diff --git a/lib/WOPI/Parser.php b/lib/WOPI/Parser.php
index 8480bef8..cf231cd8 100644
--- a/lib/WOPI/Parser.php
+++ b/lib/WOPI/Parser.php
@@ -64,6 +64,14 @@ class Parser {
                        ];
                }

+               $result = $discoveryParsed->xpath(sprintf('/wopi-discovery/net-zone/app[@name=\'%s\']/action', 'application/vnd.oasis.opendocument.text'));
+               if ($result && count($result) > 0) {
+                       return [
+                               'urlsrc' => (string)$result[0]['urlsrc'],
+                               'action' => (string)$result[0]['name'],
+                       ];
+               }
+
                $this->logger->error('Didn\'t find urlsrc for mimetype {mimetype} in this WOPI discovery response: {discovery}', ['mimetype' => $mimetype, 'discovery' => $discovery]);
                throw new \Exception('Could not find urlsrc in WOPI');
        }
juliusknorr commented 12 months ago

@pedropintosilva Successfully tested with a couple of patches, two notes: