Skip to content

Commit fe36bc1

Browse files
susnuxartonge
authored andcommitted
fix: Make loading the viewer an init script
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
1 parent 6afc4e6 commit fe36bc1

6 files changed

Lines changed: 28 additions & 44 deletions

File tree

lib/Listener/LoadViewerScript.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ public function handle(Event $event): void {
5454
return;
5555
}
5656

57+
Util::addStyle(Application::APP_ID, 'viewer-init');
5758
Util::addStyle(Application::APP_ID, 'viewer-main');
59+
Util::addInitScript(Application::APP_ID, 'viewer-init');
5860
Util::addScript(Application::APP_ID, 'viewer-main', 'files');
5961
$this->initialStateService->provideInitialState('enabled_preview_providers', array_keys($this->previewManager->getProviders()));
6062
}

src/init.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
import { registerViewerAction } from './files_actions/viewerAction'
6+
import ViewerService from './services/Viewer.js'
7+
8+
// Register the files action
9+
registerViewerAction()
10+
11+
// Init Viewer Service
12+
window.OCA = window.OCA ?? {}
13+
window.OCA.Viewer = new ViewerService()
14+
window.OCA.Viewer.version = appVersion

src/main.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
*/
2222
import Vue from 'vue'
2323
import ViewerComponent from './views/Viewer.vue'
24-
import ViewerService from './services/Viewer.js'
2524
import { translate as t } from '@nextcloud/l10n'
2625

2726
Vue.mixin({
@@ -37,12 +36,6 @@ INJECT_CYPRESS_FONT
3736
Vue.prototype.OC = window.OC
3837
Vue.prototype.OCA = window.OCA
3938

40-
// Init Viewer Service
41-
if (window.OCA) {
42-
Object.assign(window.OCA, { Viewer: new ViewerService() })
43-
window.OCA.Viewer.version = appVersion
44-
}
45-
4639
// Create document root
4740
const ViewerRoot = document.createElement('div')
4841
ViewerRoot.id = 'viewer'

src/services/Viewer.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import Images from '../models/images.js'
2424
import Videos from '../models/videos.js'
2525
import Audios from '../models/audios.js'
26+
import logger from './logger.js'
2627

2728
/**
2829
* Handler type definition
@@ -78,7 +79,7 @@ export default class Viewer {
7879
this.registerHandler(Videos)
7980
this.registerHandler(Audios)
8081

81-
console.debug('OCA.Viewer initialized')
82+
logger.debug('OCA.Viewer initialized')
8283
}
8384

8485
/**
@@ -99,9 +100,9 @@ export default class Viewer {
99100
* @param {Handler} handler a new unregistered handler
100101
*/
101102
registerHandler(handler) {
102-
const err = this.validateHandler(handler)
103-
if (err) {
104-
console.error(err, handler)
103+
const error = this.validateHandler(handler)
104+
if (error) {
105+
logger.error('Could not register handler', { error, handler })
105106
return
106107
}
107108

src/views/Viewer.vue

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,7 @@ export default {
287287
isSidebarShown: false,
288288
isFullscreenMode: false,
289289
canSwipe: true,
290-
// TODO: remove OCA?.Files?.fileActions when public Files is Vue
291-
isStandalone: OCP?.Files === undefined && OCA?.Files?.fileActions === undefined,
290+
isStandalone: false,
292291
theme: null,
293292
root: getRootPath(),
294293
handlerId: '',
@@ -524,6 +523,11 @@ export default {
524523
},
525524
526525
beforeMount() {
526+
this.isStandalone = window.OCP?.Files === undefined
527+
if (this.isStandalone) {
528+
logger.info('No OCP.Files app found, viewer is now in standalone mode')
529+
}
530+
527531
// register on load
528532
document.addEventListener('DOMContentLoaded', () => {
529533
// register all primary components mimes
@@ -543,16 +547,10 @@ export default {
543547
this.Sidebar = OCA.Files.Sidebar.state
544548
}
545549
546-
this.registerFileActions()
547-
548550
logger.info(`${this.handlers.length} viewer handlers registered`, { handlers: this.handlers })
549551
})
550552
551553
window.addEventListener('resize', this.onResize)
552-
553-
if (this.isStandalone) {
554-
logger.info('No OCP.Files app found, viewer is now in standalone mode')
555-
}
556554
},
557555
558556
mounted() {
@@ -933,31 +931,6 @@ export default {
933931
}
934932
},
935933
936-
registerFileActions() {
937-
if (!this.isStandalone) {
938-
registerFileAction(new FileAction({
939-
id: 'view',
940-
displayName() {
941-
return t('viewer', 'View')
942-
},
943-
iconSvgInline: () => EyeSvg,
944-
default: DefaultType.DEFAULT,
945-
enabled: (nodes) => {
946-
// Disable if not located in user root
947-
if (nodes.some(node => !(node.isDavRessource && node.root?.startsWith('/files')))) {
948-
return false
949-
}
950-
// Faster to check if at least one node doesn't match the requirements
951-
return !nodes.some(node => (
952-
(node.permissions & Permission.READ) === 0
953-
|| !this.Viewer.mimetypes.includes(node.mime)
954-
))
955-
},
956-
exec: filesActionHandler,
957-
}))
958-
}
959-
},
960-
961934
/**
962935
* Close the viewer
963936
*/

vite.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const plyrIcons = readFileSync(join(__dirname, 'node_modules', 'plyr', 'dist', '
77

88
export default createAppConfig({
99
main: 'src/main.js',
10+
init: 'src/init.ts',
1011
}, {
1112
replace: {
1213
PLYR_ICONS: JSON.stringify(plyrIcons),

0 commit comments

Comments
 (0)