[ARVADOS-WORKBENCH2] updated: 1.1.4-578-g07dbade
Git user
git at public.curoverse.com
Fri Aug 10 03:19:16 EDT 2018
Summary of changes:
src/index.tsx | 1 -
src/models/collection-file.ts | 19 +++++++++++++++-
.../collection-service/collection-service.ts | 25 ++++++++++++----------
.../collection-panel/collection-panel-action.ts | 3 +--
4 files changed, 33 insertions(+), 15 deletions(-)
via 07dbadec1906eed46de8ecd89113a434d8340322 (commit)
from 571f9757f7bce4b151921368b4a4d4e97d22d055 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 07dbadec1906eed46de8ecd89113a434d8340322
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date: Fri Aug 10 09:18:56 2018 +0200
Use webdav to retrieve list of files
Feature #13990
Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
diff --git a/src/index.tsx b/src/index.tsx
index 49cb064..1296748 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -43,7 +43,6 @@ fetchConfig()
store.dispatch(initAuth());
store.dispatch(getProjectList(services.authService.getUuid()));
- console.log(services.webdavClient);
const TokenComponent = (props: any) => <ApiToken authService={services.authService} {...props}/>;
const WorkbenchComponent = (props: any) => <Workbench authService={services.authService} {...props}/>;
diff --git a/src/models/collection-file.ts b/src/models/collection-file.ts
index a4b656c..d74ada6 100644
--- a/src/models/collection-file.ts
+++ b/src/models/collection-file.ts
@@ -2,7 +2,7 @@
//
// SPDX-License-Identifier: AGPL-3.0
-import { Tree } from './tree';
+import { Tree, createTree, setNode } from './tree';
export type CollectionFilesTree = Tree<CollectionDirectory | CollectionFile>;
@@ -13,6 +13,7 @@ export enum CollectionFileType {
export interface CollectionDirectory {
path: string;
+ url: string;
id: string;
name: string;
type: CollectionFileType.DIRECTORY;
@@ -20,6 +21,7 @@ export interface CollectionDirectory {
export interface CollectionFile {
path: string;
+ url: string;
id: string;
name: string;
size: number;
@@ -34,6 +36,7 @@ export const createCollectionDirectory = (data: Partial<CollectionDirectory>): C
id: '',
name: '',
path: '',
+ url: '',
type: CollectionFileType.DIRECTORY,
...data
});
@@ -42,7 +45,21 @@ export const createCollectionFile = (data: Partial<CollectionFile>): CollectionF
id: '',
name: '',
path: '',
+ url: '',
size: 0,
type: CollectionFileType.FILE,
...data
});
+
+export const createCollectionFilesTree = (data: Array<CollectionDirectory | CollectionFile>) => {
+ const directories = data.filter(item => item.type === CollectionFileType.DIRECTORY);
+ directories.sort((a, b) => a.path.localeCompare(b.path));
+ const files = data.filter(item => item.type === CollectionFileType.FILE);
+ return [...directories, ...files]
+ .reduce((tree, item) => setNode({
+ children: [],
+ id: item.id,
+ parent: item.path,
+ value: item
+ })(tree), createTree<CollectionDirectory | CollectionFile>());
+};
\ No newline at end of file
diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts
index c97307e..c23cb1e 100644
--- a/src/services/collection-service/collection-service.ts
+++ b/src/services/collection-service/collection-service.ts
@@ -7,7 +7,7 @@ import { CollectionResource } from "../../models/collection";
import axios, { AxiosInstance } from "axios";
import { KeepService } from "../keep-service/keep-service";
import { FilterBuilder } from "../../common/api/filter-builder";
-import { CollectionFile, createCollectionFile } from "../../models/collection-file";
+import { CollectionFile, createCollectionFile, createCollectionDirectory, createCollectionFilesTree } from "../../models/collection-file";
import { parseKeepManifestText, stringifyKeepManifest } from "../collection-files-service/collection-manifest-parser";
import * as _ from "lodash";
import { KeepManifestStream } from "../../models/keep-manifest";
@@ -24,7 +24,7 @@ export class CollectionService extends CommonResourceService<CollectionResource>
async files(uuid: string) {
const request = await this.webdavClient.propfind(`/c=${uuid}`);
if (request.responseXML != null) {
- return this.extractFilesData(request.responseXML);
+ return createCollectionFilesTree(this.extractFilesData(request.responseXML));
}
return Promise.reject();
}
@@ -32,16 +32,13 @@ export class CollectionService extends CommonResourceService<CollectionResource>
extractFilesData(document: Document) {
return Array
.from(document.getElementsByTagName('D:response'))
- .filter(element => {
- const [resourceTypeElement] = Array.from(element.getElementsByTagName('D:resourcetype'));
- return resourceTypeElement && resourceTypeElement.innerHTML === '';
- })
+ .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 ? sizeElement.innerHTML : undefined;
+ const size = sizeElement ? parseInt(sizeElement.innerHTML, 10) : 0;
const [hrefElement] = Array.from(element.getElementsByTagName('D:href'));
const pathname = hrefElement ? hrefElement.innerHTML : undefined;
@@ -49,16 +46,22 @@ export class CollectionService extends CommonResourceService<CollectionResource>
const href = this.webdavClient.defaults.baseUrl + pathname + '?api_token=' + this.authService.getApiToken();
- return {
- directory,
- href,
+ const data = {
+ url: href,
+ id: `${directory}/${name}`,
name,
- size,
+ path: directory,
};
+ const [resourceTypeElement] = Array.from(element.getElementsByTagName('D:resourcetype'));
+ return resourceTypeElement && resourceTypeElement.innerHTML === ''
+ ? createCollectionFile({ ...data, size })
+ : createCollectionDirectory(data);
+
});
}
+
private readFile(file: File): Promise<ArrayBuffer> {
return new Promise<ArrayBuffer>(resolve => {
const reader = new FileReader();
diff --git a/src/store/collection-panel/collection-panel-action.ts b/src/store/collection-panel/collection-panel-action.ts
index 5fe09fb..e1b3a37 100644
--- a/src/store/collection-panel/collection-panel-action.ts
+++ b/src/store/collection-panel/collection-panel-action.ts
@@ -36,8 +36,7 @@ export const loadCollection = (uuid: string, kind: ResourceKind) =>
.get(uuid)
.then(item => {
dispatch(collectionPanelActions.LOAD_COLLECTION_SUCCESS({ item }));
- services.collectionService.files(item.uuid).then(console.log);
- return services.collectionFilesService.getFiles(item.uuid);
+ return services.collectionService.files(item.uuid);
})
.then(files => {
dispatch(collectionPanelFilesAction.SET_COLLECTION_FILES(files));
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list