Skip to content

Commit

Permalink
fixup! Introduce SCM Plugin-Api
Browse files Browse the repository at this point in the history
  • Loading branch information
vinokurig committed Feb 8, 2019
1 parent d991632 commit a5213df
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 43 deletions.
18 changes: 7 additions & 11 deletions packages/git/src/browser/git-view-contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
} from '@theia/core';
import {
AbstractViewContribution, StatusBar, DiffUris, StatusBarEntry,
FrontendApplicationContribution, FrontendApplication, Widget, StatusBarAlignment
FrontendApplicationContribution, FrontendApplication, Widget
} from '@theia/core/lib/browser';
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
import { EditorManager, EditorWidget, EditorOpenerOptions, EditorContextMenu, EDITOR_CONTEXT_MENU } from '@theia/editor/lib/browser';
Expand All @@ -37,7 +37,7 @@ import { GitQuickOpenService, GitAction } from './git-quick-open-service';
import { GitSyncService } from './git-sync-service';
import { WorkspaceService } from '@theia/workspace/lib/browser';
import { GitPrompt } from '../common/git-prompt';
import { ScmRepository, ScmService, StatusBarCommand } from '@theia/scm/lib/common';
import { ScmRepository, ScmService, ScmCommand } from '@theia/scm/lib/common';
import { GitRepositoryProvider } from './git-repository-provider';

export const GIT_WIDGET_FACTORY_ID = 'git';
Expand Down Expand Up @@ -128,7 +128,7 @@ export class GitViewContribution extends AbstractViewContribution<GitWidget>

protected toDispose = new DisposableCollection();

private readonly onDidChangeCommandEmitterMap: Map<string, Emitter<StatusBarCommand[]>> = new Map();
private readonly onDidChangeCommandEmitterMap: Map<string, Emitter<ScmCommand[]>> = new Map();
private readonly onDidChangeRepositoryEmitterMap: Map<string, Emitter<void>> = new Map();
private dirtyRepositories: Repository[] = [];

Expand Down Expand Up @@ -176,8 +176,6 @@ export class GitViewContribution extends AbstractViewContribution<GitWidget>
onDidChangeCommandEmitter.fire([{
id: GIT_COMMANDS.CHANGE_REPOSITORY.id,
text: `$(database) ${path.base}`,
alignment: StatusBarAlignment.LEFT,
priority: 102,
command: GIT_COMMANDS.CHANGE_REPOSITORY.id,
tooltip: path.toString()
}]);
Expand Down Expand Up @@ -214,8 +212,6 @@ export class GitViewContribution extends AbstractViewContribution<GitWidget>
onDidChangeCommandEmitter.fire([{
id: GIT_COMMANDS.CHECKOUT.id,
text: `$(code-fork) ${branch}${dirty}`,
alignment: StatusBarAlignment.LEFT,
priority: 101,
command: GIT_COMMANDS.CHECKOUT.id
}]);
}
Expand Down Expand Up @@ -255,7 +251,7 @@ export class GitViewContribution extends AbstractViewContribution<GitWidget>
registerScmProvider(repository: Repository): ScmRepository {
const uri = repository.localUri;
const disposableCollection = new DisposableCollection();
const onDidChangeStatusBarCommandsEmitter = new Emitter<StatusBarCommand[]>();
const onDidChangeStatusBarCommandsEmitter = new Emitter<ScmCommand[]>();
const onDidChangeResourcesEmitter = new Emitter<void>();
const onDidChangeRepositoryEmitter = new Emitter<void>();
this.onDidChangeCommandEmitterMap.set(uri, onDidChangeStatusBarCommandsEmitter);
Expand Down Expand Up @@ -514,9 +510,9 @@ export class GitViewContribution extends AbstractViewContribution<GitWidget>
if (onDidChangeCommandEmitter) {
onDidChangeCommandEmitter.fire([{
id: 'vcs-sync-status',
alignment: StatusBarAlignment.LEFT,
priority: 100,
...entry
text: entry.text,
tooltip: entry.tooltip,
command: entry.command,
}]);
}
} else {
Expand Down
6 changes: 3 additions & 3 deletions packages/plugin-ext/src/api/plugin-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ import { IJSONSchema, IJSONSchemaSnippet } from '@theia/core/lib/common/json-sch
import { DebuggerDescription } from '@theia/debug/lib/common/debug-service';
import { DebugProtocol } from 'vscode-debugprotocol';
import { SymbolInformation } from 'vscode-languageserver-types';
import { StatusBarCommand } from '@theia/scm/lib/common';
import { ScmCommand } from '@theia/scm/lib/common';

export interface PluginInitData {
plugins: PluginMetadata[];
Expand Down Expand Up @@ -477,8 +477,8 @@ export interface SourceControlProviderFeatures {
hasQuickDiffProvider?: boolean;
count?: number;
commitTemplate?: string;
acceptInputCommand?: StatusBarCommand;
statusBarCommands?: StatusBarCommand[];
acceptInputCommand?: ScmCommand;
statusBarCommands?: ScmCommand[];
}

export interface SourceControlGroupFeatures {
Expand Down
12 changes: 6 additions & 6 deletions packages/plugin-ext/src/main/browser/scm-main.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand Down Expand Up @@ -29,7 +29,7 @@ import {
ScmResourceDecorations,
ScmResourceGroup,
ScmService,
StatusBarCommand
ScmCommand
} from '@theia/scm/lib/common';
import { RPCProtocol } from '../../api/rpc-protocol';
import { interfaces } from 'inversify';
Expand Down Expand Up @@ -128,7 +128,7 @@ class ScmProviderImpl implements ScmProvider {
private onDidChangeEmitter = new Emitter<void>();
private onDidChangeResourcesEmitter = new Emitter<void>();
private onDidChangeCommitTemplateEmitter = new Emitter<string>();
private onDidChangeStatusBarCommandsEmitter = new Emitter<StatusBarCommand[]>();
private onDidChangeStatusBarCommandsEmitter = new Emitter<ScmCommand[]>();
private features: SourceControlProviderFeatures = {};
private groupsMap: Map<number, ScmResourceGroup> = new Map();
private disposableCollection: DisposableCollection = new DisposableCollection();
Expand Down Expand Up @@ -175,11 +175,11 @@ class ScmProviderImpl implements ScmProvider {
return this.features.commitTemplate;
}

get acceptInputCommand(): StatusBarCommand | undefined {
get acceptInputCommand(): ScmCommand | undefined {
return this.features.acceptInputCommand;
}

get statusBarCommands(): StatusBarCommand[] | undefined {
get statusBarCommands(): ScmCommand[] | undefined {
return this.features.statusBarCommands;
}

Expand All @@ -191,7 +191,7 @@ class ScmProviderImpl implements ScmProvider {
return this.onDidChangeCommitTemplateEmitter.event;
}

get onDidChangeStatusBarCommands(): Event<StatusBarCommand[]> {
get onDidChangeStatusBarCommands(): Event<ScmCommand[]> {
return this.onDidChangeStatusBarCommandsEmitter.event;
}

Expand Down
9 changes: 4 additions & 5 deletions packages/plugin-ext/src/plugin/scm.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand All @@ -17,7 +17,7 @@
import * as theia from '@theia/plugin';
import { CommandRegistryExt, Plugin as InternalPlugin, PLUGIN_RPC_CONTEXT, ScmExt, ScmMain } from '../api/plugin-api';
import { RPCProtocol } from '../api/rpc-protocol';
import { StatusBarCommand } from '@theia/scm/lib/common/scm';
import { ScmCommand } from '@theia/scm/lib/common';
import { CancellationToken } from '@theia/core';
import { UriComponents } from '../common/uri-components';
import URI from '@theia/core/lib/common/uri';
Expand Down Expand Up @@ -183,10 +183,9 @@ class SourceControlImpl implements theia.SourceControl {
this._acceptInputCommand = acceptInputCommand;

if (acceptInputCommand) {
const command: StatusBarCommand = {
const command: ScmCommand = {
id: acceptInputCommand.id,
text: acceptInputCommand.label ? acceptInputCommand.label : '',
alignment: 1
text: acceptInputCommand.label ? acceptInputCommand.label : ''
};
this.proxy.$updateSourceControl(this.handle, { acceptInputCommand: command });
}
Expand Down
2 changes: 1 addition & 1 deletion packages/scm/compile.tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
"include": [
"src"
]
}
}
19 changes: 13 additions & 6 deletions packages/scm/src/browser/scm-contribution.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand All @@ -13,18 +13,25 @@
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
import { injectable, inject } from 'inversify';
import { FrontendApplicationContribution, StatusBar } from '@theia/core/lib/browser';
import { ScmService, StatusBarCommand } from '../common/scm';
import { inject, injectable } from 'inversify';
import { FrontendApplicationContribution, StatusBar, StatusBarAlignment, StatusBarEntry } from '@theia/core/lib/browser';
import { ScmCommand, ScmService } from '../common/scm';

@injectable()
export class ScmContribution implements FrontendApplicationContribution {
@inject(StatusBar) protected readonly statusBar: StatusBar;
@inject(ScmService) protected readonly scmService: ScmService;
onStart(): void {
const refresh = (commands: StatusBarCommand[]) => {
const refresh = (commands: ScmCommand[]) => {
commands.forEach(command => {
this.statusBar.setElement(command.id, command);
const statusBaCommand: StatusBarEntry = {
text: command.text,
tooltip: command.tooltip,
command: command.command,
alignment: StatusBarAlignment.LEFT,
priority: 100
};
this.statusBar.setElement(command.id, statusBaCommand);
});
};
this.scmService.onDidAddRepository(repository => {
Expand Down
4 changes: 2 additions & 2 deletions packages/scm/src/browser/scm-frontend-module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2017 TypeFox and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand All @@ -16,7 +16,7 @@

import { ContainerModule } from 'inversify';
import { ScmContribution } from './scm-contribution';
import { ScmServiceImpl } from './scmService';
import { ScmServiceImpl } from './scm-service-impl';
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
import { ScmService } from '../common/scm';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand Down
2 changes: 1 addition & 1 deletion packages/scm/src/common/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand Down
16 changes: 9 additions & 7 deletions packages/scm/src/common/scm.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (C) 2018 Red Hat, Inc. and others.
* Copyright (C) 2019 Red Hat, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
Expand All @@ -15,7 +15,6 @@
********************************************************************************/
import URI from '@theia/core/lib/common/uri';
import { Disposable, Event } from '@theia/core/lib/common';
import { StatusBarEntry } from '@theia/core/lib/browser';

export interface ScmResourceDecorations {
icon?: URI;
Expand Down Expand Up @@ -57,16 +56,19 @@ export interface ScmProvider extends Disposable {
readonly count?: number;
readonly commitTemplate?: string;
readonly onDidChangeCommitTemplate?: Event<string>;
readonly onDidChangeStatusBarCommands?: Event<StatusBarCommand[]>;
readonly acceptInputCommand?: StatusBarCommand;
readonly statusBarCommands?: StatusBarCommand[];
readonly onDidChangeStatusBarCommands?: Event<ScmCommand[]>;
readonly acceptInputCommand?: ScmCommand;
readonly statusBarCommands?: ScmCommand[];
readonly onDidChange: Event<void>;

getOriginalResource(uri: URI): Promise<URI | undefined>;
}

export interface StatusBarCommand extends StatusBarEntry {
id: string
export interface ScmCommand {
id: string;
text: string;
tooltip?: string;
command?: string;
}

export const enum InputValidationType {
Expand Down

0 comments on commit a5213df

Please sign in to comment.