You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.7 KiB
JavaScript

'use strict';
const Promise = require("bluebird");
const isoParser = require("../lib/iso9660");
const yargs = require("yargs");
const fsSeekable = require("../lib/seekable/fs");
const httpSeekable = require("../lib/seekable/http");
const renderVolumeTable = require("../lib/render/volume-table");
const renderFilesystemTree = require("../lib/render/filesystem-tree");
let argv = yargs.argv;
let command, target, subCommands;
if (argv._.length === 1) {
command = "volumes";
target = argv._[0];
} else if (argv._.length > 1) {
[command, target, ...subCommands] = argv._;
} else {
throw new Error("You must specify at least a target file or URL");
}
Promise.try(() => {
if (target.match(/^https?:\/\//)) {
return httpSeekable(target);
} else {
return fsSeekable(target);
}
}).then((seekable) => {
let parser = isoParser(seekable);
if (command === "volumes") {
return Promise.try(() => {
return parser.getUniqueVolumeDescriptors();
}).then((volumeDescriptors) => {
console.log(renderVolumeTable(volumeDescriptors));
});
} else if (command === "tree") {
return Promise.try(() => {
if (argv.volume != null) {
let volumeId = parseInt(argv.volume);
if (isNaN(volumeId)) {
throw new Error("--volume argument must be numeric");
}
return parser.getRootDirectory(volumeId);
} else {
return parser.getRootDirectory();
}
}).then((rootDirectory) => {
return rootDirectory.getTree();
}).then((tree) => {
console.log(renderFilesystemTree(tree));
})
}
});