Skip to content

Commit

Permalink
Merge pull request #49806 from nextcloud/backport/49803/stable29
Browse files Browse the repository at this point in the history
  • Loading branch information
skjnldsv authored Dec 11, 2024
2 parents a793438 + c4fd934 commit c460526
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
23 changes: 22 additions & 1 deletion apps/files/src/actions/favoriteAction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { generateUrl } from '@nextcloud/router'
import { Permission, type Node, View, FileAction } from '@nextcloud/files'
import { translate as t } from '@nextcloud/l10n'
import axios from '@nextcloud/axios'
import PQueue from 'p-queue'
import Vue from 'vue'

import StarOutlineSvg from '@mdi/svg/svg/star-outline.svg?raw'
Expand All @@ -32,6 +33,8 @@ import StarSvg from '@mdi/svg/svg/star.svg?raw'
import logger from '../logger.js'
import { encodePath } from '@nextcloud/paths'

const queue = new PQueue({ concurrency: 5 })

// If any of the nodes is not favorited, we display the favorite action.
const shouldFavorite = (nodes: Node[]): boolean => {
return nodes.some(node => node.attributes.favorite !== 1)
Expand Down Expand Up @@ -97,7 +100,25 @@ export const action = new FileAction({
},
async execBatch(nodes: Node[], view: View) {
const willFavorite = shouldFavorite(nodes)
return Promise.all(nodes.map(async node => await favoriteNode(node, view, willFavorite)))

// 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<boolean>(resolve => {
queue.add(async () => {
try {
await favoriteNode(node, view, willFavorite)
resolve(true)
} catch (error) {
logger.error('Error while adding file to favorite', { error, source: node.source, node })
resolve(false)
}
})
})
return promise
})

return Promise.all(promises)
},

order: -50,
Expand Down
4 changes: 2 additions & 2 deletions dist/files-init.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/files-init.js.map

Large diffs are not rendered by default.

0 comments on commit c460526

Please sign in to comment.