66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var type = self.data.type,
 | |
| 	bin = new Uint8Array(self.data.bin),
 | |
| 	unzipFiles = function() {
 | |
| 		/** @type {Array.<string>} */
 | |
| 		var filenameList = [];
 | |
| 		/** @type {number} */
 | |
| 		var i;
 | |
| 		/** @type {number} */
 | |
| 		var il;
 | |
| 		/** @type {Array.<Zlib.Unzip.FileHeader>} */
 | |
| 		var fileHeaderList;
 | |
| 		// need check this.Y when update cdns.zlibUnzip
 | |
| 		this.Y();
 | |
| 		fileHeaderList = this.i;
 | |
| 		for (i = 0, il = fileHeaderList.length; i < il; ++i) {
 | |
| 			// need check fileHeaderList[i].J when update cdns.zlibUnzip
 | |
| 			filenameList[i] = fileHeaderList[i].filename + (fileHeaderList[i].J? ' ({formatSize(' + fileHeaderList[i].J + ')})' : '');
 | |
| 		}
 | |
| 		return filenameList;
 | |
| 	},
 | |
| 	tarFiles = function(tar) {
 | |
| 		var filenames = [],
 | |
| 			tarlen = tar.length,
 | |
| 			offset = 0,
 | |
| 			toStr = function(arr) {
 | |
| 				return String.fromCharCode.apply(null, arr).replace(/\0+$/, '');
 | |
| 			},
 | |
| 			h, name, prefix, size, dbs;
 | |
| 		while (offset < tarlen && tar[offset] !== 0) {
 | |
| 			h = tar.subarray(offset, offset + 512);
 | |
| 			name = toStr(h.subarray(0, 100));
 | |
| 			if (prefix = toStr(h.subarray(345, 500))) {
 | |
| 				name = prefix + name;
 | |
| 			}
 | |
| 			size = parseInt(toStr(h.subarray(124, 136)), 8);
 | |
| 			dbs = Math.ceil(size / 512) * 512;
 | |
| 			if (name === '././@LongLink') {
 | |
| 				name = toStr(tar.subarray(offset + 512, offset + 512 + dbs));
 | |
| 			}
 | |
| 			(name !== 'pax_global_header') && filenames.push(name + (size? ' ({formatSize(' + size + ')})': ''));
 | |
| 			offset = offset + 512 + dbs;
 | |
| 		}
 | |
| 		return filenames;
 | |
| 	};
 | |
| 
 | |
| self.res = {};
 | |
| 
 | |
| switch (type) {
 | |
|   case 'tar':
 | |
|     self.res.files = tarFiles(bin);
 | |
|     break;
 | |
|   case 'zip':
 | |
|     self.res.files = unzipFiles.call(new Zlib.Unzip(bin));
 | |
|     break;
 | |
|   case 'gzip':
 | |
|     self.res.files = tarFiles(new Zlib.Gunzip(bin).decompress());
 | |
|     break;
 | |
|   case 'bzip2':
 | |
|     self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(bin)));
 | |
|     break;
 | |
|   default:
 | |
|     
 | |
|     break;
 | |
| }
 | |
| 
 |