quicklook.unzip.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. self.res = {};
  46. if (type === 'tar') {
  47. self.res.files = tarFiles(new Uint8Array(bin));
  48. } else if (type === 'zip') {
  49. self.res.files = unzipFiles.call(new Zlib.Unzip(new Uint8Array(bin)));
  50. } else if (type === 'gzip') {
  51. self.res.files = tarFiles((new Zlib.Gunzip(new Uint8Array(bin))).decompress());
  52. } else if (type === 'bzip2') {
  53. self.res.files = tarFiles(self.bzip2.simple(self.bzip2.array(new Uint8Array(bin))));
  54. }