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
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));
|
|
})
|
|
}
|
|
});
|