Skip to content

Commit 4f83df9

Browse files
committed
Using a buffer instead of filestream
1 parent 83b52ff commit 4f83df9

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

src/omnisharp/OmnisharpDownloader.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ export class OmnisharpDownloader {
4949
try {
5050
this.eventStream.post(new LatestBuildDownloadStart());
5151
tmpFile = await CreateTmpFile();
52-
await DownloadFile(tmpFile.fd, description, this.eventStream, this.networkSettingsProvider, url);
53-
return fs.readFileSync(tmpFile.name, 'utf8');
52+
let versionBuffer = await DownloadFile(tmpFile.fd, description, this.eventStream, this.networkSettingsProvider, url);
53+
return versionBuffer.toString('utf8');
5454
}
5555
catch (error) {
5656
this.eventStream.post(new InstallationFailure('getLatestVersionInfoFile', error));

src/packageManager/FileDownloader.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import * as https from 'https';
77
import * as util from '../common';
8-
import * as fs from 'fs';
98
import { EventStream } from "../EventStream";
109
import { DownloadSuccess, DownloadStart, DownloadFallBack, DownloadFailure, DownloadProgress, DownloadSizeObtained } from "../omnisharp/loggingEvents";
1110
import { NestedError } from "../NestedError";
@@ -17,8 +16,9 @@ export async function DownloadFile(destinationFileDescriptor: number, descriptio
1716
eventStream.post(new DownloadStart(description));
1817

1918
try {
20-
await downloadFile(destinationFileDescriptor, description, url, eventStream, networkSettingsProvider);
19+
let buffer = await downloadFile(destinationFileDescriptor, description, url, eventStream, networkSettingsProvider);
2120
eventStream.post(new DownloadSuccess(` Done!`));
21+
return buffer;
2222
}
2323
catch (primaryUrlError) {
2424
// If the package has a fallback Url, and downloading from the primary Url failed, try again from
@@ -27,8 +27,9 @@ export async function DownloadFile(destinationFileDescriptor: number, descriptio
2727
if (fallbackUrl) {
2828
eventStream.post(new DownloadFallBack(fallbackUrl));
2929
try {
30-
await downloadFile(destinationFileDescriptor, description, fallbackUrl, eventStream, networkSettingsProvider);
30+
let buffer = await downloadFile(destinationFileDescriptor, description, fallbackUrl, eventStream, networkSettingsProvider);
3131
eventStream.post(new DownloadSuccess(' Done!'));
32+
return buffer;
3233
}
3334
catch (fallbackUrlError) {
3435
throw primaryUrlError;
@@ -40,7 +41,7 @@ export async function DownloadFile(destinationFileDescriptor: number, descriptio
4041
}
4142
}
4243

43-
async function downloadFile(fd: number, description: string, urlString: string, eventStream: EventStream, networkSettingsProvider: NetworkSettingsProvider): Promise<void> {
44+
async function downloadFile(fd: number, description: string, urlString: string, eventStream: EventStream, networkSettingsProvider: NetworkSettingsProvider): Promise<Buffer> {
4445
const url = parseUrl(urlString);
4546
const networkSettings = networkSettingsProvider();
4647
const proxy = networkSettings.proxy;
@@ -53,7 +54,9 @@ async function downloadFile(fd: number, description: string, urlString: string,
5354
rejectUnauthorized: util.isBoolean(strictSSL) ? strictSSL : true
5455
};
5556

56-
return new Promise<void>((resolve, reject) => {
57+
let buffers: any[] = [];
58+
59+
return new Promise<Buffer>((resolve, reject) => {
5760
if (fd == 0) {
5861
reject(new NestedError("Temporary package file unavailable"));
5962
}
@@ -74,12 +77,13 @@ async function downloadFile(fd: number, description: string, urlString: string,
7477
let packageSize = parseInt(response.headers['content-length'], 10);
7578
let downloadedBytes = 0;
7679
let downloadPercentage = 0;
77-
let tmpFile = fs.createWriteStream(null, { fd });
80+
//let tmpFile = fs.createWriteStream(null, { fd });
7881

7982
eventStream.post(new DownloadSizeObtained(packageSize));
8083

8184
response.on('data', data => {
8285
downloadedBytes += data.length;
86+
buffers.push(data);
8387

8488
// Update status bar item with percentage
8589
let newPercentage = Math.ceil(100 * (downloadedBytes / packageSize));
@@ -90,15 +94,15 @@ async function downloadFile(fd: number, description: string, urlString: string,
9094
});
9195

9296
response.on('end', () => {
93-
resolve();
97+
resolve(Buffer.concat(buffers));
9498
});
9599

96100
response.on('error', err => {
97101
reject(new NestedError(`Reponse error: ${err.message || 'NONE'}`, err));
98102
});
99103

100104
// Begin piping data from the response to the package file
101-
response.pipe(tmpFile, { end: false });
105+
// response.pipe(tmpFile, { end: false });
102106
});
103107

104108
request.on('error', err => {

src/packageManager/PackageManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ export async function DownloadAndInstallPackages(packages: Package[], provider:
2323
for (let pkg of filteredPackages) {
2424
try {
2525
tmpFile = await CreateTmpFile();
26-
await DownloadFile(tmpFile.fd, pkg.description, eventStream, provider, pkg.url, pkg.fallbackUrl);
27-
await InstallZip(tmpFile.fd, pkg.description, pkg.installPath, pkg.binaries, eventStream);
26+
let buffer = await DownloadFile(tmpFile.fd, pkg.description, eventStream, provider, pkg.url, pkg.fallbackUrl);
27+
await InstallZip(buffer, pkg.description, pkg.installPath, pkg.binaries, eventStream);
2828
}
2929
catch (error) {
3030
if (error instanceof NestedError) {

src/packageManager/ZipInstaller.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import { EventStream } from "../EventStream";
1111
import { InstallationStart } from "../omnisharp/loggingEvents";
1212
import { NestedError } from '../NestedError';
1313

14-
export async function InstallZip(sourceFileDescriptor: number, description: string, destinationInstallPath: string, binaries: string[], eventStream: EventStream): Promise<void> {
14+
export async function InstallZip(buffer: Buffer, description: string, destinationInstallPath: string, binaries: string[], eventStream: EventStream): Promise<void> {
1515
eventStream.post(new InstallationStart(description));
1616

1717
return new Promise<void>((resolve, reject) => {
18-
if (sourceFileDescriptor == 0) {
18+
/*if (sourceFileDescriptor == 0) {
1919
return reject(new NestedError('Downloaded file unavailable'));
20-
}
20+
}*/
2121

22-
yauzl.fromFd(sourceFileDescriptor, { lazyEntries: true }, (err, zipFile) => {
22+
yauzl.fromBuffer(buffer, { lazyEntries: true }, (err, zipFile) => {
2323
if (err) {
2424
return reject(new NestedError('Immediate zip file error', err));
2525
}

0 commit comments

Comments
 (0)