From 9305f4e11b085eb5fe82fd706bb93c556ff50ae3 Mon Sep 17 00:00:00 2001 From: codedread Date: Sun, 19 Feb 2017 09:22:47 -0800 Subject: [PATCH] Add factory method to archive.js that returns an Unrarrer/Unzipper/Untarrer --- archive.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/archive.js b/archive.js index 1596b74..bc2ab78 100644 --- a/archive.js +++ b/archive.js @@ -350,4 +350,25 @@ bitjs.archive.Untarrer = function(arrayBuffer, opt_pathToBitJS) { bitjs.inherits(bitjs.archive.Untarrer, bitjs.archive.Unarchiver); bitjs.archive.Untarrer.prototype.getScriptFileName = function() { return 'untar.js' }; +/** + * Factory method that creates an unarchiver based on the byte signature found + * in the arrayBuffer. + * @param {ArrayBuffer} ab + * @param {string=} opt_pathToBitJS Path to the unarchiver script files. + * @return {bitjs.archive.Unarchiver} + */ +bitjs.archive.GetUnarchiver = function(ab, opt_pathToBitJS) { + var unarchiver = null; + var pathToBitJS = opt_pathToBitJS || ''; + var h = new Uint8Array(ab, 0, 10); + if (h[0] == 0x52 && h[1] == 0x61 && h[2] == 0x72 && h[3] == 0x21) { //Rar! + unarchiver = new bitjs.archive.Unrarrer(ab, pathToBitJS); + } else if (h[0] == 80 && h[1] == 75) { // PK (Zip) + unarchiver = new bitjs.archive.Unzipper(ab, pathToBitJS); + } else { // Try with tar + unarchiver = new bitjs.archive.Untarrer(ab, pathToBitJS); + } + return unarchiver; +}; + })(); \ No newline at end of file