diff --git a/src/cdn/downloadWrapper.ts b/src/cdn/downloadWrapper.ts index cd2b658..1da5178 100644 --- a/src/cdn/downloadWrapper.ts +++ b/src/cdn/downloadWrapper.ts @@ -6,7 +6,7 @@ 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 async function downloadWrapper({ host, path, size }: {host: string, path: string, size: number, useCurl: boolean}): Promise { +export default async function downloadWrapper({ host, path, size, useCurl }: {host: string, path: string, size: number, useCurl: boolean}): Promise { //Generate file name we want to save it under //e.g. on Linux: /tmp/patcher/cdn-patch.swtor.com/patch/assets_swtor_main/assets_swtor_main_-1to0/assets_swtor_main_-1to0.zip const tempFileName = nodePath.join(os.tmpdir(), 'patcher', host, path); @@ -21,19 +21,23 @@ export default async function downloadWrapper({ host, path, size }: {host: strin return tempFileName; } - //Download via curl - //Try up to 15 times - for (let i = 0; i < 15; i += 1) { - try { - //After five tries from CDN, switch to master source - const currentHost = (host === 'cdn-patch.swtor.com' && i >= 5 ? patchMasterSource : host); - const downloadResult = await downloadWithCurl({ host: currentHost, path, tempFileName }); - return downloadResult; - } catch (err) { - console.error(err); - //ignore error and try again + if (useCurl) { + //Download via curl + //Try up to 15 times + for (let i = 0; i < 15; i += 1) { + try { + //After five tries from CDN, switch to master source + const currentHost = (host === 'cdn-patch.swtor.com' && i >= 5 ? patchMasterSource : host); + const downloadResult = await downloadWithCurl({ host: currentHost, path, tempFileName }); + return downloadResult; + } catch (err) { + console.error(err); + //ignore error and try again + } } + //Download failed, throw error + throw new Error('Could not download with curl'); + } else { + throw new Error('Non-curl download is not yet implemented.'); } - //Download failed, throw error - throw new Error('Could not download with curl'); } diff --git a/src/ssn/installPatch.ts b/src/ssn/installPatch.ts index 0075ad6..2c3cf12 100644 --- a/src/ssn/installPatch.ts +++ b/src/ssn/installPatch.ts @@ -57,13 +57,14 @@ export default async function installPatch({ product, from, to, sourceDirectory, host: 'cdn-patch.swtor.com', path: `/patch/${product.startsWith('retailclient_') ? `${product.substring(13)}/` : ''}${product}/${product}_${from}to${to}/${name}`, size: length, + useCurl: true, }; } //start download, making sure that .zip file downloads first const indexOfLastFile = solidpkg.files.length - 1; const zipFile = getUrlContents(createUrlObject(solidpkg.files[indexOfLastFile])); - const diskFiles = solidpkg.files.slice(0, indexOfLastFile).map((file) => downloadWrapper.bind(null, createUrlObject(file))); + const diskFiles = solidpkg.files.slice(0, indexOfLastFile).map((file) => async function() { await downloadWrapper(createUrlObject(file)); }); //we can parse the file entries as soon as the .zip file is downloaded const fileEntries = readSsnFile(await zipFile);