diff --git a/src/components/experiment-files-viewer/experiment-files-viewer.js b/src/components/experiment-files-viewer/experiment-files-viewer.js index 70edb6b5c775c13678ee2fd94041d3c6ea0b034c..8687613a01e0dc75b33d55def4448a1e77890d7e 100644 --- a/src/components/experiment-files-viewer/experiment-files-viewer.js +++ b/src/components/experiment-files-viewer/experiment-files-viewer.js @@ -184,7 +184,7 @@ export default class ExperimentFilesViewer extends React.Component { </button> <button className='nrp-btn' disabled={!experimentServerFiles - || !RemoteExperimentFilesService.instance.mapLocalFiles.has(experiment.uuid)} + || !RemoteExperimentFilesService.instance.mapFileInfos.has(experiment.uuid)} onClick={() => { RemoteExperimentFilesService.instance.uploadExperimentFromLocalFS(experiment); }} @@ -219,7 +219,7 @@ export default class ExperimentFilesViewer extends React.Component { <button className='nrp-btn' title='Delete selected' disabled={!this.state.selectedFilepaths || this.state.selectedFilepaths.length === 0} onClick={() => - RemoteExperimentFilesService.instance.uploadExperimentFileList(this.state.selectedFilepaths)}> + RemoteExperimentFilesService.instance.deleteExperimentFileList(this.state.selectedFilepaths)}> <FaTrash /> </button> </div> diff --git a/src/services/experiments/files/remote-experiment-files-service.js b/src/services/experiments/files/remote-experiment-files-service.js index 298d10e3352ba53a72bff3ef640aadb8f9947124..c9625dfd3e824321a419847c877322edb857708e 100644 --- a/src/services/experiments/files/remote-experiment-files-service.js +++ b/src/services/experiments/files/remote-experiment-files-service.js @@ -68,14 +68,9 @@ class RemoteExperimentFilesService extends HttpService { await this.updateFileInfos(); this.saveLocalFileInfoToLocalStorage(); - - //console.info(this.mapServerFiles); - //console.info(this.mapFileInfos); } async updateLocalFiles() { - //console.info('updateLocalFiles'); - //let updatedLocalFiles = new Map(); let updatedFilePaths = []; await this.traverseFilesystem(this.localSyncDirectoryHandle, @@ -93,8 +88,6 @@ class RemoteExperimentFilesService extends HttpService { this.mapLocalFiles.delete(relativePath); } } - - //this.mapLocalFiles = updatedLocalFiles; } /** @@ -127,7 +120,6 @@ class RemoteExperimentFilesService extends HttpService { } async getOrCreateLocalFile(relativePath, type, fileSystemHandle = undefined) { - //console.info('getOrCreateLocalFile() - ' + relativePath); if (!relativePath || relativePath.length === 0) { return; } @@ -157,8 +149,6 @@ class RemoteExperimentFilesService extends HttpService { parentDirectory = await this.getOrCreateLocalFile(parentDirectoryPath, FS_TYPE_DIRECTORY); } let parentDirectoryHandle = parentDirectory ? parentDirectory.fileSystemHandle : this.localSyncDirectoryHandle; - //console.info('getOrCreateLocalFile: ' + relativePath + ' - ' + type + ', parentDirectoryHandle:'); - //console.info(parentDirectoryHandle); if (type === FS_TYPE_FILE) { localFile.fileSystemHandle = await parentDirectoryHandle.getFileHandle(fileName, {create: true}); @@ -172,7 +162,6 @@ class RemoteExperimentFilesService extends HttpService { } async updateServerFiles(forceUpdate = false) { - //console.info('updateServerFiles'); let newServerFilesMap = new Map(); let getServerDirectoryFiles = async (parentDirectory) => { @@ -212,7 +201,6 @@ class RemoteExperimentFilesService extends HttpService { } async updateFileInfos() { - //console.info('updateFileInfos'); for (let keyValueEntry of this.mapFileInfos) { const relativePath = keyValueEntry[0]; let fileInfo = keyValueEntry[1]; @@ -252,7 +240,6 @@ class RemoteExperimentFilesService extends HttpService { } getOrCreateFileInfo(relativePath, type) { - //console.info('addOrCreateFileInfo() - ' + relativePath + ', ' + type); let fileName = this.getFileNameFromRelativePath(relativePath); if (fileName.charAt(0) === '.' || fileName.includes('.crswap')) { return; @@ -332,9 +319,7 @@ class RemoteExperimentFilesService extends HttpService { } async downloadExperimentFile(relativeFilepath) { - //console.info('downloadExperimentFile: ' + relativeFilepath); let localFile = await this.getOrCreateLocalFile(relativeFilepath, FS_TYPE_FILE); - //console.info(localFile); let fileInfo = this.mapFileInfos.get(relativeFilepath); let parentDirectoryPath = this.getParentDirectoryFromRelativePath(relativeFilepath); @@ -395,7 +380,7 @@ class RemoteExperimentFilesService extends HttpService { fileInfo.msgError = 'Won\'t upload - file version on server is newer!'; } else { - let fileHandle = localFile.fileSystemHandle; + let fileHandle = localFile && localFile.fileSystemHandle; if (!fileHandle) { console.warn('Could not upload ' + relativePath + ' - missing file handle.'); return; @@ -423,8 +408,15 @@ class RemoteExperimentFilesService extends HttpService { uploadExperimentFromLocalFS(experiment) { let uploadFolder = async (folder) => { for (let file of folder.children) { - if (file.fileSystemHandle.kind === FS_TYPE_FILE) { - await this.uploadExperimentFile(this.getRelativePathFromFSHandle(file.fileSystemHandle)); + /*let localFile = this.mapLocalFiles.get(file.relativePath); + if (localFile && localFile.fileSystemHandle && localFile.fileSystemHandle.kind === FS_TYPE_FILE) { + await this.uploadExperimentFile(this.getRelativePathFromFSHandle(localFile.fileSystemHandle)); + } + else if (localFile && localFile.fileSystemHandle && localFile.type === FS_TYPE_DIRECTORY) { + uploadFolder(file); + }*/ + if (file.type === FS_TYPE_FILE) { + await this.uploadExperimentFile(file.relativePath); } else if (file.type === FS_TYPE_DIRECTORY) { uploadFolder(file); @@ -432,10 +424,26 @@ class RemoteExperimentFilesService extends HttpService { } }; - let localExperimentFiles = this.mapLocalFiles.get(experiment.uuid); + let localExperimentFiles = this.mapFileInfos.get(experiment.uuid); uploadFolder(localExperimentFiles); } + deleteExperimentFile(relativePath) { + let experimentName = this.getExperimentNameFromRelativePath(relativePath); + let serverFile = this.mapServerFiles.get(relativePath); + ExperimentStorageService.instance.deleteEntity(experimentName, relativePath, true, serverFile.type); + } + + deleteExperimentFileList(fileList) { + for (const relativePath of fileList) { + this.deleteExperimentFile(relativePath); + } + } + + getExperimentNameFromRelativePath(relativePath) { + return relativePath.substring(0, relativePath.indexOf('/')); + } + getFileNameFromRelativePath(relativePath) { return relativePath.substring(relativePath.lastIndexOf('/') + 1); }