提交 728e657c 编写于 作者: S Sandeep Somavarapu

Make download service optional

上级 84ad7119
...@@ -42,8 +42,6 @@ import { CommandLineDialogService } from 'vs/platform/dialogs/node/dialogService ...@@ -42,8 +42,6 @@ import { CommandLineDialogService } from 'vs/platform/dialogs/node/dialogService
import { areSameExtensions, getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { areSameExtensions, getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import URI from 'vs/base/common/uri'; import URI from 'vs/base/common/uri';
import { IDownloadService } from 'vs/platform/download/common/download';
import { DownloadService } from 'vs/platform/download/node/downloadService';
const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id);
const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id); const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id);
...@@ -243,7 +241,6 @@ export function main(argv: ParsedArgs): TPromise<void> { ...@@ -243,7 +241,6 @@ export function main(argv: ParsedArgs): TPromise<void> {
services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService)); services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService)); services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
services.set(IDialogService, new SyncDescriptor(CommandLineDialogService)); services.set(IDialogService, new SyncDescriptor(CommandLineDialogService));
services.set(IDownloadService, new SyncDescriptor(DownloadService));
const appenders: AppInsightsAppender[] = []; const appenders: AppInsightsAppender[] = [];
if (isBuilt && !extensionDevelopmentPath && !envService.args['disable-telemetry'] && product.enableTelemetry) { if (isBuilt && !extensionDevelopmentPath && !envService.args['disable-telemetry'] && product.enableTelemetry) {
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { IDownloadService } from 'vs/platform/download/common/download';
import { IRequestService } from 'vs/platform/request/node/request';
import { Schemas } from 'vs/base/common/network';
import { copy } from 'vs/base/node/pfs';
import { download, asText } from 'vs/base/node/request';
export class DownloadService implements IDownloadService {
_serviceBrand: any;
constructor(
@IRequestService private requestService: IRequestService
) { }
download(from: URI, to: string): TPromise<void> {
if (from.scheme === Schemas.file) {
return copy(from.fsPath, to);
}
return this.requestService.request({ url: from.path })
.then(context => {
if (context.res.statusCode === 200) {
return download(to, context);
}
return asText(context)
.then(message => TPromise.wrapError(new Error(`Expected 200, got back ${context.res.statusCode} instead.\n\n${message}`)));
});
}
}
\ No newline at end of file
...@@ -45,6 +45,7 @@ import { getPathFromAmdModule } from 'vs/base/common/amd'; ...@@ -45,6 +45,7 @@ import { getPathFromAmdModule } from 'vs/base/common/amd';
import { tmpdir } from 'os'; import { tmpdir } from 'os';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import { IDownloadService } from 'vs/platform/download/common/download'; import { IDownloadService } from 'vs/platform/download/common/download';
import { optional } from 'vs/platform/instantiation/common/instantiation';
const SystemExtensionsRoot = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', 'extensions')); const SystemExtensionsRoot = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', 'extensions'));
const ERROR_SCANNING_SYS_EXTENSIONS = 'scanningSystem'; const ERROR_SCANNING_SYS_EXTENSIONS = 'scanningSystem';
...@@ -140,7 +141,7 @@ export class ExtensionManagementService extends Disposable implements IExtension ...@@ -140,7 +141,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
@IDialogService private dialogService: IDialogService, @IDialogService private dialogService: IDialogService,
@IExtensionGalleryService private galleryService: IExtensionGalleryService, @IExtensionGalleryService private galleryService: IExtensionGalleryService,
@ILogService private logService: ILogService, @ILogService private logService: ILogService,
@IDownloadService private downloadService: IDownloadService, @optional(IDownloadService) private downloadService: IDownloadService,
@ITelemetryService private telemetryService: ITelemetryService, @ITelemetryService private telemetryService: ITelemetryService,
) { ) {
super(); super();
...@@ -165,6 +166,9 @@ export class ExtensionManagementService extends Disposable implements IExtension ...@@ -165,6 +166,9 @@ export class ExtensionManagementService extends Disposable implements IExtension
} }
unzip(zipLocation: URI): TPromise<void> { unzip(zipLocation: URI): TPromise<void> {
if (!this.downloadService) {
throw new Error('Download service is not available');
}
const downloadedLocation = path.join(tmpdir(), generateUuid()); const downloadedLocation = path.join(tmpdir(), generateUuid());
return this.downloadService.download(zipLocation, downloadedLocation).then(() => this.install(URI.file(downloadedLocation))); return this.downloadService.download(zipLocation, downloadedLocation).then(() => this.install(URI.file(downloadedLocation)));
} }
......
...@@ -97,8 +97,6 @@ import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHi ...@@ -97,8 +97,6 @@ import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHi
import { MulitExtensionManagementService } from 'vs/platform/extensionManagement/common/multiExtensionManagement'; import { MulitExtensionManagementService } from 'vs/platform/extensionManagement/common/multiExtensionManagement';
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService'; import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
import { DownloadServiceChannel } from 'vs/platform/download/node/downloadIpc'; import { DownloadServiceChannel } from 'vs/platform/download/node/downloadIpc';
import { IDownloadService } from 'vs/platform/download/common/download';
import { DownloadService } from 'vs/platform/download/node/downloadService';
/** /**
* Services that we require for the Shell * Services that we require for the Shell
...@@ -391,7 +389,6 @@ export class WorkbenchShell extends Disposable { ...@@ -391,7 +389,6 @@ export class WorkbenchShell extends Disposable {
serviceCollection.set(IExtensionEnablementService, extensionEnablementService); serviceCollection.set(IExtensionEnablementService, extensionEnablementService);
serviceCollection.set(IRequestService, new SyncDescriptor(RequestService)); serviceCollection.set(IRequestService, new SyncDescriptor(RequestService));
serviceCollection.set(IDownloadService, new SyncDescriptor(DownloadService));
this.extensionService = instantiationService.createInstance(ExtensionService); this.extensionService = instantiationService.createInstance(ExtensionService);
serviceCollection.set(IExtensionService, this.extensionService); serviceCollection.set(IExtensionService, this.extensionService);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册