Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 2x 1x 1x 3x 3x 1x 2x 3x 3x 2x 3x 3x 2x 2x 2x 2x 2x 2x | // tslint:disable-next-line:no-var-requires const debug = require("debug").debug("GetFilesRecursivelyCommand"); import Client, { File, Folder, FolderGetFilesOptions } from "../client"; import Command, { CommandStatus } from "./command"; export interface GetFilesRecursivelyCommandOptions { /** * the source nextcloud folder to start listing the files */ sourceFolder: Folder; /** * function to filter files */ filterFile?: (file: File) => File | null; } /** * Command to get all files of a nextcloud folder recursively */ export default class GetFilesRecursivelyCommand extends Command { private sourceFolder: Folder; private filterFile?: (file: File) => File | null; private files: File[]; /** * @param {Client} client the client * @param {SourceTargetFileNames[]} files the files to be uploaded * @param {(file: File) => void} processAfterUpload callback function to process the uploaded file */ constructor(client: Client, options: GetFilesRecursivelyCommandOptions) { super(client); this.sourceFolder = options.sourceFolder; this.filterFile = options.filterFile; this.files = []; } /** * execute the command * @async * @returns {Promise<void>} */ protected async onExecute(): Promise<void> { this.status = CommandStatus.running; const startTime = new Date(); try { this.percentCompleted = 0; await this.processFolder(this.sourceFolder, 100); // console.log("file count", this.files.length); this.resultMetaData.messages.push(`${this.files.length} files found`); } catch (e) { debug(e.message); this.resultMetaData.errors.push(e.message); } this.percentCompleted = 100; if (this.resultMetaData.errors.length > 0) { this.status = CommandStatus.failed; } else { this.status = CommandStatus.success; } this.resultMetaData.timeElapsed = new Date().getTime() - startTime.getTime(); return; }; public getFiles(): File[] { return this.files; } /** * adds files of folder and processes subordinated folders * @param {Folder} folder the folder to process * @param {number} percentagethe percentage that is finished, when the function returns */ private async processFolder(folder: Folder, percentage: number): Promise<void> { // tslint:disable-next-line:no-console // console.log(folder.name); const options: FolderGetFilesOptions = { filterFile: this.filterFile } const folderFiles: File[] = await folder.getFiles(options); for (const fi of folderFiles) { this.files.push(fi); } const subFolders: Folder[] = await folder.getSubFolders(); Eif (subFolders.length === 0) { this.percentCompleted += percentage; } for (const subFolder of subFolders) { // console.log("folder", subFolder.name); await this.processFolder(subFolder, percentage / subFolders.length); } return; } } |