Skip to content

Commit 9fa82e0

Browse files
committed
1 parent 27cb886 commit 9fa82e0

6 files changed

Lines changed: 53 additions & 91 deletions

File tree

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@ import { LocalizationsChannel } from 'vs/platform/localizations/node/localizatio
4343
import { DialogChannelClient } from 'vs/platform/dialogs/node/dialogIpc';
4444
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
4545
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
46+
import { DownloadService } from 'vs/platform/download/node/downloadService';
4647
import { IDownloadService } from 'vs/platform/download/common/download';
47-
import { DownloadServiceChannelClient } from 'vs/platform/download/node/downloadIpc';
48-
import { DefaultURITransformer } from 'vs/base/common/uriIpc';
4948

5049
export interface ISharedProcessConfiguration {
5150
readonly machineId: string;
@@ -80,6 +79,7 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I
8079
services.set(ILogService, logService);
8180
services.set(IConfigurationService, new SyncDescriptor(ConfigurationService));
8281
services.set(IRequestService, new SyncDescriptor(RequestService));
82+
services.set(IDownloadService, new SyncDescriptor(DownloadService));
8383

8484
const windowsChannel = server.getChannel('windows', { routeCall: mainRoute, routeEvent: mainRoute });
8585
const windowsService = new WindowsChannelClient(windowsChannel);
@@ -91,9 +91,6 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I
9191
const dialogChannel = server.getChannel('dialog', { routeCall: route, routeEvent: route });
9292
services.set(IDialogService, new DialogChannelClient(dialogChannel));
9393

94-
const downloadChannel = server.getChannel('download', { routeCall: route, routeEvent: route });
95-
services.set(IDownloadService, new DownloadServiceChannelClient(downloadChannel, DefaultURITransformer));
96-
9794
const instantiationService = new InstantiationService(services);
9895

9996
instantiationService.invokeFunction(accessor => {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
import { URI } from 'vs/base/common/uri';
99
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
1010
import { TPromise } from 'vs/base/common/winjs.base';
11+
import { CancellationToken } from 'vs/base/common/cancellation';
1112

1213
export const IDownloadService = createDecorator<IDownloadService>('downloadService');
1314

1415
export interface IDownloadService {
1516

1617
_serviceBrand: any;
1718

18-
download(location: URI, file: string): TPromise<void>;
19+
download(uri: URI, to: string, cancellationToken?: CancellationToken): TPromise<void>;
1920

2021
}

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

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
'use strict';
7+
8+
import { IDownloadService } from 'vs/platform/download/common/download';
9+
import { TPromise } from 'vs/base/common/winjs.base';
10+
import { URI } from 'vs/base/common/uri';
11+
import { Schemas } from 'vs/base/common/network';
12+
import { copy } from 'vs/base/node/pfs';
13+
import { IRequestService } from 'vs/platform/request/node/request';
14+
import { asText, download } from 'vs/base/node/request';
15+
import { CancellationToken } from 'vs/base/common/cancellation';
16+
17+
export class DownloadService implements IDownloadService {
18+
19+
_serviceBrand: any;
20+
21+
constructor(
22+
@IRequestService private requestService: IRequestService
23+
) { }
24+
25+
download(uri: URI, target: string, cancellationToken: CancellationToken = CancellationToken.None): TPromise<void> {
26+
if (uri.scheme === Schemas.file) {
27+
return copy(uri.fsPath, target);
28+
}
29+
const options = { type: 'GET', url: uri.toString() };
30+
return this.requestService.request(options, cancellationToken)
31+
.then(context => {
32+
if (context.res.statusCode === 200) {
33+
return download(target, context);
34+
}
35+
return asText(context)
36+
.then(message => TPromise.wrapError(new Error(`Expected 200, got back ${context.res.statusCode} instead.\n\n${message}`)));
37+
});
38+
}
39+
}

src/vs/workbench/electron-browser/commands.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ITree } from 'vs/base/parts/tree/browser/tree';
2020
import { InEditorZenModeContext, NoEditorsVisibleContext, SingleEditorGroupsContext } from 'vs/workbench/common/editor';
2121
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
2222
import { URI } from 'vs/base/common/uri';
23+
import { IDownloadService } from 'vs/platform/download/common/download';
2324

2425
// --- List Commands
2526

@@ -555,4 +556,10 @@ export function registerCommands(): void {
555556

556557
return windowsService.removeFromRecentlyOpened([path]).then(() => void 0);
557558
});
559+
560+
CommandsRegistry.registerCommand('_workbench.downloadResource', function (accessor: ServicesAccessor, resource: URI, to: string) {
561+
const downloadService = accessor.get(IDownloadService);
562+
563+
return downloadService.download(resource, to);
564+
});
558565
}

src/vs/workbench/electron-browser/shell.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,12 @@ import { OpenerService } from 'vs/editor/browser/services/openerService';
9595
import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHistoryService';
9696
import { MulitExtensionManagementService } from 'vs/platform/extensionManagement/node/multiExtensionManagement';
9797
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
98-
import { DownloadServiceChannel } from 'vs/platform/download/node/downloadIpc';
9998
import { DefaultURITransformer } from 'vs/base/common/uriIpc';
10099
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
101100
import { ILabelService } from 'vs/platform/label/common/label';
102101
import { runWhenIdle } from 'vs/base/common/async';
102+
import { IDownloadService } from 'vs/platform/download/common/download';
103+
import { DownloadService } from 'vs/platform/download/node/downloadService';
103104

104105
/**
105106
* Services that we require for the Shell
@@ -345,7 +346,6 @@ export class WorkbenchShell extends Disposable {
345346
.then(() => connectNet(this.environmentService.sharedIPCHandle, `window:${this.configuration.windowId}`));
346347

347348
sharedProcess.then(client => {
348-
client.registerChannel('download', new DownloadServiceChannel());
349349
client.registerChannel('dialog', instantiationService.createInstance(DialogChannel));
350350
});
351351

@@ -389,6 +389,7 @@ export class WorkbenchShell extends Disposable {
389389
this.lifecycleService = lifecycleService;
390390

391391
serviceCollection.set(IRequestService, new SyncDescriptor(RequestService));
392+
serviceCollection.set(IDownloadService, new SyncDescriptor(DownloadService));
392393
serviceCollection.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
393394

394395
const extensionManagementChannel = getDelayedChannel<IExtensionManagementChannel>(sharedProcess.then(c => c.getChannel('extensions')));

0 commit comments

Comments
 (0)