From dc3f9513bd45e8ba95753ea329ed5514db1ed1ec Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 26 Oct 2022 22:16:23 +0200 Subject: [PATCH 01/11] Refactor Webdav listFiles --- .../src/helpers/resource/actions/transfer.ts | 4 ++-- packages/web-app-files/src/mixins/actions/restore.ts | 5 ++--- .../web-app-files/src/services/folder/loaderSpace.ts | 5 +++-- packages/web-client/src/webdav/listFiles.ts | 9 +++++---- .../src/composables/appDefaults/useAppFolderHandling.ts | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/web-app-files/src/helpers/resource/actions/transfer.ts b/packages/web-app-files/src/helpers/resource/actions/transfer.ts index 30db3eb9bb0..627843fbbfa 100644 --- a/packages/web-app-files/src/helpers/resource/actions/transfer.ts +++ b/packages/web-app-files/src/helpers/resource/actions/transfer.ts @@ -107,10 +107,10 @@ export class ResourceTransfer extends ConflictDialog { } const errors = [] - const targetFolderResources = await this.clientService.webdav.listFiles( + const targetFolderResources = (await this.clientService.webdav.listFiles( this.targetSpace, this.targetFolder - ) + )).children const resolvedConflicts = await this.resolveAllConflicts( this.resourcesToMove, diff --git a/packages/web-app-files/src/mixins/actions/restore.ts b/packages/web-app-files/src/mixins/actions/restore.ts index 99c7e7c1bad..a748fbe5111 100644 --- a/packages/web-app-files/src/mixins/actions/restore.ts +++ b/packages/web-app-files/src/mixins/actions/restore.ts @@ -68,10 +68,9 @@ export default { existingResources = existingResourcesCache[parentPath] } else { try { - existingResources = await this.$clientService.webdav.listFiles(this.space, { + existingResources = (await this.$clientService.webdav.listFiles(this.space, { path: parentPath - }) - existingResources = existingResources.slice(1) + })).children } catch (error) { missingFolderPaths.push(parentPath) } diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index a8a9d91525f..b6f258896e0 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -53,8 +53,9 @@ export class FolderLoaderSpace implements FolderLoader { try { store.commit('Files/CLEAR_CURRENT_FILES_LIST') - const resources = yield webdav.listFiles(space, { path, fileId }) - let currentFolder = resources.shift() + const listFilesResult = yield webdav.listFiles(space, { path, fileId }) + const resources = listFilesResult.children + let currentFolder = listFilesResult.folder replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 3c52c5c5056..7a2764d4503 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -20,7 +20,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { space: SpaceResource, { path, fileId }: { path?: string; fileId?: string | number } = {}, { depth = 1, davProperties }: ListFilesOptions = {} - ): Promise { + ): Promise<{ folder: Resource, children: Resource[]}> { let webDavResources: any[] if (isPublicSpaceResource(space)) { webDavResources = await sdk.publicFiles.list( @@ -44,9 +44,10 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { }) if (!path) { const [rootFolder, ...children] = webDavResources - return [buildPublicSpaceResource(rootFolder), ...children.map(buildResource)] + return { folder: buildPublicSpaceResource(rootFolder), children: children.map(buildResource) } } - return webDavResources.map(buildResource) + const resources = webDavResources.map(buildResource) + return { folder: resources[0], children: resources.slice(1) } } const listFilesCorrectedPath = async () => { @@ -64,7 +65,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (fileId && fileId !== resources[0].fileId) { return listFilesCorrectedPath() } - return resources + return { folder: resources[0], children: resources.slice(1) } } catch (e) { if (e.statusCode === 404 && fileId) { return listFilesCorrectedPath() diff --git a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts index 7b04a33c83e..5b3296bf2e2 100644 --- a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts +++ b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts @@ -63,9 +63,9 @@ export function useAppFolderHandling({ }) const path = dirname(pathResource.path) - const resources = await webdav.listFiles(space, { + const resources = (await webdav.listFiles(space, { path - }) + })).children if (resources[0].type === 'file') { store.commit('Files/LOAD_FILES', { From a84c7ada0668ff8ae54bf283c3f71b85f79b91ec Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 26 Oct 2022 22:26:04 +0200 Subject: [PATCH 02/11] Bugfix, Update changelog, linting, tests --- changelog/unreleased/enhancement-webdav-client | 1 + .../src/helpers/resource/actions/transfer.ts | 7 +++---- packages/web-app-files/src/mixins/actions/restore.ts | 8 +++++--- .../tests/unit/helpers/resource/resourcesTransfer.spec.ts | 2 +- packages/web-client/src/webdav/getFileInfo.ts | 2 +- packages/web-client/src/webdav/listFiles.ts | 7 +++++-- .../src/composables/appDefaults/useAppFolderHandling.ts | 8 +++++--- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/changelog/unreleased/enhancement-webdav-client b/changelog/unreleased/enhancement-webdav-client index d9bb9d7dfdf..a69cbfcfe9a 100644 --- a/changelog/unreleased/enhancement-webdav-client +++ b/changelog/unreleased/enhancement-webdav-client @@ -5,3 +5,4 @@ We've added webdav support to the `web-client` package. This wraps the existing handles the differentiation of public link and user-specific webdav requests internally. https://github.com/owncloud/web/pull/7430 +https://github.com/owncloud/web/pull/7880 \ No newline at end of file diff --git a/packages/web-app-files/src/helpers/resource/actions/transfer.ts b/packages/web-app-files/src/helpers/resource/actions/transfer.ts index 627843fbbfa..7c238a5171c 100644 --- a/packages/web-app-files/src/helpers/resource/actions/transfer.ts +++ b/packages/web-app-files/src/helpers/resource/actions/transfer.ts @@ -107,10 +107,9 @@ export class ResourceTransfer extends ConflictDialog { } const errors = [] - const targetFolderResources = (await this.clientService.webdav.listFiles( - this.targetSpace, - this.targetFolder - )).children + const targetFolderResources = ( + await this.clientService.webdav.listFiles(this.targetSpace, this.targetFolder) + ).children const resolvedConflicts = await this.resolveAllConflicts( this.resourcesToMove, diff --git a/packages/web-app-files/src/mixins/actions/restore.ts b/packages/web-app-files/src/mixins/actions/restore.ts index a748fbe5111..cd9ede50b69 100644 --- a/packages/web-app-files/src/mixins/actions/restore.ts +++ b/packages/web-app-files/src/mixins/actions/restore.ts @@ -68,9 +68,11 @@ export default { existingResources = existingResourcesCache[parentPath] } else { try { - existingResources = (await this.$clientService.webdav.listFiles(this.space, { - path: parentPath - })).children + existingResources = ( + await this.$clientService.webdav.listFiles(this.space, { + path: parentPath + }) + ).children } catch (error) { missingFolderPaths.push(parentPath) } diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index 7548c34e565..c55c81bb87c 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -75,7 +75,7 @@ describe('resourcesTransfer', () => { 'should copy / move files without renaming them if no conflicts exist', async (action: TransferType) => { clientServiceMock.webdav.listFiles.mockReturnValueOnce( - new Promise((resolve) => resolve([] as Resource[])) + new Promise((resolve) => resolve({folder: {} as Resource, children: [] as Resource[]})) ) const resourcesTransfer = new ResourceTransfer( sourceSpace, diff --git a/packages/web-client/src/webdav/getFileInfo.ts b/packages/web-client/src/webdav/getFileInfo.ts index c3354740f76..706eb3f11c3 100644 --- a/packages/web-client/src/webdav/getFileInfo.ts +++ b/packages/web-client/src/webdav/getFileInfo.ts @@ -17,7 +17,7 @@ export const GetFileInfoFactory = ( depth: 0, ...options }) - )[0] + ).folder } } } diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 7a2764d4503..224bf44a1d0 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -20,7 +20,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { space: SpaceResource, { path, fileId }: { path?: string; fileId?: string | number } = {}, { depth = 1, davProperties }: ListFilesOptions = {} - ): Promise<{ folder: Resource, children: Resource[]}> { + ): Promise<{ folder: Resource; children: Resource[] }> { let webDavResources: any[] if (isPublicSpaceResource(space)) { webDavResources = await sdk.publicFiles.list( @@ -44,7 +44,10 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { }) if (!path) { const [rootFolder, ...children] = webDavResources - return { folder: buildPublicSpaceResource(rootFolder), children: children.map(buildResource) } + return { + folder: buildPublicSpaceResource(rootFolder), + children: children.map(buildResource) + } } const resources = webDavResources.map(buildResource) return { folder: resources[0], children: resources.slice(1) } diff --git a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts index 5b3296bf2e2..ee6c742a897 100644 --- a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts +++ b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts @@ -63,9 +63,11 @@ export function useAppFolderHandling({ }) const path = dirname(pathResource.path) - const resources = (await webdav.listFiles(space, { - path - })).children + const resources = ( + await webdav.listFiles(space, { + path + }) + ).children if (resources[0].type === 'file') { store.commit('Files/LOAD_FILES', { From 5bc3d994583da79c68439bdd0a68efe8a34ddcd9 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 27 Oct 2022 10:18:09 +0200 Subject: [PATCH 03/11] Address PR issues, fix tests --- packages/web-app-files/src/mixins/actions/rename.ts | 9 +++++---- .../web-app-files/src/services/folder/loaderSpace.ts | 2 +- .../unit/helpers/resource/resourcesTransfer.spec.ts | 8 ++++++-- .../tests/unit/mixins/actions/restore.spec.js | 2 +- packages/web-client/src/helpers/space/types.ts | 5 +++++ packages/web-client/src/webdav/getFileInfo.ts | 2 +- packages/web-client/src/webdav/listFiles.ts | 12 ++++++------ 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/web-app-files/src/mixins/actions/rename.ts b/packages/web-app-files/src/mixins/actions/rename.ts index 7e37d59df80..61a2a47aad5 100644 --- a/packages/web-app-files/src/mixins/actions/rename.ts +++ b/packages/web-app-files/src/mixins/actions/rename.ts @@ -73,10 +73,11 @@ export default { let parentResources if (isSameResource(resources[0], this.currentFolder)) { const parentPath = dirname(this.currentFolder.path) - parentResources = await (this.$clientService.webdav as WebDAV).listFiles( - space || this.space, - { path: parentPath } - ) + parentResources = ( + await (this.$clientService.webdav as WebDAV).listFiles(space || this.space, { + path: parentPath + }) + ).children } const confirmAction = (newName) => { diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index b6f258896e0..6585e492c86 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -55,7 +55,7 @@ export class FolderLoaderSpace implements FolderLoader { const listFilesResult = yield webdav.listFiles(space, { path, fileId }) const resources = listFilesResult.children - let currentFolder = listFilesResult.folder + let currentFolder = listFilesResult.node replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index c55c81bb87c..7be3b85c6d8 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -6,7 +6,7 @@ import { resolveFileNameDuplicate } from '../../../../src/helpers/resource' import { mockDeep, mockReset } from 'jest-mock-extended' -import { buildSpace, Resource } from 'web-client/src/helpers' +import { buildSpace, PropfindResult, Resource } from 'web-client/src/helpers' const clientServiceMock = mockDeep() let resourcesToMove @@ -74,8 +74,12 @@ describe('resourcesTransfer', () => { it.each([TransferType.COPY, TransferType.MOVE])( 'should copy / move files without renaming them if no conflicts exist', async (action: TransferType) => { + const propfindResult = { + node: {} as Resource, + children: [] as Resource[] + } as PropfindResult clientServiceMock.webdav.listFiles.mockReturnValueOnce( - new Promise((resolve) => resolve({folder: {} as Resource, children: [] as Resource[]})) + new Promise((resolve) => resolve(propfindResult)) ) const resourcesTransfer = new ResourceTransfer( sourceSpace, diff --git a/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js b/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js index 077beb4fce3..1925a8aff01 100644 --- a/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js +++ b/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js @@ -117,7 +117,7 @@ function getWrapper({ $clientService: { webdav: { listFiles: jest.fn().mockImplementation(() => { - return [] + return { node: {}, children: [] } }), restoreFile: jest.fn().mockImplementation(() => { if (resolveRestore) { diff --git a/packages/web-client/src/helpers/space/types.ts b/packages/web-client/src/helpers/space/types.ts index 7034755e131..b3d9dd229c8 100644 --- a/packages/web-client/src/helpers/space/types.ts +++ b/packages/web-client/src/helpers/space/types.ts @@ -75,3 +75,8 @@ export interface PublicSpaceResource extends SpaceResource { export const isPublicSpaceResource = (resource: Resource): resource is PublicSpaceResource => { return resource.driveType === 'public' } + +export interface PropfindResult { + node: Resource + children?: Resource[] +} diff --git a/packages/web-client/src/webdav/getFileInfo.ts b/packages/web-client/src/webdav/getFileInfo.ts index 706eb3f11c3..a465a670098 100644 --- a/packages/web-client/src/webdav/getFileInfo.ts +++ b/packages/web-client/src/webdav/getFileInfo.ts @@ -17,7 +17,7 @@ export const GetFileInfoFactory = ( depth: 0, ...options }) - ).folder + ).node } } } diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 224bf44a1d0..601e5f56b22 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -3,7 +3,7 @@ import { DavProperties, DavProperty } from './constants' import { buildPublicSpaceResource, isPublicSpaceResource, - Resource, + PropfindResult, SpaceResource } from '../helpers' import { WebDavOptions } from './types' @@ -20,7 +20,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { space: SpaceResource, { path, fileId }: { path?: string; fileId?: string | number } = {}, { depth = 1, davProperties }: ListFilesOptions = {} - ): Promise<{ folder: Resource; children: Resource[] }> { + ): Promise { let webDavResources: any[] if (isPublicSpaceResource(space)) { webDavResources = await sdk.publicFiles.list( @@ -45,12 +45,12 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (!path) { const [rootFolder, ...children] = webDavResources return { - folder: buildPublicSpaceResource(rootFolder), + node: buildPublicSpaceResource(rootFolder), children: children.map(buildResource) - } + } as PropfindResult } const resources = webDavResources.map(buildResource) - return { folder: resources[0], children: resources.slice(1) } + return { node: resources[0], children: resources.slice(1) } as PropfindResult } const listFilesCorrectedPath = async () => { @@ -68,7 +68,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (fileId && fileId !== resources[0].fileId) { return listFilesCorrectedPath() } - return { folder: resources[0], children: resources.slice(1) } + return { node: resources[0], children: resources.slice(1) } as PropfindResult } catch (e) { if (e.statusCode === 404 && fileId) { return listFilesCorrectedPath() From 8ec8b0a2025b674ed9df6096b3297c314dbc7867 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 27 Oct 2022 10:26:10 +0200 Subject: [PATCH 04/11] Rename node to resource --- packages/web-app-files/src/services/folder/loaderSpace.ts | 2 +- .../tests/unit/helpers/resource/resourcesTransfer.spec.ts | 2 +- .../web-app-files/tests/unit/mixins/actions/restore.spec.js | 2 +- packages/web-client/src/helpers/space/types.ts | 2 +- packages/web-client/src/webdav/getFileInfo.ts | 2 +- packages/web-client/src/webdav/listFiles.ts | 6 +++--- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index 6585e492c86..5c7f386ede2 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -55,7 +55,7 @@ export class FolderLoaderSpace implements FolderLoader { const listFilesResult = yield webdav.listFiles(space, { path, fileId }) const resources = listFilesResult.children - let currentFolder = listFilesResult.node + let currentFolder = listFilesResult.resource replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index 7be3b85c6d8..bc96e54c41a 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -75,7 +75,7 @@ describe('resourcesTransfer', () => { 'should copy / move files without renaming them if no conflicts exist', async (action: TransferType) => { const propfindResult = { - node: {} as Resource, + resource: {} as Resource, children: [] as Resource[] } as PropfindResult clientServiceMock.webdav.listFiles.mockReturnValueOnce( diff --git a/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js b/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js index 1925a8aff01..45aa5772c74 100644 --- a/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js +++ b/packages/web-app-files/tests/unit/mixins/actions/restore.spec.js @@ -117,7 +117,7 @@ function getWrapper({ $clientService: { webdav: { listFiles: jest.fn().mockImplementation(() => { - return { node: {}, children: [] } + return { resource: {}, children: [] } }), restoreFile: jest.fn().mockImplementation(() => { if (resolveRestore) { diff --git a/packages/web-client/src/helpers/space/types.ts b/packages/web-client/src/helpers/space/types.ts index b3d9dd229c8..a05e7cf07a2 100644 --- a/packages/web-client/src/helpers/space/types.ts +++ b/packages/web-client/src/helpers/space/types.ts @@ -77,6 +77,6 @@ export const isPublicSpaceResource = (resource: Resource): resource is PublicSpa } export interface PropfindResult { - node: Resource + resource: Resource children?: Resource[] } diff --git a/packages/web-client/src/webdav/getFileInfo.ts b/packages/web-client/src/webdav/getFileInfo.ts index a465a670098..53712b76cbe 100644 --- a/packages/web-client/src/webdav/getFileInfo.ts +++ b/packages/web-client/src/webdav/getFileInfo.ts @@ -17,7 +17,7 @@ export const GetFileInfoFactory = ( depth: 0, ...options }) - ).node + ).resource } } } diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 601e5f56b22..6e197cc0379 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -45,12 +45,12 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (!path) { const [rootFolder, ...children] = webDavResources return { - node: buildPublicSpaceResource(rootFolder), + resource: buildPublicSpaceResource(rootFolder), children: children.map(buildResource) } as PropfindResult } const resources = webDavResources.map(buildResource) - return { node: resources[0], children: resources.slice(1) } as PropfindResult + return { resource: resources[0], children: resources.slice(1) } as PropfindResult } const listFilesCorrectedPath = async () => { @@ -68,7 +68,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (fileId && fileId !== resources[0].fileId) { return listFilesCorrectedPath() } - return { node: resources[0], children: resources.slice(1) } as PropfindResult + return { resource: resources[0], children: resources.slice(1) } as PropfindResult } catch (e) { if (e.statusCode === 404 && fileId) { return listFilesCorrectedPath() From 6da0ada77b1a3fadfbef84b3c3c7d5d5ba62a836 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 27 Oct 2022 10:28:00 +0200 Subject: [PATCH 05/11] Rename listFiles to propfind --- packages/web-app-files/src/services/folder/loaderSpace.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index 5c7f386ede2..ca9f0408b2f 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -53,9 +53,9 @@ export class FolderLoaderSpace implements FolderLoader { try { store.commit('Files/CLEAR_CURRENT_FILES_LIST') - const listFilesResult = yield webdav.listFiles(space, { path, fileId }) - const resources = listFilesResult.children - let currentFolder = listFilesResult.resource + const propfindResult = yield webdav.listFiles(space, { path, fileId }) + const resources = propfindResult.children + let currentFolder = propfindResult.resource replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { From a3cce714537e913084b244b6dfee304877ca8d80 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 2 Nov 2022 11:41:37 +0100 Subject: [PATCH 06/11] Fix PR issue --- .../unit/helpers/resource/resourcesTransfer.spec.ts | 4 ++-- packages/web-client/src/helpers/space/types.ts | 2 +- packages/web-client/src/webdav/listFiles.ts | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index bc96e54c41a..5ca70737831 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -6,7 +6,7 @@ import { resolveFileNameDuplicate } from '../../../../src/helpers/resource' import { mockDeep, mockReset } from 'jest-mock-extended' -import { buildSpace, PropfindResult, Resource } from 'web-client/src/helpers' +import { buildSpace, ListFilesResult, Resource } from 'web-client/src/helpers' const clientServiceMock = mockDeep() let resourcesToMove @@ -77,7 +77,7 @@ describe('resourcesTransfer', () => { const propfindResult = { resource: {} as Resource, children: [] as Resource[] - } as PropfindResult + } as ListFilesResult clientServiceMock.webdav.listFiles.mockReturnValueOnce( new Promise((resolve) => resolve(propfindResult)) ) diff --git a/packages/web-client/src/helpers/space/types.ts b/packages/web-client/src/helpers/space/types.ts index a05e7cf07a2..a26f205d0b3 100644 --- a/packages/web-client/src/helpers/space/types.ts +++ b/packages/web-client/src/helpers/space/types.ts @@ -76,7 +76,7 @@ export const isPublicSpaceResource = (resource: Resource): resource is PublicSpa return resource.driveType === 'public' } -export interface PropfindResult { +export interface ListFilesResult { resource: Resource children?: Resource[] } diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 6e197cc0379..7b053035621 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -3,7 +3,7 @@ import { DavProperties, DavProperty } from './constants' import { buildPublicSpaceResource, isPublicSpaceResource, - PropfindResult, + ListFilesResult, SpaceResource } from '../helpers' import { WebDavOptions } from './types' @@ -20,7 +20,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { space: SpaceResource, { path, fileId }: { path?: string; fileId?: string | number } = {}, { depth = 1, davProperties }: ListFilesOptions = {} - ): Promise { + ): Promise { let webDavResources: any[] if (isPublicSpaceResource(space)) { webDavResources = await sdk.publicFiles.list( @@ -47,10 +47,10 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { return { resource: buildPublicSpaceResource(rootFolder), children: children.map(buildResource) - } as PropfindResult + } as ListFilesResult } const resources = webDavResources.map(buildResource) - return { resource: resources[0], children: resources.slice(1) } as PropfindResult + return { resource: resources[0], children: resources.slice(1) } as ListFilesResult } const listFilesCorrectedPath = async () => { @@ -68,7 +68,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { if (fileId && fileId !== resources[0].fileId) { return listFilesCorrectedPath() } - return { resource: resources[0], children: resources.slice(1) } as PropfindResult + return { resource: resources[0], children: resources.slice(1) } as ListFilesResult } catch (e) { if (e.statusCode === 404 && fileId) { return listFilesCorrectedPath() From 12349fe59277b5232fd5ffcc354d90f1d9b7ffa0 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 2 Nov 2022 12:38:49 +0100 Subject: [PATCH 07/11] Fix PR issues --- packages/web-app-files/src/services/folder/loaderSpace.ts | 6 +++--- .../tests/unit/helpers/resource/resourcesTransfer.spec.ts | 7 ++++--- packages/web-client/src/helpers/space/types.ts | 5 ----- packages/web-client/src/webdav/listFiles.ts | 7 +++++-- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index ca9f0408b2f..5c7f386ede2 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -53,9 +53,9 @@ export class FolderLoaderSpace implements FolderLoader { try { store.commit('Files/CLEAR_CURRENT_FILES_LIST') - const propfindResult = yield webdav.listFiles(space, { path, fileId }) - const resources = propfindResult.children - let currentFolder = propfindResult.resource + const listFilesResult = yield webdav.listFiles(space, { path, fileId }) + const resources = listFilesResult.children + let currentFolder = listFilesResult.resource replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index 5ca70737831..1a98d9f427a 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -6,7 +6,8 @@ import { resolveFileNameDuplicate } from '../../../../src/helpers/resource' import { mockDeep, mockReset } from 'jest-mock-extended' -import { buildSpace, ListFilesResult, Resource } from 'web-client/src/helpers' +import { buildSpace, Resource } from 'web-client/src/helpers' +import { ListFilesResult } from 'web-client/src/webdav/listFiles' const clientServiceMock = mockDeep() let resourcesToMove @@ -74,12 +75,12 @@ describe('resourcesTransfer', () => { it.each([TransferType.COPY, TransferType.MOVE])( 'should copy / move files without renaming them if no conflicts exist', async (action: TransferType) => { - const propfindResult = { + const listFilesResult = { resource: {} as Resource, children: [] as Resource[] } as ListFilesResult clientServiceMock.webdav.listFiles.mockReturnValueOnce( - new Promise((resolve) => resolve(propfindResult)) + new Promise((resolve) => resolve(listFilesResult)) ) const resourcesTransfer = new ResourceTransfer( sourceSpace, diff --git a/packages/web-client/src/helpers/space/types.ts b/packages/web-client/src/helpers/space/types.ts index a26f205d0b3..7034755e131 100644 --- a/packages/web-client/src/helpers/space/types.ts +++ b/packages/web-client/src/helpers/space/types.ts @@ -75,8 +75,3 @@ export interface PublicSpaceResource extends SpaceResource { export const isPublicSpaceResource = (resource: Resource): resource is PublicSpaceResource => { return resource.driveType === 'public' } - -export interface ListFilesResult { - resource: Resource - children?: Resource[] -} diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 7b053035621..09aced8b679 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -1,9 +1,8 @@ -import { buildResource } from '../helpers/resource' +import { buildResource, Resource } from '../helpers/resource' import { DavProperties, DavProperty } from './constants' import { buildPublicSpaceResource, isPublicSpaceResource, - ListFilesResult, SpaceResource } from '../helpers' import { WebDavOptions } from './types' @@ -78,3 +77,7 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { } } } +export interface ListFilesResult { + resource: Resource + children?: Resource[] +} \ No newline at end of file From aa6d8b01308157f7637cdf53b2c4f455df34e883 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 2 Nov 2022 12:55:59 +0100 Subject: [PATCH 08/11] Fix e2e mediaviewer --- .../src/composables/appDefaults/useAppFolderHandling.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts index ee6c742a897..77cd1aa787e 100644 --- a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts +++ b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts @@ -63,11 +63,10 @@ export function useAppFolderHandling({ }) const path = dirname(pathResource.path) - const resources = ( - await webdav.listFiles(space, { - path - }) - ).children + const listFilesResult = await webdav.listFiles(space, { + path + }) + const resources = [listFilesResult.resource, ...listFilesResult.children] if (resources[0].type === 'file') { store.commit('Files/LOAD_FILES', { From 5677c44cfeec359e899e6448167a56e8cd80a61f Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Wed, 2 Nov 2022 13:04:08 +0100 Subject: [PATCH 09/11] Make linter happy --- packages/web-client/src/webdav/listFiles.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/web-client/src/webdav/listFiles.ts b/packages/web-client/src/webdav/listFiles.ts index 09aced8b679..6c4025089a7 100644 --- a/packages/web-client/src/webdav/listFiles.ts +++ b/packages/web-client/src/webdav/listFiles.ts @@ -1,10 +1,6 @@ import { buildResource, Resource } from '../helpers/resource' import { DavProperties, DavProperty } from './constants' -import { - buildPublicSpaceResource, - isPublicSpaceResource, - SpaceResource -} from '../helpers' +import { buildPublicSpaceResource, isPublicSpaceResource, SpaceResource } from '../helpers' import { WebDavOptions } from './types' import { urlJoin } from '../utils' @@ -80,4 +76,4 @@ export const ListFilesFactory = ({ sdk }: WebDavOptions) => { export interface ListFilesResult { resource: Resource children?: Resource[] -} \ No newline at end of file +} From 2af230873cd6810230042e649200fa68037bbe35 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 3 Nov 2022 10:03:48 +0100 Subject: [PATCH 10/11] Address PR issues --- packages/web-app-files/src/services/folder/loaderSpace.ts | 7 ++++--- .../tests/unit/helpers/resource/resourcesTransfer.spec.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/web-app-files/src/services/folder/loaderSpace.ts b/packages/web-app-files/src/services/folder/loaderSpace.ts index 5c7f386ede2..79d600d145b 100644 --- a/packages/web-app-files/src/services/folder/loaderSpace.ts +++ b/packages/web-app-files/src/services/folder/loaderSpace.ts @@ -53,9 +53,10 @@ export class FolderLoaderSpace implements FolderLoader { try { store.commit('Files/CLEAR_CURRENT_FILES_LIST') - const listFilesResult = yield webdav.listFiles(space, { path, fileId }) - const resources = listFilesResult.children - let currentFolder = listFilesResult.resource + let { resource: currentFolder, children: resources } = yield webdav.listFiles(space, { + path, + fileId + }) replaceInvalidFileRoute({ space, resource: currentFolder, path, fileId }) if (path === '/') { diff --git a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts index 1a98d9f427a..14db9ef0833 100644 --- a/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts +++ b/packages/web-app-files/tests/unit/helpers/resource/resourcesTransfer.spec.ts @@ -75,10 +75,10 @@ describe('resourcesTransfer', () => { it.each([TransferType.COPY, TransferType.MOVE])( 'should copy / move files without renaming them if no conflicts exist', async (action: TransferType) => { - const listFilesResult = { + const listFilesResult: ListFilesResult = { resource: {} as Resource, - children: [] as Resource[] - } as ListFilesResult + children: [] + } clientServiceMock.webdav.listFiles.mockReturnValueOnce( new Promise((resolve) => resolve(listFilesResult)) ) From 62d169e618e26d4a277bebb0b02ae641c68cd5de Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Thu, 3 Nov 2022 12:11:42 +0100 Subject: [PATCH 11/11] refactor: use resource and children from listFiles in app defaults --- .../appDefaults/useAppFolderHandling.ts | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts index 77cd1aa787e..785495b1b1b 100644 --- a/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts +++ b/packages/web-pkg/src/composables/appDefaults/useAppFolderHandling.ts @@ -1,17 +1,12 @@ import { Store } from 'vuex' import { computed, Ref, ref, unref } from '@vue/composition-api' import { dirname } from 'path' - -import { ClientService } from '../../services' -import { MaybeRef } from '../../utils' - +import { ClientService, MaybeRef, useAppFileHandling } from 'web-pkg' import { Resource } from 'web-client' - import { FileContext } from './types' import { Route } from 'vue-router' -import { useAppFileHandling } from './useAppFileHandling' import { useFileRouteReplace } from '../router/useFileRouteReplace' -import { DavProperty } from '../../../../web-client/src/webdav/constants' +import { DavProperty } from 'web-client/src/webdav/constants' import { useAuthService } from '../authContext/useAuthService' interface AppFolderHandlingOptions { @@ -63,20 +58,19 @@ export function useAppFolderHandling({ }) const path = dirname(pathResource.path) - const listFilesResult = await webdav.listFiles(space, { + const { resource, children } = await webdav.listFiles(space, { path }) - const resources = [listFilesResult.resource, ...listFilesResult.children] - if (resources[0].type === 'file') { + if (resource.type === 'file') { store.commit('Files/LOAD_FILES', { - currentFolder: resources[0], - files: [resources[0]] + currentFolder: resource, + files: [resource] }) } else { store.commit('Files/LOAD_FILES', { - currentFolder: resources[0], - files: resources.slice(1) + currentFolder: resource, + files: children }) } } catch (error) {