From 46d33c9d322c8ada75169cdc9386844a073d8cf5 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Tue, 2 Sep 2025 03:03:38 +0200 Subject: [PATCH] fix: register handler within init script Signed-off-by: Ferdinand Thiessen --- lib/Listener/LoadViewerListener.php | 4 +++- lib/Listener/ShareLinkListener.php | 6 ++++-- package-lock.json | 30 ++++++++++++++++++++++------- package.json | 3 ++- src/init-viewer.js | 23 ++++++++++++++++++++++ src/viewer.js | 17 ---------------- webpack.js | 1 + 7 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 src/init-viewer.js diff --git a/lib/Listener/LoadViewerListener.php b/lib/Listener/LoadViewerListener.php index 0a76ecdae..7e11bbd17 100644 --- a/lib/Listener/LoadViewerListener.php +++ b/lib/Listener/LoadViewerListener.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace OCA\Richdocuments\Listener; +use OCA\Richdocuments\AppInfo\Application; use OCA\Richdocuments\PermissionManager; use OCA\Richdocuments\Service\InitialStateService; use OCA\Viewer\Event\LoadViewer; @@ -36,7 +37,8 @@ class LoadViewerListener implements IEventListener { } if ($this->permissionManager->isEnabledForUser() && $this->userId !== null) { $this->initialStateService->provideCapabilities(); - Util::addScript('richdocuments', 'richdocuments-viewer', 'viewer'); + Util::addInitScript(Application::APPNAME, Application::APPNAME . '-init-viewer'); + Util::addScript(Application::APPNAME, Application::APPNAME . '-viewer', 'viewer'); $this->eventDispatcher->dispatchTyped(new RenderReferenceEvent()); } } diff --git a/lib/Listener/ShareLinkListener.php b/lib/Listener/ShareLinkListener.php index b4346c923..97edfdfbc 100644 --- a/lib/Listener/ShareLinkListener.php +++ b/lib/Listener/ShareLinkListener.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace OCA\Richdocuments\Listener; use OCA\Files_Sharing\Event\ShareLinkAccessedEvent; +use OCA\Richdocuments\AppInfo\Application; use OCA\Richdocuments\PermissionManager; use OCA\Richdocuments\Service\InitialStateService; use OCP\EventDispatcher\Event; @@ -41,8 +42,9 @@ class ShareLinkListener implements \OCP\EventDispatcher\IEventListener { $this->initialStateService->prepareParams(['userId' => $loggedInUser]); $this->initialStateService->provideCapabilities(); - Util::addScript('richdocuments', 'richdocuments-viewer', 'viewer'); - Util::addScript('richdocuments', 'richdocuments-public', 'viewer'); + Util::addInitScript(Application::APPNAME, Application::APPNAME . '-init-viewer'); + Util::addScript(Application::APPNAME, Application::APPNAME . '-viewer', 'viewer'); + Util::addScript(Application::APPNAME, Application::APPNAME . '-public', 'viewer'); } } } diff --git a/package-lock.json b/package-lock.json index 2719c1ea0..59cfb6b2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "@nextcloud/paths": "^2.2.1", "@nextcloud/router": "^3.0.1", "@nextcloud/sharing": "^0.2.4", - "@nextcloud/vue": "^8.27.0", + "@nextcloud/viewer": "^1.0.0", + "@nextcloud/vue": "^8.30.0", "vue": "^2.7.16", "vue-material-design-icons": "^5.3.1" }, @@ -3468,10 +3469,19 @@ "npm": "^10.0.0" } }, + "node_modules/@nextcloud/viewer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/viewer/-/viewer-1.0.0.tgz", + "integrity": "sha512-AaVXh+KyJ0q28AaqjBwDjjEuVB+v1GarIuuLCO2nfpkg/ekngQw25rmb4PzKVvbN8N35nb92GpQXBpG1ZtBrzg==", + "license": "AGPL-3.0-or-later", + "peerDependencies": { + "vue": "^2.7.16" + } + }, "node_modules/@nextcloud/vue": { - "version": "8.29.2", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.29.2.tgz", - "integrity": "sha512-kxi5KEF5K0JiYo3P/JvorbZ7u1/g7kkbcba1IEAR1hliAOS9Mwqdr+5BdJGUdIB2AIH/bj8YTg85P4g4gGZnXA==", + "version": "8.30.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.30.0.tgz", + "integrity": "sha512-/FurCDvPmgI/HDGKv6L0flBw9gg2WkvlDydlL8G+VNmEVwW/RWXJ4uvqDhXLb1iIwS8yQXnYheDpeOKZr7aVIQ==", "license": "AGPL-3.0-or-later", "dependencies": { "@floating-ui/dom": "^1.1.0", @@ -22746,10 +22756,16 @@ "@types/jquery": "3.5.16" } }, + "@nextcloud/viewer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/viewer/-/viewer-1.0.0.tgz", + "integrity": "sha512-AaVXh+KyJ0q28AaqjBwDjjEuVB+v1GarIuuLCO2nfpkg/ekngQw25rmb4PzKVvbN8N35nb92GpQXBpG1ZtBrzg==", + "requires": {} + }, "@nextcloud/vue": { - "version": "8.29.2", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.29.2.tgz", - "integrity": "sha512-kxi5KEF5K0JiYo3P/JvorbZ7u1/g7kkbcba1IEAR1hliAOS9Mwqdr+5BdJGUdIB2AIH/bj8YTg85P4g4gGZnXA==", + "version": "8.30.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.30.0.tgz", + "integrity": "sha512-/FurCDvPmgI/HDGKv6L0flBw9gg2WkvlDydlL8G+VNmEVwW/RWXJ4uvqDhXLb1iIwS8yQXnYheDpeOKZr7aVIQ==", "requires": { "@floating-ui/dom": "^1.1.0", "@linusborg/vue-simple-portal": "^0.1.5", diff --git a/package.json b/package.json index 9355e9e3e..3aa9b629f 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,9 @@ "@nextcloud/moment": "^1.3.4", "@nextcloud/paths": "^2.2.1", "@nextcloud/router": "^3.0.1", - "@nextcloud/vue": "^8.27.0", "@nextcloud/sharing": "^0.2.4", + "@nextcloud/viewer": "^1.0.0", + "@nextcloud/vue": "^8.30.0", "vue": "^2.7.16", "vue-material-design-icons": "^5.3.1" }, diff --git a/src/init-viewer.js b/src/init-viewer.js new file mode 100644 index 000000000..391035c96 --- /dev/null +++ b/src/init-viewer.js @@ -0,0 +1,23 @@ +/*! + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import './init-shared.js' + +import { getCapabilities } from './services/capabilities.ts' +import { registerHandler } from '@nextcloud/viewer' + +const supportedMimes = getCapabilities().mimetypes +const AsyncViewerComponent = () => import('./view/Viewer.vue') + +const viewerHandler = { + id: 'richdocuments', + group: null, + mimes: supportedMimes, + component: AsyncViewerComponent, + theme: 'default', + canCompare: true, +} + +registerHandler(viewerHandler) diff --git a/src/viewer.js b/src/viewer.js index abdfd1c25..672d160c4 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -6,23 +6,6 @@ import './init-shared.js' import '../css/filetypes.scss' -import { getCapabilities } from './services/capabilities.ts' import { autoSetupBuiltInCodeServerIfNeeded } from './services/builtInCode.ts' -const supportedMimes = getCapabilities().mimetypes -const AsyncViewerComponent = () => import('./view/Viewer.vue') - -if (OCA.Viewer) { - OCA.Viewer.registerHandler({ - id: 'richdocuments', - group: null, - mimes: supportedMimes, - component: AsyncViewerComponent, - theme: 'default', - canCompare: true, - }) -} else { - console.error('Unable to register viewer handler') -} - autoSetupBuiltInCodeServerIfNeeded() diff --git a/webpack.js b/webpack.js index 12a2010ec..c2d77b49a 100644 --- a/webpack.js +++ b/webpack.js @@ -10,6 +10,7 @@ const BabelLoaderExcludeNodeModulesExcept = require('babel-loader-exclude-node-m webpackConfig.entry = { viewer: path.join(__dirname, 'src', 'viewer.js'), + 'init-viewer': path.join(__dirname, 'src', 'init-viewer.js'), fileActions: path.join(__dirname, 'src', 'file-actions.js'), document: path.join(__dirname, 'src', 'document.js'), admin: path.join(__dirname, 'src', 'admin.js'),