welsonjs/lib/archive.js

125 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-11-29 07:53:31 +00:00
// archive.js
// File archiver library for WelsonJS framework
// Namhyeon Go (Catswords Research) <abuse@catswords.net>
// https://github.com/gnh1201/welsonjs
//
var SHELL = require("lib/shell");
var FILE = require("lib/file");
function ArchiveObject(engine) {
this.workingDirectory = "";
this.patterns = [];
this.readFormat = "";
this.writeFormat = "";
this.engine = null;
this.setReadFormat = function(readFormat) {
this.readFormat = readFormat;
2024-11-29 07:54:53 +00:00
2024-11-29 07:53:31 +00:00
return this;
};
this.setWriteFormat = function(writeFormat) {
this.writeFormat = writeFormat;
2024-11-29 07:54:53 +00:00
2024-11-29 07:53:31 +00:00
return this;
};
this.setEngine = function(engine) {
this.engine = engine;
if (this.engine == "cabinet") {
this.setReadFormat("cab");
this.setWriteFormat("cab");
}
// TODO: zip, 7z, rar
return this;
};
this.extractTo = function(filename, targetDirectory) {
var result;
if (this.engine == "cabinet") {
// compress cab to target directory
result = SHELL.exec([
"expand",
filename,
targetDirectory
]);
}
return result;
};
this.compressTo = function(filename) {
var result;
// https://superuser.com/questions/658021/whats-the-best-way-to-create-a-cab-file-of-multiple-files-quickly
if (this.engine == "cabinet") {
var directives = this.buildDirectives();
// create the directives file (temporary file)
var tmp = PipeIPC.connect("volatile");
tmp.write(directives);
var tmp_path = out.path;
tmp.close();
// compress to cab
SHELL.exec([
"makecab",
"/d",
"CabinetName1=" + filename,
"/d",
"DiskDirectoryTemplate=" + this.workingDirectory,
"/f",
tmp_path
]);
// destroy the temporary file
tmp.destroy();
}
return result;
};
this.buildDirectives = function() {
var directives = [];
if (this.engine == "cabinet") {
this.patterns.forEach(function(x) {
if (FILE.fileExists(x)) directives.push(x);
});
}
return directives.join("\r\n");
};
this.addFile = function(file) {
this.patterns.push(file);
2024-11-29 07:54:53 +00:00
2024-11-29 07:53:31 +00:00
return this;
};
// set default engines
this.create = function() {
if (typeof engine === "undefined") {
this.setEngine("cabinet");
};
2024-11-29 07:54:53 +00:00
return this;
2024-11-29 07:53:31 +00:00
};
this.create();
}
exports.create = function(engine) {
return new ArchiveObject(engine);
};
exports.VERSIONINFO = "File archiver library (archive.js) version 0.1-dev";
exports.AUTHOR = "abuse@catswords.net";
exports.global = global;
exports.require = global.require;