From: Michal Klobukowski Date: Mon, 13 Aug 2018 07:19:20 +0000 (+0200) Subject: Merge changes from webdav-service X-Git-Tag: 1.3.0~153^2~10 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/c4e503180948300c3a6ef99e338d2e56b2931236 Merge changes from webdav-service Feature #13990 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- c4e503180948300c3a6ef99e338d2e56b2931236 diff --cc src/services/collection-service/collection-service.ts index 32eeac4f,4d750362..47268255 --- a/src/services/collection-service/collection-service.ts +++ b/src/services/collection-service/collection-service.ts @@@ -21,52 -19,6 +21,52 @@@ export class CollectionService extends super(serverApi, "collections"); } + async files(uuid: string) { + const request = await this.webdavClient.propfind(`/c=${uuid}`); + if (request.responseXML != null) { + return createCollectionFilesTree(this.extractFilesData(request.responseXML)); + } + return Promise.reject(); + } + + async deleteFile(collectionUuid: string, filePath: string){ + return this.webdavClient.delete(`/c=${collectionUuid}${filePath}`); + } + + + extractFilesData(document: Document) { + return Array + .from(document.getElementsByTagName('D:response')) + .slice(1) + .map(element => { + const [displayNameElement] = Array.from(element.getElementsByTagName('D:displayname')); + const name = displayNameElement ? displayNameElement.innerHTML : undefined; + + const [sizeElement] = Array.from(element.getElementsByTagName('D:getcontentlength')); + const size = sizeElement ? parseInt(sizeElement.innerHTML, 10) : 0; + + const [hrefElement] = Array.from(element.getElementsByTagName('D:href')); + const pathname = hrefElement ? hrefElement.innerHTML : undefined; + const directory = pathname && pathname.replace(/\/c=[0-9a-zA-Z\-]*/, '').replace(`/${name || ''}`, ''); + - const href = this.webdavClient.defaults.baseUrl + pathname + '?api_token=' + this.authService.getApiToken(); ++ const href = this.webdavClient.defaults.baseURL + pathname + '?api_token=' + this.authService.getApiToken(); + + const data = { + url: href, + id: `${directory}/${name}`, + name, + path: directory, + }; + + const [resourceTypeElement] = Array.from(element.getElementsByTagName('D:resourcetype')); + return resourceTypeElement && resourceTypeElement.innerHTML === '' + ? createCollectionFile({ ...data, size }) + : createCollectionDirectory(data); + + }); + } + + private readFile(file: File): Promise { return new Promise(resolve => { const reader = new FileReader();