From a0de24083ef5159888e8fd5afb77f3b9621e4f02 Mon Sep 17 00:00:00 2001 From: fenn-cs Date: Wed, 8 May 2024 21:00:38 +0100 Subject: fix(deleteAction): Remove unused nc l10n import Signed-off-by: fenn-cs --- apps/files/src/actions/deleteAction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apps/files') diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts index c46de9c652e..129ef0f9877 100644 --- a/apps/files/src/actions/deleteAction.ts +++ b/apps/files/src/actions/deleteAction.ts @@ -22,7 +22,7 @@ import { emit } from '@nextcloud/event-bus' import { Permission, Node, View, FileAction, FileType } from '@nextcloud/files' import { showInfo } from '@nextcloud/dialogs' -import { translate as t, translatePlural as n } from '@nextcloud/l10n' +import { translate as t } from '@nextcloud/l10n' import axios from '@nextcloud/axios' import CloseSvg from '@mdi/svg/svg/close.svg?raw' -- cgit v1.2.3 From 8b1fab4795c9f2744a65178f5bb32348198a116f Mon Sep 17 00:00:00 2001 From: fenn-cs Date: Wed, 8 May 2024 21:03:06 +0100 Subject: perf(deleteAction): Queue delete requests When multiple files are deleted at once, all the requests bombard the server simultaneously, causing performance issues. This commit adds queuing that limits the concurrency of these requests to 5 at a time. Signed-off-by: fenn-cs --- apps/files/src/actions/deleteAction.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'apps/files') diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts index 129ef0f9877..458cfd05eef 100644 --- a/apps/files/src/actions/deleteAction.ts +++ b/apps/files/src/actions/deleteAction.ts @@ -30,6 +30,7 @@ import NetworkOffSvg from '@mdi/svg/svg/network-off.svg?raw' import TrashCanSvg from '@mdi/svg/svg/trash-can.svg?raw' import logger from '../logger.js' +import PQueue from 'p-queue' const canUnshareOnly = (nodes: Node[]) => { return nodes.every(node => node.attributes['is-mount-root'] === true @@ -119,6 +120,8 @@ const displayName = (nodes: Node[], view: View) => { return t('files', 'Delete') } +const queue = new PQueue({ concurrency: 1 }) + export const action = new FileAction({ id: 'delete', displayName, @@ -183,7 +186,19 @@ export const action = new FileAction({ return Promise.all(nodes.map(() => false)) } - return Promise.all(nodes.map(node => this.exec(node, view, dir))) + // Map each node to a promise that resolves with the result of exec(node) + const promises = nodes.map(node => { + // Create a promise that resolves with the result of exec(node) + const promise = new Promise(resolve => { + queue.add(async () => { + const result = await this.exec(node, view, dir) + resolve(result !== null ? result : false) + }) + }) + return promise + }) + + return Promise.all(promises) }, order: 100, -- cgit v1.2.3