From 73bcc0a739207e381e95d6a4d24289ae64557a2f Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 14 Apr 2025 14:49:20 +0200 Subject: [PATCH] refactor(files): use new `hide-download` WebDAV property for download action Signed-off-by: Ferdinand Thiessen --- apps/files/src/actions/downloadAction.ts | 2 +- apps/files/src/utils/permissions.ts | 7 +++++++ apps/files_sharing/src/init.ts | 4 +++- apps/files_sharing/src/services/SharingService.ts | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/files/src/actions/downloadAction.ts b/apps/files/src/actions/downloadAction.ts index 777008c804e..8abd87972ee 100644 --- a/apps/files/src/actions/downloadAction.ts +++ b/apps/files/src/actions/downloadAction.ts @@ -88,7 +88,7 @@ export const action = new FileAction({ } // We can only download dav files and folders. - if (nodes.some(node => !node.isDavRessource)) { + if (nodes.some(node => !node.isDavResource)) { return false } diff --git a/apps/files/src/utils/permissions.ts b/apps/files/src/utils/permissions.ts index 2c85ede1659..9b4c42bf49c 100644 --- a/apps/files/src/utils/permissions.ts +++ b/apps/files/src/utils/permissions.ts @@ -17,6 +17,13 @@ export function isDownloadable(node: Node): boolean { return false } + // check hide-download property of shares + if (node.attributes['hide-download'] === true + || node.attributes['hide-download'] === 'true' + ) { + return false + } + // If the mount type is a share, ensure it got download permissions. if (node.attributes['share-attributes']) { const shareAttributes = JSON.parse(node.attributes['share-attributes'] || '[]') as Array diff --git a/apps/files_sharing/src/init.ts b/apps/files_sharing/src/init.ts index 5a2b93c6ea3..f275f3beaf7 100644 --- a/apps/files_sharing/src/init.ts +++ b/apps/files_sharing/src/init.ts @@ -2,7 +2,8 @@ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { addNewFileMenuEntry, registerDavProperty } from '@nextcloud/files' +import { addNewFileMenuEntry } from '@nextcloud/files' +import { registerDavProperty } from '@nextcloud/files/dav' import { registerAccountFilter } from './files_filters/AccountFilter' import { entry as newFileRequest } from './files_newMenu/newFileRequest' @@ -21,6 +22,7 @@ addNewFileMenuEntry(newFileRequest) registerDavProperty('nc:note', { nc: 'http://nextcloud.org/ns' }) registerDavProperty('nc:sharees', { nc: 'http://nextcloud.org/ns' }) +registerDavProperty('nc:hide-download', { nc: 'http://nextcloud.org/ns' }) registerDavProperty('nc:share-attributes', { nc: 'http://nextcloud.org/ns' }) registerDavProperty('oc:share-types', { oc: 'http://owncloud.org/ns' }) registerDavProperty('ocs:share-permissions', { ocs: 'http://open-collaboration-services.org/ns' }) diff --git a/apps/files_sharing/src/services/SharingService.ts b/apps/files_sharing/src/services/SharingService.ts index d8c6747f89c..41c20f9aa73 100644 --- a/apps/files_sharing/src/services/SharingService.ts +++ b/apps/files_sharing/src/services/SharingService.ts @@ -94,6 +94,7 @@ const ocsEntryToNode = async function(ocsEntry: any): Promise