Skip to content

Commit ca0b1b3

Browse files
committed
debt - make target location optional and let service decide
1 parent 265644d commit ca0b1b3

4 files changed

Lines changed: 18 additions & 18 deletions

File tree

src/vs/platform/download/common/download.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ export interface IDownloadService {
1313

1414
_serviceBrand: any;
1515

16-
download(uri: URI, to: string, cancellationToken?: CancellationToken): Promise<void>;
16+
download(uri: URI, to?: string, cancellationToken?: CancellationToken): Promise<string>;
1717

18-
}
18+
}

src/vs/platform/download/node/downloadIpc.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { Event, Emitter } from 'vs/base/common/event';
1111
import { IDownloadService } from 'vs/platform/download/common/download';
1212
import { mkdirp } from 'vs/base/node/pfs';
1313
import { IURITransformer } from 'vs/base/common/uriIpc';
14+
import { tmpdir } from 'os';
15+
import { generateUuid } from 'vs/base/common/uuid';
1416

1517
export type UploadResponse = Buffer | string | undefined;
1618

@@ -46,21 +48,21 @@ export class DownloadServiceChannelClient implements IDownloadService {
4648

4749
constructor(private channel: IChannel, private getUriTransformer: () => IURITransformer) { }
4850

49-
download(from: URI, to: string): Promise<void> {
51+
download(from: URI, to: string = path.join(tmpdir(), generateUuid())): Promise<string> {
5052
from = this.getUriTransformer().transformOutgoingURI(from);
5153
const dirName = path.dirname(to);
5254
let out: fs.WriteStream;
53-
return new Promise((c, e) => {
55+
return new Promise<string>((c, e) => {
5456
return mkdirp(dirName)
5557
.then(() => {
5658
out = fs.createWriteStream(to);
57-
out.once('close', () => c());
59+
out.once('close', () => c(to));
5860
out.once('error', e);
5961
const uploadStream = this.channel.listen<UploadResponse>('upload', from);
6062
const disposable = uploadStream(result => {
6163
if (result === undefined) {
6264
disposable.dispose();
63-
out.end(c);
65+
out.end(() => c(to));
6466
} else if (Buffer.isBuffer(result)) {
6567
out.write(result);
6668
} else if (typeof result === 'string') {
@@ -71,4 +73,4 @@ export class DownloadServiceChannelClient implements IDownloadService {
7173
});
7274
});
7375
}
74-
}
76+
}

src/vs/platform/download/node/downloadService.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import { copy } from 'vs/base/node/pfs';
1010
import { IRequestService } from 'vs/platform/request/node/request';
1111
import { asText, download } from 'vs/base/node/request';
1212
import { CancellationToken } from 'vs/base/common/cancellation';
13+
import { join } from 'vs/base/common/path';
14+
import { tmpdir } from 'os';
15+
import { generateUuid } from 'vs/base/common/uuid';
1316

1417
export class DownloadService implements IDownloadService {
1518

@@ -19,18 +22,18 @@ export class DownloadService implements IDownloadService {
1922
@IRequestService private readonly requestService: IRequestService
2023
) { }
2124

22-
download(uri: URI, target: string, cancellationToken: CancellationToken = CancellationToken.None): Promise<void> {
25+
download(uri: URI, target: string = join(tmpdir(), generateUuid()), cancellationToken: CancellationToken = CancellationToken.None): Promise<string> {
2326
if (uri.scheme === Schemas.file) {
24-
return copy(uri.fsPath, target);
27+
return copy(uri.fsPath, target).then(() => target);
2528
}
2629
const options = { type: 'GET', url: uri.toString() };
2730
return this.requestService.request(options, cancellationToken)
2831
.then(context => {
2932
if (context.res.statusCode === 200) {
30-
return download(target, context);
33+
return download(target, context).then(() => target);
3134
}
3235
return asText(context)
3336
.then(message => Promise.reject(new Error(`Expected 200, got back ${context.res.statusCode} instead.\n\n${message}`)));
3437
});
3538
}
36-
}
39+
}

src/vs/workbench/api/node/apiCommands.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { tmpdir } from 'os';
7-
import { join } from 'vs/base/common/path';
86
import * as vscode from 'vscode';
97
import { URI } from 'vs/base/common/uri';
108
import { isMalformedFileUri } from 'vs/base/common/resources';
@@ -17,7 +15,6 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
1715
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
1816
import { IWindowsService } from 'vs/platform/windows/common/windows';
1917
import { IDownloadService } from 'vs/platform/download/common/download';
20-
import { generateUuid } from 'vs/base/common/uuid';
2118

2219
// -----------------------------------------------------------------
2320
// The following commands are registered on both sides separately.
@@ -158,7 +155,5 @@ CommandsRegistry.registerCommand({
158155

159156
CommandsRegistry.registerCommand('_workbench.downloadResource', function (accessor: ServicesAccessor, resource: URI) {
160157
const downloadService = accessor.get(IDownloadService);
161-
const location = join(tmpdir(), generateUuid());
162-
163-
return downloadService.download(resource, location).then(() => URI.file(location));
164-
});
158+
return downloadService.download(resource).then(location => URI.file(location));
159+
});

0 commit comments

Comments
 (0)