+ }
+ await this.update(collectionUuid, { preserveVersion: true });
+ }
+
+ async uploadFiles(collectionUuid: string, files: File[], onProgress?: UploadProgress, targetLocation: string = '') {
+ if (collectionUuid === "" || files.length === 0) { return; }
+ // files have to be uploaded sequentially
+ for (let idx = 0; idx < files.length; idx++) {
+ await this.uploadFile(collectionUuid, files[idx], idx, onProgress, targetLocation);
+ }
+ await this.update(collectionUuid, { preserveVersion: true });
+ }
+
+ async moveFile(collectionUuid: string, oldPath: string, newPath: string) {
+ await this.webdavClient.move(
+ `c=${collectionUuid}${oldPath}`,
+ `c=${collectionUuid}/${customEncodeURI(newPath)}`
+ );
+ await this.update(collectionUuid, { preserveVersion: true });
+ }
+
+ extendFileURL = (file: CollectionDirectory | CollectionFile) => {
+ const baseUrl = this.webdavClient.getBaseUrl().endsWith('/')
+ ? this.webdavClient.getBaseUrl().slice(0, -1)
+ : this.webdavClient.getBaseUrl();
+ const apiToken = this.authService.getApiToken();
+ const encodedApiToken = apiToken ? encodeURI(apiToken) : '';
+ const userApiToken = `/t=${encodedApiToken}/`;
+ const splittedPrevFileUrl = file.url.split('/');
+ const url = `${baseUrl}/${splittedPrevFileUrl[1]}${userApiToken}${splittedPrevFileUrl.slice(2).join('/')}`;
+ return {
+ ...file,
+ url
+ };
+ }
+
+ async getFileContents(file: CollectionFile) {
+ return (await this.webdavClient.get(`c=${file.id}`)).response;
+ }
+
+ private async uploadFile(collectionUuid: string, file: File, fileId: number, onProgress: UploadProgress = () => { return; }, targetLocation: string = '') {
+ const fileURL = `c=${targetLocation !== '' ? targetLocation : collectionUuid}/${file.name}`.replace('//', '/');
+ const requestConfig = {
+ headers: {
+ 'Content-Type': 'text/octet-stream'
+ },
+ onUploadProgress: (e: ProgressEvent) => {
+ onProgress(fileId, e.loaded, e.total, Date.now());
+ },
+ };
+ return this.webdavClient.upload(fileURL, [file], requestConfig);