mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
Split IssueService/RawIssueService so renderer proc consumers have a simpler interface to launch the issue reporter
This commit is contained in:
parent
db5143d574
commit
077c6f9f70
|
@ -54,9 +54,9 @@ import { getMachineId } from 'vs/base/node/id';
|
|||
import { Win32UpdateService } from 'vs/platform/update/electron-main/updateService.win32';
|
||||
import { LinuxUpdateService } from 'vs/platform/update/electron-main/updateService.linux';
|
||||
import { DarwinUpdateService } from 'vs/platform/update/electron-main/updateService.darwin';
|
||||
import { IIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { IRawIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { IssueChannel } from 'vs/platform/issue/common/issueIpc';
|
||||
import { IssueService } from 'vs/platform/issue/electron-main/issueService';
|
||||
import { RawIssueService } from 'vs/platform/issue/electron-main/rawIssueService';
|
||||
import { LogLevelSetterChannel } from 'vs/platform/log/common/logIpc';
|
||||
|
||||
export class CodeApplication {
|
||||
|
@ -321,7 +321,7 @@ export class CodeApplication {
|
|||
services.set(IWindowsMainService, new SyncDescriptor(WindowsManager, machineId));
|
||||
services.set(IWindowsService, new SyncDescriptor(WindowsService, this.sharedProcess));
|
||||
services.set(ILaunchService, new SyncDescriptor(LaunchService));
|
||||
services.set(IIssueService, new SyncDescriptor(IssueService, machineId));
|
||||
services.set(IRawIssueService, new SyncDescriptor(RawIssueService, machineId));
|
||||
|
||||
// Telemtry
|
||||
if (this.environmentService.isBuilt && !this.environmentService.isExtensionDevelopment && !this.environmentService.args['disable-telemetry'] && !!product.enableTelemetry) {
|
||||
|
@ -366,7 +366,7 @@ export class CodeApplication {
|
|||
const urlChannel = appInstantiationService.createInstance(URLChannel, urlService);
|
||||
this.electronIpcServer.registerChannel('url', urlChannel);
|
||||
|
||||
const issueService = accessor.get(IIssueService);
|
||||
const issueService = accessor.get(IRawIssueService);
|
||||
const issueChannel = new IssueChannel(issueService);
|
||||
this.electronIpcServer.registerChannel('issue', issueChannel);
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
|
||||
export const ID = 'issueService';
|
||||
export const IIssueService = createDecorator<IIssueService>(ID);
|
||||
export const IIssueService = createDecorator<IIssueService>('issueService');
|
||||
export const IRawIssueService = createDecorator<IRawIssueService>('rawIssueService');
|
||||
|
||||
export enum IssueType {
|
||||
Bug,
|
||||
|
@ -57,6 +57,11 @@ export interface ISettingsSearchIssueReporterData extends IssueReporterData {
|
|||
}
|
||||
|
||||
export interface IIssueService {
|
||||
_serviceBrand: any;
|
||||
openReporter(dataOverrides: Partial<IssueReporterData>): TPromise<void>;
|
||||
}
|
||||
|
||||
export interface IRawIssueService {
|
||||
_serviceBrand: any;
|
||||
openReporter(data: IssueReporterData): TPromise<void>;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
|
||||
import { IIssueService, IssueReporterData } from './issue';
|
||||
import { IRawIssueService, IssueReporterData } from './issue';
|
||||
|
||||
export interface IIssueChannel extends IChannel {
|
||||
call(command: 'openIssueReporter', arg: IssueReporterData): TPromise<void>;
|
||||
|
@ -17,7 +17,7 @@ export interface IIssueChannel extends IChannel {
|
|||
|
||||
export class IssueChannel implements IIssueChannel {
|
||||
|
||||
constructor(private service: IIssueService) { }
|
||||
constructor(private service: IRawIssueService) { }
|
||||
|
||||
call(command: string, arg?: any): TPromise<any> {
|
||||
switch (command) {
|
||||
|
@ -28,7 +28,7 @@ export class IssueChannel implements IIssueChannel {
|
|||
}
|
||||
}
|
||||
|
||||
export class IssueChannelClient implements IIssueService {
|
||||
export class IssueChannelClient implements IRawIssueService {
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
|
|
63
src/vs/platform/issue/electron-browser/issueService.ts
Normal file
63
src/vs/platform/issue/electron-browser/issueService.ts
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* 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 { IIssueService, IssueReporterStyles, IRawIssueService, IssueReporterData } from 'vs/platform/issue/common/issue';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { ITheme, IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { IExtensionManagementService, IExtensionEnablementService, LocalExtensionType } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { webFrame } from 'electron';
|
||||
import { assign } from 'vs/base/common/objects';
|
||||
|
||||
export class IssueService implements IIssueService {
|
||||
_serviceBrand: any;
|
||||
|
||||
constructor(
|
||||
@IRawIssueService private issueService: IRawIssueService,
|
||||
@IThemeService private themeService: IThemeService,
|
||||
@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService
|
||||
) {
|
||||
}
|
||||
|
||||
openReporter(dataOverrides: Partial<IssueReporterData>): TPromise<void> {
|
||||
return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(extensions => {
|
||||
const enabledExtensions = extensions.filter(extension => this.extensionEnablementService.isEnabled({ id: getGalleryExtensionIdFromLocal(extension) }));
|
||||
const theme = this.themeService.getTheme();
|
||||
const issueReporterData: IssueReporterData = assign(
|
||||
{
|
||||
styles: getIssueReporterStyles(theme),
|
||||
zoomLevel: webFrame.getZoomLevel(),
|
||||
enabledExtensions
|
||||
},
|
||||
dataOverrides);
|
||||
|
||||
return this.issueService.openReporter(issueReporterData);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function getIssueReporterStyles(theme: ITheme): IssueReporterStyles {
|
||||
return {
|
||||
backgroundColor: theme.getColor(SIDE_BAR_BACKGROUND) && theme.getColor(SIDE_BAR_BACKGROUND).toString(),
|
||||
color: theme.getColor(foreground).toString(),
|
||||
textLinkColor: theme.getColor(textLinkForeground) && theme.getColor(textLinkForeground).toString(),
|
||||
inputBackground: theme.getColor(inputBackground) && theme.getColor(inputBackground).toString(),
|
||||
inputForeground: theme.getColor(inputForeground) && theme.getColor(inputForeground).toString(),
|
||||
inputBorder: theme.getColor(inputBorder) && theme.getColor(inputBorder).toString(),
|
||||
inputActiveBorder: theme.getColor(inputActiveOptionBorder) && theme.getColor(inputActiveOptionBorder).toString(),
|
||||
inputErrorBorder: theme.getColor(inputValidationErrorBorder) && theme.getColor(inputValidationErrorBorder).toString(),
|
||||
buttonBackground: theme.getColor(buttonBackground) && theme.getColor(buttonBackground).toString(),
|
||||
buttonForeground: theme.getColor(buttonForeground) && theme.getColor(buttonForeground).toString(),
|
||||
buttonHoverBackground: theme.getColor(buttonHoverBackground) && theme.getColor(buttonHoverBackground).toString(),
|
||||
sliderActiveColor: theme.getColor(scrollbarSliderActiveBackground) && theme.getColor(scrollbarSliderActiveBackground).toString(),
|
||||
sliderBackgroundColor: theme.getColor(scrollbarSliderBackground) && theme.getColor(scrollbarSliderBackground).toString(),
|
||||
sliderHoverColor: theme.getColor(scrollbarSliderHoverBackground) && theme.getColor(scrollbarSliderHoverBackground).toString()
|
||||
};
|
||||
}
|
|
@ -9,7 +9,7 @@ import { TPromise, Promise } from 'vs/base/common/winjs.base';
|
|||
import { localize } from 'vs/nls';
|
||||
import * as objects from 'vs/base/common/objects';
|
||||
import { parseArgs } from 'vs/platform/environment/node/argv';
|
||||
import { IIssueService, IssueReporterData } from 'vs/platform/issue/common/issue';
|
||||
import { IRawIssueService, IssueReporterData } from 'vs/platform/issue/common/issue';
|
||||
import { BrowserWindow, ipcMain, screen } from 'electron';
|
||||
import { ILaunchService } from 'vs/code/electron-main/launch';
|
||||
import { getPerformanceInfo, PerformanceInfo, getSystemInfo, SystemInfo } from 'vs/code/electron-main/diagnostics';
|
||||
|
@ -18,7 +18,7 @@ import { isMacintosh } from 'vs/base/common/platform';
|
|||
|
||||
const DEFAULT_BACKGROUND_COLOR = '#1E1E1E';
|
||||
|
||||
export class IssueService implements IIssueService {
|
||||
export class RawIssueService implements IRawIssueService {
|
||||
_serviceBrand: any;
|
||||
_issueWindow: BrowserWindow;
|
||||
_parentWindow: BrowserWindow;
|
|
@ -44,7 +44,7 @@ import { FileKind } from 'vs/platform/files/common/files';
|
|||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IExtensionService, ActivationTimes } from 'vs/platform/extensions/common/extensions';
|
||||
import { getEntries } from 'vs/base/common/performance';
|
||||
import { IIssueService, IssueReporterData, IssueType, IssueReporterStyles } from 'vs/platform/issue/common/issue';
|
||||
import { IRawIssueService, IssueReporterData, IssueType, IssueReporterStyles } from 'vs/platform/issue/common/issue';
|
||||
import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
|
||||
import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
|
@ -895,7 +895,7 @@ export class OpenIssueReporterAction extends Action {
|
|||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
@IIssueService private issueService: IIssueService,
|
||||
@IRawIssueService private issueService: IRawIssueService,
|
||||
@IThemeService private themeService: IThemeService,
|
||||
@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService
|
||||
|
@ -927,7 +927,7 @@ export class ReportPerformanceIssueUsingReporterAction extends Action {
|
|||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
@IIssueService private issueService: IIssueService,
|
||||
@IRawIssueService private issueService: IRawIssueService,
|
||||
@IThemeService private themeService: IThemeService,
|
||||
@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService
|
||||
|
|
|
@ -45,7 +45,7 @@ import { createSpdLogService } from 'vs/platform/log/node/spdlogService';
|
|||
import fs = require('fs');
|
||||
import { ConsoleLogService, MultiplexLogService, ILogService } from 'vs/platform/log/common/log';
|
||||
import { IssueChannelClient } from 'vs/platform/issue/common/issueIpc';
|
||||
import { IIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { IRawIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log/common/logIpc';
|
||||
gracefulFs.gracefulify(fs); // enable gracefulFs
|
||||
|
||||
|
@ -219,7 +219,7 @@ function createMainProcessServices(mainProcessClient: ElectronIPCClient, configu
|
|||
serviceCollection.set(IURLService, new SyncDescriptor(URLChannelClient, urlChannel, configuration.windowId));
|
||||
|
||||
const issueChannel = mainProcessClient.getChannel('issue');
|
||||
serviceCollection.set(IIssueService, new SyncDescriptor(IssueChannelClient, issueChannel));
|
||||
serviceCollection.set(IRawIssueService, new SyncDescriptor(IssueChannelClient, issueChannel));
|
||||
|
||||
const workspacesChannel = mainProcessClient.getChannel('workspaces');
|
||||
serviceCollection.set(IWorkspacesService, new WorkspacesChannelClient(workspacesChannel));
|
||||
|
|
|
@ -92,6 +92,8 @@ import { stat } from 'fs';
|
|||
import { join } from 'path';
|
||||
import { ILocalizationsChannel, LocalizationsChannelClient } from 'vs/platform/localizations/common/localizationsIpc';
|
||||
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
|
||||
import { IIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { IssueService } from 'vs/platform/issue/electron-browser/issueService';
|
||||
|
||||
/**
|
||||
* Services that we require for the Shell
|
||||
|
@ -445,6 +447,8 @@ export class WorkbenchShell {
|
|||
|
||||
serviceCollection.set(ISearchService, new SyncDescriptor(SearchService));
|
||||
|
||||
serviceCollection.set(IIssueService, new SyncDescriptor(IssueService));
|
||||
|
||||
serviceCollection.set(ICodeEditorService, new SyncDescriptor(CodeEditorServiceImpl));
|
||||
|
||||
serviceCollection.set(IIntegrityService, new SyncDescriptor(IntegrityServiceImpl));
|
||||
|
|
|
@ -36,11 +36,8 @@ import { ITextModel, IModelDeltaDecoration, TrackedRangeStickiness } from 'vs/ed
|
|||
import { CodeLensProviderRegistry, CodeLensProvider, ICodeLensSymbol } from 'vs/editor/common/modes';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { getDomNodePagePosition } from 'vs/base/browser/dom';
|
||||
import { IIssueService, IssueType, ISettingsSearchIssueReporterData, ISettingSearchResult } from 'vs/platform/issue/common/issue';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { IssueType, ISettingsSearchIssueReporterData, ISettingSearchResult, IIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { IExtensionManagementService, IExtensionEnablementService, LocalExtensionType, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { getIssueReporterStyles } from 'vs/workbench/electron-browser/actions';
|
||||
import { webFrame } from 'electron';
|
||||
|
||||
export interface IPreferencesRenderer<T> extends IDisposable {
|
||||
readonly preferencesModel: IPreferencesEditorModel<T>;
|
||||
|
@ -582,7 +579,6 @@ export class FeedbackWidgetRenderer extends Disposable {
|
|||
@IInstantiationService private instantiationService: IInstantiationService,
|
||||
@IIssueService private issueService: IIssueService,
|
||||
@IConfigurationService private configurationService: IConfigurationService,
|
||||
@IThemeService private themeService: IThemeService,
|
||||
@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
|
||||
@IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService
|
||||
) {
|
||||
|
@ -619,7 +615,6 @@ export class FeedbackWidgetRenderer extends Disposable {
|
|||
const enabledExtensions = extensions
|
||||
.filter(extension => this.extensionEnablementService.isEnabled(extension.identifier))
|
||||
.filter(ext => ext.manifest.contributes && ext.manifest.contributes.configuration);
|
||||
const theme = this.themeService.getTheme();
|
||||
|
||||
const issueResults = Object.keys(results)
|
||||
.map(key => (<ISettingSearchResult>{
|
||||
|
@ -631,9 +626,7 @@ export class FeedbackWidgetRenderer extends Disposable {
|
|||
}))
|
||||
.slice(0, 20);
|
||||
|
||||
const issueReporterData: ISettingsSearchIssueReporterData = {
|
||||
styles: getIssueReporterStyles(theme),
|
||||
zoomLevel: webFrame.getZoomLevel(),
|
||||
const issueReporterData: Partial<ISettingsSearchIssueReporterData> = {
|
||||
enabledExtensions,
|
||||
issueType: IssueType.SettingsSearchIssue,
|
||||
actualSearchResults: issueResults,
|
||||
|
|
Loading…
Reference in a new issue