X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/9438812a13875c06996ed7190f8faf21011910bd..dd89200ad6fdbfa337fdbab5f54def8712c6746c:/src/services/collection-files-service/collection-files-service.ts diff --git a/src/services/collection-files-service/collection-files-service.ts b/src/services/collection-files-service/collection-files-service.ts index 96c9e990..1d9a537f 100644 --- a/src/services/collection-files-service/collection-files-service.ts +++ b/src/services/collection-files-service/collection-files-service.ts @@ -3,11 +3,13 @@ // SPDX-License-Identifier: AGPL-3.0 import { CollectionService } from "../collection-service/collection-service"; -import { parseKeepManifestText } from "./collection-manifest-parser"; +import { parseKeepManifestText, stringifyKeepManifest } from "./collection-manifest-parser"; import { mapManifestToCollectionFilesTree } from "./collection-manifest-mapper"; +import { CommonResourceService } from "~/common/api/common-resource-service"; +import * as _ from "lodash"; export class CollectionFilesService { - + constructor(private collectionService: CollectionService) { } getFiles(collectionUuid: string) { @@ -22,4 +24,45 @@ export class CollectionFilesService { ); } -} \ No newline at end of file + async renameFile(collectionUuid: string, file: { name: string, path: string }, newName: string) { + const collection = await this.collectionService.get(collectionUuid); + const manifest = parseKeepManifestText(collection.manifestText); + const updatedManifest = manifest.map( + stream => stream.name === file.path + ? { + ...stream, + files: stream.files.map( + f => f.name === file.name + ? { ...f, name: newName } + : f + ) + } + : stream + ); + const manifestText = stringifyKeepManifest(updatedManifest); + const data = { ...collection, manifestText }; + return this.collectionService.update(collectionUuid, CommonResourceService.mapKeys(_.snakeCase)(data)); + } + + async deleteFile(collectionUuid: string, file: { name: string, path: string }) { + const collection = await this.collectionService.get(collectionUuid); + const manifest = parseKeepManifestText(collection.manifestText); + const updatedManifest = manifest.map(stream => + stream.name === file.path + ? { + ...stream, + files: stream.files.filter(f => f.name !== file.name) + } + : stream + ); + const manifestText = stringifyKeepManifest(updatedManifest); + return this.collectionService.update(collectionUuid, { manifestText }); + } + + renameTest() { + const u = this.renameFile('qr1hi-4zz18-n0sx074erl4p0ph', { + name: 'extracted2.txt.png', + path: '' + }, 'extracted-new.txt.png'); + } +}