return zipfs.loadAsync(this.file).then(() => { const filenames = [], p = [] let validFile = true zipfs.forEach(filename => filenames.push(filename)) TEXT_FILENAMES.forEach(filename => { if (filenames.indexOf(filename) === -1) { validFile = false } }) if (!validFile) { this.statusText = gettext('The uploaded file does not appear to be a Fidus Writer file.') return } filenames.forEach(filename => { p.push(new Promise(resolve => { let fileType, fileList if (TEXT_FILENAMES.indexOf(filename) !== -1) { fileType = 'string' fileList = this.textFiles } else { fileType = 'blob' fileList = this.otherFiles } zipfs.files[filename].async(fileType).then(contents => { fileList.push({filename, contents}) resolve() }) })) }) return Promise.all(p).then(() => this.processFidusFile()) })
async parseZipFiles() { let paths = []; let queue = []; this.zip.forEach((path, file) => { if (!file.dir) { paths.push(path); queue.push(file.async('arraybuffer')); } }); const data = await Promise.all(queue); for (let i = 0; i < data.length; i++) { let path = paths[i]; let depth = path.split('/').length - 1; this.files[path] = { data: data[i], type: URLs.extensionForURL(path), depth }; } }