public downloadFile()

in src/languageservice/httpClient.ts [24:68]


    public downloadFile(
        urlString: string,
        pkg: IPackage,
        logger: ILogger,
        statusView: IStatusView,
        proxy?: string,
        strictSSL?: boolean,
        authorization?: string): Promise<void> {
        const url = parseUrl(urlString);
        let options = this.getHttpClientOptions(url, proxy, strictSSL, authorization);
        let clientRequest = url.protocol === 'http:' ? http.request : https.request;

        return new Promise<void>((resolve, reject) => {
            if (!pkg.tmpFile || pkg.tmpFile.fd === 0) {
                return reject(new PackageError('Temporary package file unavailable', pkg));
            }

            let request = clientRequest(options, response => {
                if (response.statusCode === 301 || response.statusCode === 302) {
                    // Redirect - download from new location
                    return resolve(this.downloadFile(response.headers.location, pkg, logger, statusView, proxy, strictSSL, authorization));
                }

                if (response.statusCode !== 200) {
                    // Download failed - print error message
                    logger.appendLine(`failed (error code '${response.statusCode}')`);
                    return reject(new PackageError(response.statusCode.toString(), pkg));
                }

                // If status code is 200
                this.handleSuccessfulResponse(pkg, response, logger, statusView).then(_ => {
                    resolve();
                }).catch(err => {
                    reject(err);
                });
            });

            request.on('error', (error: any) => {
                reject(new PackageError(`Request error: ${error.code || 'NONE'}`, pkg, error));
            });

            // Execute the request
            request.end();
        });
    }