ssn/src/cdn/downloadWrapper.ts

33 lines
1.4 KiB
TypeScript
Raw Normal View History

import * as os from 'os';
import * as nodePath from 'path';
import downloadUrlContents from './downloadUrlContents';
import downloadWithCurl from './downloadWithCurl';
import checkLocalCache from './funcs/checkLocalCache';
import createDirRecursively from './funcs/createDirRecursively';
/** Downloads the given URL and saves it to disk. Returns the location where file is saved under. Throws error if download fails. */
export default function downloadWrapper({ host, path, size, useCurl = false }: {host: string, path: string, size: number, useCurl: boolean}): Promise<string> {
return new Promise((resolve, reject) => {
//Generate file name we want to save it under
//e.g. on Linux: /tmp/patcher/patch/assets_swtor_main/assets_swtor_main_-1to0/assets_swtor_main_-1to0.zip
const tempFileName = nodePath.join(os.tmpdir(), 'patcher', host, path);
//Create parent directory recursively
const folderName = nodePath.dirname(tempFileName);
createDirRecursively(folderName).then(() => {
//Check if file already exists locally
checkLocalCache(tempFileName, size).then((cacheStatus) => {
if (cacheStatus) {
return resolve(tempFileName);
}
if (useCurl) {
downloadWithCurl({ host, path, tempFileName, size, resolve, reject });
} else {
downloadUrlContents(host, path, tempFileName, resolve, reject);
}
});
});
});
}