[ARVADOS-WORKBENCH2] created: 1.2.0-605-g9e53e34
Git user
git at public.curoverse.com
Thu Oct 11 11:12:03 EDT 2018
at 9e53e34ec65cdd0934aa46465ff4ac758c013529 (commit)
commit 9e53e34ec65cdd0934aa46465ff4ac758c013529
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date: Thu Oct 11 17:11:39 2018 +0200
Make file ids unique, fix bad file download url
Feature #13862
Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
diff --git a/src/services/collection-service/collection-service-files-response.ts b/src/services/collection-service/collection-service-files-response.ts
index b8a7970..a4b527a 100644
--- a/src/services/collection-service/collection-service-files-response.ts
+++ b/src/services/collection-service/collection-service-files-response.ts
@@ -26,7 +26,7 @@ export const sortFilesTree = (tree: Tree<CollectionDirectory | CollectionFile>)
};
export const extractFilesData = (document: Document) => {
- const collectionUrlPrefix = /\/c=[0-9a-zA-Z\-]*/;
+ const collectionUrlPrefix = /\/c=([0-9a-zA-Z\-]*)/;
return Array
.from(document.getElementsByTagName('D:response'))
.slice(1) // omit first element which is collection itself
@@ -35,13 +35,20 @@ export const extractFilesData = (document: Document) => {
const size = parseInt(getTagValue(element, 'D:getcontentlength', '0'), 10);
const url = getTagValue(element, 'D:href', '');
const nameSuffix = `/${name || ''}`;
+ const collectionUuidMatch = collectionUrlPrefix.exec(url);
+ const collectionUuid = collectionUuidMatch ? collectionUuidMatch.pop() : '';
const directory = url
.replace(collectionUrlPrefix, '')
.replace(nameSuffix, '');
+
const data = {
url,
- id: `${directory}/${name}`,
+ id: [
+ collectionUuid ? collectionUuid : '',
+ directory ? '/' + directory : '',
+ '/' + name
+ ].join(''),
name,
path: directory,
};
@@ -52,3 +59,6 @@ export const extractFilesData = (document: Document) => {
});
};
+
+export const getFileFullPath = ({ name, path }: CollectionFile | CollectionDirectory) =>
+ `${path}/${name}`;
diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts
index 138f16a..00ba854 100644
--- a/src/services/collection-service/collection-service.ts
+++ b/src/services/collection-service/collection-service.ts
@@ -50,10 +50,15 @@ export class CollectionService extends TrashableResourceService<CollectionResour
);
}
- private extendFileURL = (file: CollectionDirectory | CollectionFile) => ({
- ...file,
- url: this.webdavClient.defaults.baseURL + file.url + '?api_token=' + this.authService.getApiToken()
- })
+ private extendFileURL = (file: CollectionDirectory | CollectionFile) => {
+ const baseUrl = this.webdavClient.defaults.baseURL.endsWith('/')
+ ? this.webdavClient.defaults.baseURL.slice(0, -1)
+ : this.webdavClient.defaults.baseURL;
+ return {
+ ...file,
+ url: baseUrl + file.url + '?api_token=' + this.authService.getApiToken()
+ };
+ }
private async uploadFile(collectionUuid: string, file: File, fileId: number, onProgress: UploadProgress = () => { return; }) {
const fileURL = `c=${collectionUuid}/${file.name}`;
diff --git a/src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts b/src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts
index 0460c97..99ab682 100644
--- a/src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts
+++ b/src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts
@@ -13,6 +13,7 @@ import { getNodeValue } from "~/models/tree";
import { filterCollectionFilesBySelection } from './collection-panel-files-state';
import { startSubmit, stopSubmit, reset } from 'redux-form';
import { getDialog } from "~/store/dialog/dialog-reducer";
+import { getFileFullPath } from "~/services/collection-service/collection-service-files-response";
export const collectionPanelFilesAction = unionize({
SET_COLLECTION_FILES: ofType<CollectionFilesTree>(),
@@ -43,7 +44,8 @@ export const removeCollectionFiles = (filePaths: string[]) =>
export const removeCollectionsSelectedFiles = () =>
(dispatch: Dispatch, getState: () => RootState) => {
- const paths = filterCollectionFilesBySelection(getState().collectionPanelFiles, true).map(file => file.id);
+ const paths = filterCollectionFilesBySelection(getState().collectionPanelFiles, true)
+ .map(getFileFullPath);
dispatch<any>(removeCollectionFiles(paths));
};
@@ -101,16 +103,19 @@ export const renameFile = (newName: string) =>
const dialog = getDialog<RenameFileDialogData>(getState().dialog, RENAME_FILE_DIALOG);
const currentCollection = getState().collectionPanel.item;
if (dialog && currentCollection) {
- dispatch(startSubmit(RENAME_FILE_DIALOG));
- const oldPath = dialog.data.id;
- const newPath = dialog.data.id.replace(dialog.data.name, newName);
- try {
- await services.collectionService.moveFile(currentCollection.uuid, oldPath, newPath);
- dispatch<any>(loadCollectionFiles(currentCollection.uuid));
- dispatch(dialogActions.CLOSE_DIALOG({ id: RENAME_FILE_DIALOG }));
- dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'File name changed.', hideDuration: 2000 }));
- } catch (e) {
- dispatch(stopSubmit(RENAME_FILE_DIALOG, { name: 'Could not rename the file' }));
+ const file = getNodeValue(dialog.data.id)(getState().collectionPanelFiles);
+ if (file) {
+ dispatch(startSubmit(RENAME_FILE_DIALOG));
+ const oldPath = getFileFullPath(file);
+ const newPath = getFileFullPath({ ...file, name: newName });
+ try {
+ await services.collectionService.moveFile(currentCollection.uuid, oldPath, newPath);
+ dispatch<any>(loadCollectionFiles(currentCollection.uuid));
+ dispatch(dialogActions.CLOSE_DIALOG({ id: RENAME_FILE_DIALOG }));
+ dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'File name changed.', hideDuration: 2000 }));
+ } catch (e) {
+ dispatch(stopSubmit(RENAME_FILE_DIALOG, { name: 'Could not rename the file' }));
+ }
}
}
};
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list