Skip to content

Commit 05af641

Browse files
author
Akos Kitta
committed
Defer loading boards until the app is ready.
Signed-off-by: Akos Kitta <[email protected]>
1 parent efe7399 commit 05af641

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

arduino-ide-extension/src/browser/boards/boards-config-dialog-widget.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export class BoardsConfigDialogWidget extends ReactWidget {
5555
onConfigChange={this.fireConfigChanged}
5656
onFocusNodeSet={this.setFocusNode}
5757
onFilteredTextDidChangeEvent={this.onFilterTextDidChangeEmitter.event}
58+
onAppStateDidChange={this.notificationCenter.onAppStateDidChange}
5859
/>
5960
</div>
6061
);

arduino-ide-extension/src/browser/boards/boards-config.tsx

+13-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
} from './boards-service-provider';
1717
import { naturalCompare } from '../../common/utils';
1818
import { nls } from '@theia/core/lib/common';
19+
import { FrontendApplicationState } from '@theia/core/lib/common/frontend-application-state';
1920

2021
export namespace BoardsConfig {
2122
export interface Config {
@@ -29,6 +30,7 @@ export namespace BoardsConfig {
2930
readonly onConfigChange: (config: Config) => void;
3031
readonly onFocusNodeSet: (element: HTMLElement | undefined) => void;
3132
readonly onFilteredTextDidChangeEvent: Event<string>;
33+
readonly onAppStateDidChange: Event<FrontendApplicationState>;
3234
}
3335

3436
export interface State extends Config {
@@ -99,14 +101,18 @@ export class BoardsConfig extends React.Component<
99101
};
100102
}
101103

102-
override componentDidMount() {
103-
this.updateBoards();
104-
this.updatePorts(
105-
this.props.boardsServiceProvider.availableBoards
106-
.map(({ port }) => port)
107-
.filter(notEmpty)
108-
);
104+
override componentDidMount(): void {
109105
this.toDispose.pushAll([
106+
this.props.onAppStateDidChange((state) => {
107+
if (state === 'ready') {
108+
this.updateBoards();
109+
this.updatePorts(
110+
this.props.boardsServiceProvider.availableBoards
111+
.map(({ port }) => port)
112+
.filter(notEmpty)
113+
);
114+
}
115+
}),
110116
this.props.notificationCenter.onAttachedBoardsChanged((event) =>
111117
this.updatePorts(
112118
event.newState.ports,

arduino-ide-extension/src/browser/notification-center.ts

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import {
1818
Config,
1919
Sketch,
2020
} from '../common/protocol';
21+
import {
22+
FrontendApplicationStateService,
23+
FrontendApplicationState,
24+
} from '@theia/core/lib/browser/frontend-application-state';
2125

2226
@injectable()
2327
export class NotificationCenter
@@ -26,6 +30,9 @@ export class NotificationCenter
2630
@inject(NotificationServiceServer)
2731
protected readonly server: JsonRpcProxy<NotificationServiceServer>;
2832

33+
@inject(FrontendApplicationStateService)
34+
private readonly appStateService: FrontendApplicationStateService;
35+
2936
protected readonly indexUpdatedEmitter = new Emitter<void>();
3037
protected readonly daemonStartedEmitter = new Emitter<string>();
3138
protected readonly daemonStoppedEmitter = new Emitter<void>();
@@ -49,6 +56,8 @@ export class NotificationCenter
4956
protected readonly recentSketchesChangedEmitter = new Emitter<{
5057
sketches: Sketch[];
5158
}>();
59+
private readonly onAppStateDidChangeEmitter =
60+
new Emitter<FrontendApplicationState>();
5261

5362
protected readonly toDispose = new DisposableCollection(
5463
this.indexUpdatedEmitter,
@@ -72,10 +81,16 @@ export class NotificationCenter
7281
readonly onLibraryUninstalled = this.libraryUninstalledEmitter.event;
7382
readonly onAttachedBoardsChanged = this.attachedBoardsChangedEmitter.event;
7483
readonly onRecentSketchesChanged = this.recentSketchesChangedEmitter.event;
84+
readonly onAppStateDidChange = this.onAppStateDidChangeEmitter.event;
7585

7686
@postConstruct()
7787
protected init(): void {
7888
this.server.setClient(this);
89+
this.toDispose.push(
90+
this.appStateService.onStateChanged((state) =>
91+
this.onAppStateDidChangeEmitter.fire(state)
92+
)
93+
);
7994
}
8095

8196
onStop(): void {

0 commit comments

Comments
 (0)