Source: common/zip.js

/***
 * Copyright 2015 RAPP
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Authors: Konstantinos Panayiotou
 * Contact: klpanagi@gmail.com
 *
 */


/**
 * @module
 * @description Zip/Unzip wrapper methods
 *
 * @author Konstantinos Panayiotou <klpanagi@gmail.com>
 * @copyright Rapp Project EU 2016
 *
 */

var AdmZip;
var RAND_STR_LENGTH = 5;

try{
  AdmZip = require('adm-zip');
}
catch( e ){
  console.error("Could not load node-unzip: " + e);
}

var fs = require('fs');
var path = require('path');

var RandStrGen = require(path.join(__dirname, 'randStringGen.js'));
var strGen = new RandStrGen( RAND_STR_LENGTH );

var Fs = require(path.join(__dirname, 'fileUtils.js'));


/**
 * @function unzip
 * @description Decompress a .zip file
 *
 * @param {String} zipFilepat - Zip file path
 * @param {String} outPath - Path to extract from zip file
 */
function _unzip(zipFilepath, outPath) {
  if(! outPath){
    var ext = strGen.createUnique();
    outPath = path.join(path.dirname(zipFilepath), ext);
  }
  //var readStream = fs.createReadStream(zipFilepath);
  //var writeStream = fs.createWriteStream(outPath);
  try{
    var zip = new AdmZip(zipFilepath);
    zip.extractAllTo(outPath);
  }
  catch(e){
    console.error(e);
    return false;
  }
  var files = Fs.lsSync(outPath);
  var filepaths = [];
  for( var i in files ){
    filepaths.push(path.join(outPath, files[i]));
  }
  var stat = {
    files: files,
    outpath: outPath,
    filepaths: filepaths
  };
  return stat;
}


/**
 * @function isZipFile
 * @description Check if a file is a .zip file
 *
 * @param {String} zipFilepat - Zip file path
 */
function isZipFile(zipFilepath) {
  try{
    var zip = new AdmZip(zipFilepath);
  }
  catch(e){
    return false;
  }
  return true;
}

module.exports = {
  unzip: _unzip,
  isZipFile: isZipFile
};