skysync-cli
Version:
SkySync Command Line Interface
60 lines (59 loc) • 2.68 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileDownloader = void 0;
const path = require('path');
const fs = require('fs');
class FileDownloader {
constructor(httpClient, fileProvider) {
this.httpClient = httpClient;
this.fileProvider = fileProvider;
}
download(id, outputDirectory) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
this.createDirectory(outputDirectory);
let requestPath = this.fileProvider.getDownloadRequestPath(id);
return this.httpClient.download(requestPath, (fileName, response) => __awaiter(this, void 0, void 0, function* () {
if (!fileName) {
return reject('The server did not return a file.');
}
const outputPath = path.join(outputDirectory, fileName);
return yield response.pipe(fs.createWriteStream(outputPath))
.on('finish', () => {
resolve(outputPath);
})
.on('error', reject);
}));
}
catch (e) {
reject(e.message);
}
}));
}
createDirectory(targetDirectory) {
targetDirectory.split(/[\\/]/).reduce((parentDirectory, childDirectory) => {
const pathSegment = path.resolve(parentDirectory, childDirectory);
try {
if (!fs.existsSync(pathSegment)) {
fs.mkdirSync(pathSegment);
}
}
catch (err) {
if (err.code !== 'EEXIST') {
throw err;
}
}
return pathSegment;
}, path.isAbsolute(targetDirectory) ? path.sep : '');
}
}
exports.FileDownloader = FileDownloader;