quicklook.unzip.js
56 lines
| 1 | var type = self.data.type, |
| 2 | bin = self.data.bin, |
| 3 | unzipFiles = function() { |
| 4 | /** @type {Array.<string>} */ |
| 5 | var filenameList = []; |
| 6 | /** @type {number} */ |
| 7 | var i; |
| 8 | /** @type {number} */ |
| 9 | var il; |
| 10 | /** @type {Array.<Zlib.Unzip.FileHeader>} */ |
| 11 | var fileHeaderList; |
| 12 | // need check this.Y when update cdns.zlibUnzip |
| 13 | this.Y(); |
| 14 | fileHeaderList = this.i; |
| 15 | for (i = 0, il = fileHeaderList.length; i < il; ++i) { |
| 16 | // need check fileHeaderList[i].J when update cdns.zlibUnzip |
| 17 | filenameList[i] = fileHeaderList[i].filename + (fileHeaderList[i].J? ' ({formatSize(' + fileHeaderList[i].J + ')})' : ''); |
| 18 | } |
| 19 | return filenameList; |
| 20 | }, |
| 21 | tarFiles = function(tar) { |
| 22 | var filenames = [], |
| 23 | tarlen = tar.length, |
| 24 | offset = 0, |
| 25 | toStr = function(arr) { |
| 26 | return String.fromCharCode.apply(null, arr).replace(/\0+$/, ''); |
| 27 | }, |
| 28 | h, name, prefix, size, dbs; |
| 29 | while (offset < tarlen && tar[offset] !== 0) { |
| 30 | h = tar.subarray(offset, offset + 512); |
| 31 | name = toStr(h.subarray(0, 100)); |
| 32 | if (prefix = toStr(h.subarray(345, 500))) { |
| 33 | name = prefix + name; |
| 34 | } |
| 35 | size = parseInt(toStr(h.subarray(124, 136)), 8); |
| 36 | dbs = Math.ceil(size / 512) * 512; |
| 37 | if (name === '././@LongLink') { |
| 38 | name = toStr(tar.subarray(offset + 512, offset + 512 + dbs)); |
| 39 | } |
| 40 | (name !== 'pax_global_header') && filenames.push(name + (size? ' ({formatSize(' + size + ')})': '')); |
| 41 | offset = offset + 512 + dbs; |
| 42 | } |
| 43 | return filenames; |
| 44 | }; |
| 45 | |
| 46 | self.res = {}; |
| 47 | if (type === 'tar') { |
| 48 | self.res.files = tarFiles(new Uint8Array(bin)); |
| 49 | } else if (type === 'zip') { |
| 50 | self.res.files = unzipFiles.call(new Zlib.Unzip(new Uint8Array(bin))); |
| 51 | } else if (type === 'gzip') { |
| 52 | self.res.files = tarFiles((new Zlib.Gunzip(new Uint8Array(bin))).decompress()); |
| 53 | } else if (type === 'bzip2') { |
| 54 | self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(new Uint8Array(bin)))); |
| 55 | } |
| 56 |