quicklook.unzip.js
66 lines
| 1 | var type = self.data.type, |
| 2 | bin = new Uint8Array(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 | |
| 48 | switch (type) { |
| 49 | case 'tar': |
| 50 | self.res.files = tarFiles(bin); |
| 51 | break; |
| 52 | case 'zip': |
| 53 | self.res.files = unzipFiles.call(new Zlib.Unzip(bin)); |
| 54 | break; |
| 55 | case 'gzip': |
| 56 | self.res.files = tarFiles(new Zlib.Gunzip(bin).decompress()); |
| 57 | break; |
| 58 | case 'bzip2': |
| 59 | self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(bin))); |
| 60 | break; |
| 61 | default: |
| 62 | |
| 63 | break; |
| 64 | } |
| 65 | |
| 66 |