]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(files): Use DAV functions from library to fix invalid source links
authorFerdinand Thiessen <opensource@fthiessen.de>
Sun, 17 Dec 2023 15:44:29 +0000 (16:44 +0100)
committerJohn Molakvoæ <skjnldsv@protonmail.com>
Tue, 19 Dec 2023 08:21:00 +0000 (09:21 +0100)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
apps/files/src/services/Recent.ts

index ecd43b90eccf59fd016125b5400a50a9081d13cd..26c4babb5a245219bef652487db95d250826f010 100644 (file)
@@ -2,6 +2,7 @@
  * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
  *
  * @author John Molakvoæ <skjnldsv@protonmail.com>
+ * @author Ferdinand Thiessen <opensource@fthiessen.de>
  *
  * @license AGPL-3.0-or-later
  *
  *
  */
 import type { ContentsWithRoot } from '@nextcloud/files'
-import type { FileStat, ResponseDataDetailed, DAVResultResponseProps } from 'webdav'
+import type { FileStat, ResponseDataDetailed } from 'webdav'
 
-import { Folder, Permission, getDavNameSpaces, getDavProperties } from '@nextcloud/files'
-import { generateRemoteUrl } from '@nextcloud/router'
 import { getCurrentUser } from '@nextcloud/auth'
+import { Folder, Permission, davGetRecentSearch, davGetClient, davResultToNode, davRootPath, davRemoteURL } from '@nextcloud/files'
 
-import { getClient, rootPath } from './WebdavClient'
-import { resultToNode } from './Files'
-
-const client = getClient(generateRemoteUrl('dav'))
+const client = davGetClient()
 
 const lastTwoWeeksTimestamp = Math.round((Date.now() / 1000) - (60 * 60 * 24 * 14))
-const searchPayload = `<?xml version="1.0" encoding="UTF-8"?>
-<d:searchrequest ${getDavNameSpaces()}
-       xmlns:ns="https://github.com/icewind1991/SearchDAV/ns">
-       <d:basicsearch>
-               <d:select>
-                       <d:prop>
-                               ${getDavProperties()}
-                       </d:prop>
-               </d:select>
-               <d:from>
-                       <d:scope>
-                               <d:href>/files/${getCurrentUser()?.uid}/</d:href>
-                               <d:depth>infinity</d:depth>
-                       </d:scope>
-               </d:from>
-               <d:where>
-                       <d:and>
-                               <d:or>
-                                       <d:not>
-                                               <d:eq>
-                                                       <d:prop>
-                                                               <d:getcontenttype/>
-                                                       </d:prop>
-                                                       <d:literal>httpd/unix-directory</d:literal>
-                                               </d:eq>
-                                       </d:not>
-                                       <d:eq>
-                                               <d:prop>
-                                                       <oc:size/>
-                                               </d:prop>
-                                               <d:literal>0</d:literal>
-                                       </d:eq>
-                               </d:or>
-                               <d:gt>
-                                       <d:prop>
-                                               <d:getlastmodified/>
-                                       </d:prop>
-                                       <d:literal>${lastTwoWeeksTimestamp}</d:literal>
-                               </d:gt>
-                       </d:and>
-               </d:where>
-               <d:orderby>
-                       <d:order>
-                               <d:prop>
-                                       <d:getlastmodified/>
-                               </d:prop>
-                               <d:descending/>
-                       </d:order>
-               </d:orderby>
-               <d:limit>
-                       <d:nresults>100</d:nresults>
-                       <ns:firstresult>0</ns:firstresult>
-               </d:limit>
-       </d:basicsearch>
-</d:searchrequest>`
-
-interface ResponseProps extends DAVResultResponseProps {
-       permissions: string,
-       fileid: number,
-       size: number,
-}
 
 export const getContents = async (path = '/'): Promise<ContentsWithRoot> => {
        const contentsResponse = await client.getDirectoryContents(path, {
                details: true,
-               data: searchPayload,
+               data: davGetRecentSearch(lastTwoWeeksTimestamp),
                headers: {
                        // Patched in WebdavClient.ts
                        method: 'SEARCH',
@@ -112,11 +48,11 @@ export const getContents = async (path = '/'): Promise<ContentsWithRoot> => {
        return {
                folder: new Folder({
                        id: 0,
-                       source: generateRemoteUrl('dav' + rootPath),
-                       root: rootPath,
+                       source: `${davRemoteURL}${davRootPath}`,
+                       root: davRootPath,
                        owner: getCurrentUser()?.uid || null,
                        permissions: Permission.READ,
                }),
-               contents: contents.map(resultToNode),
+               contents: contents.map((r) => davResultToNode(r)),
        }
 }