提交 077c6f9f 编写于 作者: R Rob Lourens

Split IssueService/RawIssueService so renderer proc consumers have a simpler...

Split IssueService/RawIssueService so renderer proc consumers have a simpler interface to launch the issue reporter
上级 db5143d5
......@@ -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>;
}
\ No newline at end of file
}
......@@ -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;
......
/*---------------------------------------------------------------------------------------------
* 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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册