diff --git a/apps/files_trashbin/src/services/client.ts b/apps/files_trashbin/src/services/client.ts
index e9ea06a9a5ed4..fe7052b009349 100644
--- a/apps/files_trashbin/src/services/client.ts
+++ b/apps/files_trashbin/src/services/client.ts
@@ -20,14 +20,11 @@
*
*/
-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
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) => {
diff --git a/apps/files_trashbin/src/services/trashbin.ts b/apps/files_trashbin/src/services/trashbin.ts
index 9aef75ef6d5a9..e7744463011e1 100644
--- a/apps/files_trashbin/src/services/trashbin.ts
+++ b/apps/files_trashbin/src/services/trashbin.ts
@@ -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 = `
-
@@ -39,52 +36,24 @@ const data = `
`
-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 => {
- // 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
-
- const contentsResponse = await client.getDirectoryContents(path, {
+ const contentsResponse = await client.getDirectoryContents(`${rootPath}${path}`, {
details: true,
data,
+ includeSelf: true,
}) as ResponseDataDetailed
+ 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,
}
}