Skip to content

Commit 2f84b5c

Browse files
author
Akos Kitta
committed
Show the CLI version from the about dialog.
Signed-off-by: Akos Kitta <kittaakos@typefox.io>
1 parent cebe15e commit 2f84b5c

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

arduino-ide-extension/src/browser/arduino-frontend-module.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ import { ArduinoTabBarDecoratorService } from './shell/arduino-tab-bar-decorator
6868
import { ProblemManager } from '@theia/markers/lib/browser';
6969
import { ArduinoProblemManager } from './markers/arduino-problem-manager';
7070
import { BoardsAutoInstaller } from './boards/boards-auto-installer';
71+
import { AboutDialog } from '@theia/core/lib/browser/about-dialog';
72+
import { ArduinoAboutDialog } from './customization/arduino-about-dialog';
7173
const ElementQueries = require('css-element-queries/src/ElementQueries');
7274

7375
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
175177
id: MonitorWidget.ID,
176178
createWidget: () => context.container.get(MonitorWidget)
177179
}));
178-
// Frontend binding for the monitor service.
180+
// Frontend binding for the monitor service
179181
bind(MonitorService).toDynamicValue(context => {
180182
const connection = context.container.get(WebSocketConnectionProvider);
181183
const client = context.container.get(MonitorServiceClientImpl);
182184
return connection.createProxy(MonitorServicePath, client);
183185
}).inSingletonScope();
184-
// MonitorConnection
185186
bind(MonitorConnection).toSelf().inSingletonScope();
186187
// Monitor service client to receive and delegate notifications from the backend.
187188
bind(MonitorServiceClientImpl).toSelf().inSingletonScope();
@@ -197,7 +198,7 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
197198
const themeService = ThemeService.get();
198199
themeService.register(...ArduinoTheme.themes);
199200

200-
// customizing default theia
201+
// Customizing default Theia layout
201202
if (!ArduinoAdvancedMode.TOGGLED) {
202203
unbind(OutlineViewContribution);
203204
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
@@ -218,24 +219,29 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
218219
unbind(SearchInWorkspaceFrontendContribution);
219220
bind(SearchInWorkspaceFrontendContribution).to(SilentSearchInWorkspaceContribution).inSingletonScope();
220221
} else {
221-
// We use this CSS class on the body to modify the visibbility of the close button for the editors and views.
222+
// We use this CSS class on the body to modify the visibility of the close button for the editors and views.
222223
document.body.classList.add(ArduinoAdvancedMode.LS_ID);
223224
}
224225
unbind(FrontendApplication);
225226
bind(FrontendApplication).to(ArduinoFrontendApplication).inSingletonScope();
226227

227-
// monaco customizations
228+
// Monaco customizations
228229
unbind(MonacoEditorProvider);
229230
bind(ArduinoMonacoEditorProvider).toSelf().inSingletonScope();
230231
bind(MonacoEditorProvider).toService(ArduinoMonacoEditorProvider);
231232

232-
// decorator customizations
233+
// Decorator customizations
233234
unbind(TabBarDecoratorService);
234235
bind(ArduinoTabBarDecoratorService).toSelf().inSingletonScope();
235236
bind(TabBarDecoratorService).toService(ArduinoTabBarDecoratorService);
236237

237-
// problem markers
238+
// Problem markers
238239
unbind(ProblemManager);
239240
bind(ArduinoProblemManager).toSelf().inSingletonScope();
240241
bind(ProblemManager).toService(ArduinoProblemManager);
242+
243+
// About dialog to show the CLI version
244+
unbind(AboutDialog);
245+
bind(ArduinoAboutDialog).toSelf().inSingletonScope();
246+
bind(AboutDialog).toService(ArduinoAboutDialog);
241247
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { injectable, inject, postConstruct } from 'inversify';
2+
import { AboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog';
3+
import { ConfigService } from '../../common/protocol/config-service';
4+
5+
@injectable()
6+
export class ArduinoAboutDialog extends AboutDialog {
7+
8+
@inject(ConfigService)
9+
protected readonly configService: ConfigService;
10+
11+
@postConstruct()
12+
protected async init(): Promise<void> {
13+
const [, version] = await Promise.all([super.init(), this.configService.getVersion()]);
14+
if (version) {
15+
const { firstChild } = this.contentNode;
16+
if (firstChild instanceof HTMLElement && firstChild.classList.contains(ABOUT_CONTENT_CLASS)) {
17+
const cliVersion = document.createElement('div');
18+
cliVersion.textContent = version;
19+
firstChild.appendChild(cliVersion);
20+
// TODO: anchor to the commit in the `arduino-cli` repository.
21+
}
22+
}
23+
}
24+
25+
}

arduino-ide-extension/src/common/protocol/config-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export const ConfigServicePath = '/services/config-service';
22
export const ConfigService = Symbol('ConfigService');
33

44
export interface ConfigService {
5+
getVersion(): Promise<string>;
56
getConfiguration(): Promise<Config>;
67
isInDataDir(uri: string): Promise<boolean>;
78
isInSketchDir(uri: string): Promise<boolean>;

arduino-ide-extension/src/node/config-service-impl.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ export class ConfigServiceImpl implements ConfigService {
1313
return this.cli.getDefaultConfig();
1414
}
1515

16+
async getVersion(): Promise<string> {
17+
return this.cli.getVersion();
18+
}
19+
1620
async isInDataDir(uri: string): Promise<boolean> {
1721
return this.getConfiguration().then(({ dataDirUri }) => new URI(dataDirUri).isEqualOrParent(new URI(uri)));
1822
}

0 commit comments

Comments
 (0)