mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-02 23:05:15 +01:00
Organize Issue Services better (#180432)
The issue services were due for a clean up. They now have this shape: * `platform/issue` has the `IssueMainService`, the service running on the Main process that Desktop takes advantage of * `workbench/contrib/issue` has the contributions and the registered commands * `workbench/services/issue` has the services that the renderer side can use to launch the issue reporter. After this, I will work on getting out the raw IPC calls in the IssueMainService.
This commit is contained in:
@@ -54,7 +54,8 @@ import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemPro
|
||||
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
|
||||
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
||||
import { IIssueMainService, IssueMainService } from 'vs/platform/issue/electron-main/issueMainService';
|
||||
import { IIssueMainService } from 'vs/platform/issue/common/issue';
|
||||
import { IssueMainService } from 'vs/platform/issue/electron-main/issueMainService';
|
||||
import { IKeyboardLayoutMainService, KeyboardLayoutMainService } from 'vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService';
|
||||
import { ILaunchMainService, LaunchMainService } from 'vs/platform/launch/electron-main/launchMainService';
|
||||
import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
||||
// Since data sent through the service is serialized to JSON, functions will be lost, so Color objects
|
||||
// should not be sent as their 'toString' method will be stripped. Instead convert to strings before sending.
|
||||
@@ -95,13 +96,6 @@ export interface ProcessExplorerData extends WindowData {
|
||||
applicationName: string;
|
||||
}
|
||||
|
||||
export interface ICommonIssueService {
|
||||
readonly _serviceBrand: undefined;
|
||||
openReporter(data: IssueReporterData): Promise<void>;
|
||||
openProcessExplorer(data: ProcessExplorerData): Promise<void>;
|
||||
getSystemStatus(): Promise<string>;
|
||||
}
|
||||
|
||||
export interface IssueReporterWindowConfiguration extends ISandboxConfiguration {
|
||||
disableExtensions: boolean;
|
||||
data: IssueReporterData;
|
||||
@@ -115,3 +109,13 @@ export interface IssueReporterWindowConfiguration extends ISandboxConfiguration
|
||||
export interface ProcessExplorerWindowConfiguration extends ISandboxConfiguration {
|
||||
data: ProcessExplorerData;
|
||||
}
|
||||
|
||||
export const IIssueMainService = createDecorator<IIssueMainService>('issueService');
|
||||
|
||||
export interface IIssueMainService {
|
||||
readonly _serviceBrand: undefined;
|
||||
stopTracing(): Promise<void>;
|
||||
openReporter(data: IssueReporterData): Promise<void>;
|
||||
openProcessExplorer(data: ProcessExplorerData): Promise<void>;
|
||||
getSystemStatus(): Promise<string>;
|
||||
}
|
||||
|
||||
@@ -15,8 +15,7 @@ import { IDiagnosticsService, isRemoteDiagnosticError, PerformanceInfo } from 'v
|
||||
import { IDiagnosticsMainService } from 'vs/platform/diagnostics/electron-main/diagnosticsMainService';
|
||||
import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService';
|
||||
import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ICommonIssueService, IssueReporterData, IssueReporterWindowConfiguration, ProcessExplorerData, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue';
|
||||
import { IIssueMainService, IssueReporterData, IssueReporterWindowConfiguration, ProcessExplorerData, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService';
|
||||
import product from 'vs/platform/product/common/product';
|
||||
@@ -33,7 +32,6 @@ import { URI } from 'vs/base/common/uri';
|
||||
import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows';
|
||||
import { Promises, timeout } from 'vs/base/common/async';
|
||||
|
||||
export const IIssueMainService = createDecorator<IIssueMainService>('issueMainService');
|
||||
const processExplorerWindowState = 'issue.processExplorerWindowState';
|
||||
|
||||
interface IBrowserWindowOptions {
|
||||
@@ -45,10 +43,6 @@ interface IBrowserWindowOptions {
|
||||
|
||||
type IStrictWindowState = Required<Pick<IWindowState, 'x' | 'y' | 'width' | 'height'>>;
|
||||
|
||||
export interface IIssueMainService extends ICommonIssueService {
|
||||
stopTracing(): Promise<void>;
|
||||
}
|
||||
|
||||
export class IssueMainService implements IIssueMainService {
|
||||
|
||||
declare readonly _serviceBrand: undefined;
|
||||
|
||||
@@ -10,7 +10,7 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { Extensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions';
|
||||
import { WebIssueService } from 'vs/workbench/contrib/issue/browser/issueService';
|
||||
import { WebIssueService } from 'vs/workbench/services/issue/browser/issueService';
|
||||
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
|
||||
import { BaseIssueContribution } from 'vs/workbench/contrib/issue/common/issue.contribution';
|
||||
|
||||
|
||||
@@ -5,11 +5,8 @@
|
||||
|
||||
import { localize } from 'vs/nls';
|
||||
import { MenuRegistry, MenuId, registerAction2, Action2 } from 'vs/platform/actions/common/actions';
|
||||
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
|
||||
import { NativeIssueService } from 'vs/workbench/services/issue/electron-sandbox/issueService';
|
||||
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
||||
import { IIssueService } from 'vs/platform/issue/electron-sandbox/issue';
|
||||
import { BaseIssueContribution } from 'vs/workbench/contrib/issue/common/issue.contribution';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
@@ -21,12 +18,10 @@ import { INativeEnvironmentService } from 'vs/platform/environment/common/enviro
|
||||
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { INativeHostService } from 'vs/platform/native/common/native';
|
||||
import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress';
|
||||
import { IssueType } from 'vs/platform/issue/common/issue';
|
||||
import { IIssueMainService, IssueType } from 'vs/platform/issue/common/issue';
|
||||
|
||||
//#region Issue Contribution
|
||||
|
||||
registerSingleton(IWorkbenchIssueService, NativeIssueService, InstantiationType.Delayed);
|
||||
|
||||
class NativeIssueContribution extends BaseIssueContribution {
|
||||
|
||||
constructor(
|
||||
@@ -108,7 +103,7 @@ class StopTracing extends Action2 {
|
||||
}
|
||||
|
||||
override async run(accessor: ServicesAccessor): Promise<void> {
|
||||
const issueService = accessor.get(IIssueService);
|
||||
const issueService = accessor.get(IIssueMainService);
|
||||
const environmentService = accessor.get(INativeEnvironmentService);
|
||||
const dialogService = accessor.get(IDialogService);
|
||||
const nativeHostService = accessor.get(INativeHostService);
|
||||
@@ -136,7 +131,7 @@ class StopTracing extends Action2 {
|
||||
registerAction2(StopTracing);
|
||||
|
||||
CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => {
|
||||
return accessor.get(IIssueService).getSystemStatus();
|
||||
return accessor.get(IIssueMainService).getSystemStatus();
|
||||
});
|
||||
|
||||
//#endregion
|
||||
|
||||
+3
-7
@@ -3,11 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ICommonIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services';
|
||||
import { IIssueMainService } from 'vs/platform/issue/common/issue';
|
||||
|
||||
export const IIssueService = createDecorator<IIssueService>('issueService');
|
||||
|
||||
export interface IIssueService extends ICommonIssueService {
|
||||
stopTracing(): Promise<void>;
|
||||
}
|
||||
registerMainProcessRemoteService(IIssueMainService, 'issue');
|
||||
@@ -3,8 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IssueReporterStyles, IssueReporterData, ProcessExplorerData, IssueReporterExtensionData } from 'vs/platform/issue/common/issue';
|
||||
import { IIssueService } from 'vs/platform/issue/electron-sandbox/issue';
|
||||
import { IssueReporterStyles, IssueReporterData, ProcessExplorerData, IssueReporterExtensionData, IIssueMainService } from 'vs/platform/issue/common/issue';
|
||||
import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, editorBackground, editorForeground, listHoverBackground, listHoverForeground, textLinkActiveForeground, inputValidationErrorBackground, inputValidationErrorForeground, listActiveSelectionBackground, listActiveSelectionForeground, listFocusOutline, listFocusBackground, listFocusForeground, activeContrastBorder, scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
@@ -18,13 +17,13 @@ import { platform } from 'vs/base/common/process';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { IWorkbenchAssignmentService } from 'vs/workbench/services/assignment/common/assignmentService';
|
||||
import { IAuthenticationService } from 'vs/workbench/services/authentication/common/authentication';
|
||||
import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services';
|
||||
import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { IIntegrityService } from 'vs/workbench/services/integrity/common/integrity';
|
||||
import { ipcRenderer, process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
|
||||
export class NativeIssueService implements IWorkbenchIssueService {
|
||||
declare readonly _serviceBrand: undefined;
|
||||
@@ -32,7 +31,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
|
||||
private readonly _handlers = new Map<string, IIssueUriRequestHandler>();
|
||||
|
||||
constructor(
|
||||
@IIssueService private readonly issueService: IIssueService,
|
||||
@IIssueMainService private readonly issueMainService: IIssueMainService,
|
||||
@IThemeService private readonly themeService: IThemeService,
|
||||
@IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService,
|
||||
@IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService,
|
||||
@@ -115,7 +114,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
|
||||
githubAccessToken,
|
||||
isSandboxed: process.sandboxed
|
||||
}, dataOverrides);
|
||||
return this.issueService.openReporter(issueReporterData);
|
||||
return this.issueMainService.openReporter(issueReporterData);
|
||||
}
|
||||
|
||||
openProcessExplorer(): Promise<void> {
|
||||
@@ -142,7 +141,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
|
||||
platform: platform,
|
||||
applicationName: this.productService.applicationName
|
||||
};
|
||||
return this.issueService.openProcessExplorer(data);
|
||||
return this.issueMainService.openProcessExplorer(data);
|
||||
}
|
||||
|
||||
registerIssueUriRequestHandler(extensionId: string, handler: IIssueUriRequestHandler): IDisposable {
|
||||
@@ -188,4 +187,4 @@ function getColor(theme: IColorTheme, key: string): string | undefined {
|
||||
return color ? color.toString() : undefined;
|
||||
}
|
||||
|
||||
registerMainProcessRemoteService(IIssueService, 'issue');
|
||||
registerSingleton(IWorkbenchIssueService, NativeIssueService, InstantiationType.Delayed);
|
||||
|
||||
@@ -38,6 +38,7 @@ import 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService';
|
||||
import 'vs/workbench/services/dialogs/electron-sandbox/fileDialogService';
|
||||
import 'vs/workbench/services/workspaces/electron-sandbox/workspacesService';
|
||||
import 'vs/workbench/services/menubar/electron-sandbox/menubarService';
|
||||
import 'vs/workbench/services/issue/electron-sandbox/issueMainService';
|
||||
import 'vs/workbench/services/issue/electron-sandbox/issueService';
|
||||
import 'vs/workbench/services/update/electron-sandbox/updateService';
|
||||
import 'vs/workbench/services/url/electron-sandbox/urlService';
|
||||
|
||||
Reference in New Issue
Block a user