mirror of
https://github.com/nextcloud/server.git
synced 2026-06-07 15:53:04 -04:00
Merge pull request #47037 from nextcloud/backport/46996/stable28
[stable28] fix(trashbin): Correctly set original name as displayname
This commit is contained in:
commit
44cae23dee
5 changed files with 26 additions and 69 deletions
|
|
@ -67,6 +67,11 @@ class TrashbinPlugin extends ServerPlugin {
|
|||
return;
|
||||
}
|
||||
|
||||
// Pass the real filename as the DAV display name
|
||||
$propFind->handle(FilesPlugin::DISPLAYNAME_PROPERTYNAME, function () use ($node) {
|
||||
return $node->getFilename();
|
||||
});
|
||||
|
||||
$propFind->handle(self::TRASHBIN_FILENAME, function () use ($node) {
|
||||
return $node->getFilename();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -20,27 +20,10 @@
|
|||
*
|
||||
*/
|
||||
|
||||
import { createClient } from 'webdav'
|
||||
import { generateRemoteUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { davGetClient } from '@nextcloud/files'
|
||||
|
||||
// init webdav client
|
||||
// init WebDAV client
|
||||
export const rootPath = `/trashbin/${getCurrentUser()?.uid}/trash`
|
||||
export const rootUrl = generateRemoteUrl('dav' + rootPath)
|
||||
const client = createClient(rootUrl)
|
||||
|
||||
// set CSRF token header
|
||||
const setHeaders = (token: string | null) => {
|
||||
client.setHeaders({
|
||||
// Add this so the server knows it is an request from the browser
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
// Inject user auth
|
||||
requesttoken: token ?? '',
|
||||
})
|
||||
}
|
||||
|
||||
// refresh headers when request token changes
|
||||
onRequestTokenUpdate(setHeaders)
|
||||
setHeaders(getRequestToken())
|
||||
|
||||
export default client
|
||||
export const client = davGetClient()
|
||||
|
|
|
|||
|
|
@ -22,16 +22,13 @@
|
|||
import type { FileStat, ResponseDataDetailed } from 'webdav'
|
||||
import type { ContentsWithRoot } from '@nextcloud/files'
|
||||
|
||||
import { File, Folder, davParsePermissions, getDavNameSpaces, getDavProperties } from '@nextcloud/files'
|
||||
import { generateRemoteUrl, generateUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
|
||||
import client, { rootPath } from './client'
|
||||
import { File, Folder, davResultToNode, getDavNameSpaces, getDavProperties } from '@nextcloud/files'
|
||||
import { client, rootPath } from './client'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
|
||||
const data = `<?xml version="1.0"?>
|
||||
<d:propfind ${getDavNameSpaces()}>
|
||||
<d:prop>
|
||||
<nc:trashbin-filename />
|
||||
<nc:trashbin-deletion-time />
|
||||
<nc:trashbin-original-location />
|
||||
<nc:trashbin-title />
|
||||
|
|
@ -39,52 +36,24 @@ const data = `<?xml version="1.0"?>
|
|||
</d:prop>
|
||||
</d:propfind>`
|
||||
|
||||
const resultToNode = function(node: FileStat): File | Folder {
|
||||
const permissions = davParsePermissions(node.props?.permissions)
|
||||
const owner = getCurrentUser()?.uid as string
|
||||
const previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32', node.props)
|
||||
|
||||
const nodeData = {
|
||||
id: node.props?.fileid as number || 0,
|
||||
source: generateRemoteUrl('dav' + rootPath + node.filename),
|
||||
// do not show the mtime column
|
||||
// mtime: new Date(node.lastmod),
|
||||
mime: node.mime as string,
|
||||
size: node.props?.size as number || 0,
|
||||
permissions,
|
||||
owner,
|
||||
root: rootPath,
|
||||
attributes: {
|
||||
...node,
|
||||
...node.props,
|
||||
// Override displayed name on the list
|
||||
displayName: node.props?.['trashbin-filename'],
|
||||
previewUrl,
|
||||
},
|
||||
}
|
||||
|
||||
delete nodeData.attributes.props
|
||||
|
||||
return node.type === 'file'
|
||||
? new File(nodeData)
|
||||
: new Folder(nodeData)
|
||||
const resultToNode = (stat: FileStat): File | Folder => {
|
||||
const node = davResultToNode(stat, rootPath)
|
||||
node.attributes.previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32', { fileid: node.fileid })
|
||||
return node
|
||||
}
|
||||
|
||||
export const getContents = async (path = '/'): Promise<ContentsWithRoot> => {
|
||||
// TODO: use only one request when webdav-client supports it
|
||||
// @see https://github.com/perry-mitchell/webdav-client/pull/334
|
||||
const rootResponse = await client.stat(path, {
|
||||
details: true,
|
||||
data,
|
||||
}) as ResponseDataDetailed<FileStat>
|
||||
|
||||
const contentsResponse = await client.getDirectoryContents(path, {
|
||||
const contentsResponse = await client.getDirectoryContents(`${rootPath}${path}`, {
|
||||
details: true,
|
||||
data,
|
||||
includeSelf: true,
|
||||
}) as ResponseDataDetailed<FileStat[]>
|
||||
|
||||
const contents = contentsResponse.data.map(resultToNode)
|
||||
const [folder] = contents.splice(contents.findIndex((node) => node.dirname === path), 1)
|
||||
|
||||
return {
|
||||
folder: resultToNode(rootResponse.data) as Folder,
|
||||
contents: contentsResponse.data.map(resultToNode),
|
||||
folder: folder as Folder,
|
||||
contents,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
4
dist/files_trashbin-init.js
vendored
4
dist/files_trashbin-init.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_trashbin-init.js.map
vendored
2
dist/files_trashbin-init.js.map
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue