Show the CLI version from the about dialog.

Signed-off-by: Akos Kitta <kittaakos@typefox.io>
This commit is contained in:
Akos Kitta 2019-10-08 10:15:15 +02:00
parent cebe15ef69
commit 2f84b5c6b7
4 changed files with 43 additions and 7 deletions

View File

@ -68,6 +68,8 @@ import { ArduinoTabBarDecoratorService } from './shell/arduino-tab-bar-decorator
import { ProblemManager } from '@theia/markers/lib/browser'; import { ProblemManager } from '@theia/markers/lib/browser';
import { ArduinoProblemManager } from './markers/arduino-problem-manager'; import { ArduinoProblemManager } from './markers/arduino-problem-manager';
import { BoardsAutoInstaller } from './boards/boards-auto-installer'; import { BoardsAutoInstaller } from './boards/boards-auto-installer';
import { AboutDialog } from '@theia/core/lib/browser/about-dialog';
import { ArduinoAboutDialog } from './customization/arduino-about-dialog';
const ElementQueries = require('css-element-queries/src/ElementQueries'); const ElementQueries = require('css-element-queries/src/ElementQueries');
export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => { export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => {
@ -175,13 +177,12 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
id: MonitorWidget.ID, id: MonitorWidget.ID,
createWidget: () => context.container.get(MonitorWidget) createWidget: () => context.container.get(MonitorWidget)
})); }));
// Frontend binding for the monitor service. // Frontend binding for the monitor service
bind(MonitorService).toDynamicValue(context => { bind(MonitorService).toDynamicValue(context => {
const connection = context.container.get(WebSocketConnectionProvider); const connection = context.container.get(WebSocketConnectionProvider);
const client = context.container.get(MonitorServiceClientImpl); const client = context.container.get(MonitorServiceClientImpl);
return connection.createProxy(MonitorServicePath, client); return connection.createProxy(MonitorServicePath, client);
}).inSingletonScope(); }).inSingletonScope();
// MonitorConnection
bind(MonitorConnection).toSelf().inSingletonScope(); bind(MonitorConnection).toSelf().inSingletonScope();
// Monitor service client to receive and delegate notifications from the backend. // Monitor service client to receive and delegate notifications from the backend.
bind(MonitorServiceClientImpl).toSelf().inSingletonScope(); bind(MonitorServiceClientImpl).toSelf().inSingletonScope();
@ -197,7 +198,7 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
const themeService = ThemeService.get(); const themeService = ThemeService.get();
themeService.register(...ArduinoTheme.themes); themeService.register(...ArduinoTheme.themes);
// customizing default theia // Customizing default Theia layout
if (!ArduinoAdvancedMode.TOGGLED) { if (!ArduinoAdvancedMode.TOGGLED) {
unbind(OutlineViewContribution); unbind(OutlineViewContribution);
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope(); bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
@ -218,24 +219,29 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
unbind(SearchInWorkspaceFrontendContribution); unbind(SearchInWorkspaceFrontendContribution);
bind(SearchInWorkspaceFrontendContribution).to(SilentSearchInWorkspaceContribution).inSingletonScope(); bind(SearchInWorkspaceFrontendContribution).to(SilentSearchInWorkspaceContribution).inSingletonScope();
} else { } else {
// We use this CSS class on the body to modify the visibbility of the close button for the editors and views. // We use this CSS class on the body to modify the visibility of the close button for the editors and views.
document.body.classList.add(ArduinoAdvancedMode.LS_ID); document.body.classList.add(ArduinoAdvancedMode.LS_ID);
} }
unbind(FrontendApplication); unbind(FrontendApplication);
bind(FrontendApplication).to(ArduinoFrontendApplication).inSingletonScope(); bind(FrontendApplication).to(ArduinoFrontendApplication).inSingletonScope();
// monaco customizations // Monaco customizations
unbind(MonacoEditorProvider); unbind(MonacoEditorProvider);
bind(ArduinoMonacoEditorProvider).toSelf().inSingletonScope(); bind(ArduinoMonacoEditorProvider).toSelf().inSingletonScope();
bind(MonacoEditorProvider).toService(ArduinoMonacoEditorProvider); bind(MonacoEditorProvider).toService(ArduinoMonacoEditorProvider);
// decorator customizations // Decorator customizations
unbind(TabBarDecoratorService); unbind(TabBarDecoratorService);
bind(ArduinoTabBarDecoratorService).toSelf().inSingletonScope(); bind(ArduinoTabBarDecoratorService).toSelf().inSingletonScope();
bind(TabBarDecoratorService).toService(ArduinoTabBarDecoratorService); bind(TabBarDecoratorService).toService(ArduinoTabBarDecoratorService);
// problem markers // Problem markers
unbind(ProblemManager); unbind(ProblemManager);
bind(ArduinoProblemManager).toSelf().inSingletonScope(); bind(ArduinoProblemManager).toSelf().inSingletonScope();
bind(ProblemManager).toService(ArduinoProblemManager); bind(ProblemManager).toService(ArduinoProblemManager);
// About dialog to show the CLI version
unbind(AboutDialog);
bind(ArduinoAboutDialog).toSelf().inSingletonScope();
bind(AboutDialog).toService(ArduinoAboutDialog);
}); });

View File

@ -0,0 +1,25 @@
import { injectable, inject, postConstruct } from 'inversify';
import { AboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog';
import { ConfigService } from '../../common/protocol/config-service';
@injectable()
export class ArduinoAboutDialog extends AboutDialog {
@inject(ConfigService)
protected readonly configService: ConfigService;
@postConstruct()
protected async init(): Promise<void> {
const [, version] = await Promise.all([super.init(), this.configService.getVersion()]);
if (version) {
const { firstChild } = this.contentNode;
if (firstChild instanceof HTMLElement && firstChild.classList.contains(ABOUT_CONTENT_CLASS)) {
const cliVersion = document.createElement('div');
cliVersion.textContent = version;
firstChild.appendChild(cliVersion);
// TODO: anchor to the commit in the `arduino-cli` repository.
}
}
}
}

View File

@ -2,6 +2,7 @@ export const ConfigServicePath = '/services/config-service';
export const ConfigService = Symbol('ConfigService'); export const ConfigService = Symbol('ConfigService');
export interface ConfigService { export interface ConfigService {
getVersion(): Promise<string>;
getConfiguration(): Promise<Config>; getConfiguration(): Promise<Config>;
isInDataDir(uri: string): Promise<boolean>; isInDataDir(uri: string): Promise<boolean>;
isInSketchDir(uri: string): Promise<boolean>; isInSketchDir(uri: string): Promise<boolean>;

View File

@ -13,6 +13,10 @@ export class ConfigServiceImpl implements ConfigService {
return this.cli.getDefaultConfig(); return this.cli.getDefaultConfig();
} }
async getVersion(): Promise<string> {
return this.cli.getVersion();
}
async isInDataDir(uri: string): Promise<boolean> { async isInDataDir(uri: string): Promise<boolean> {
return this.getConfiguration().then(({ dataDirUri }) => new URI(dataDirUri).isEqualOrParent(new URI(uri))); return this.getConfiguration().then(({ dataDirUri }) => new URI(dataDirUri).isEqualOrParent(new URI(uri)));
} }