Skip to content

Commit e475926

Browse files
author
Akos Kitta
committed
Show 'progress' indicator during verify/upload.
Closes #575 Closes #1175 Signed-off-by: Akos Kitta <[email protected]>
1 parent f22be3c commit e475926

File tree

13 files changed

+529
-406
lines changed

13 files changed

+529
-406
lines changed

Diff for: arduino-ide-extension/src/browser/contributions/add-zip-library.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@ import URI from '@theia/core/lib/common/uri';
44
import { ConfirmDialog } from '@theia/core/lib/browser/dialogs';
55
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
66
import { ArduinoMenus } from '../menu/arduino-menus';
7-
import {
8-
Installable,
9-
LibraryService,
10-
ResponseServiceClient,
11-
} from '../../common/protocol';
7+
import { LibraryService, ResponseServiceClient } from '../../common/protocol';
8+
import { ExecuteWithProgress } from '../../common/protocol/progressible';
129
import {
1310
SketchContribution,
1411
Command,
@@ -88,7 +85,7 @@ export class AddZipLibrary extends SketchContribution {
8885

8986
private async doInstall(zipUri: string, overwrite?: boolean): Promise<void> {
9087
try {
91-
await Installable.doWithProgress({
88+
await ExecuteWithProgress.doWithProgress({
9289
messageService: this.messageService,
9390
progressText:
9491
nls.localize('arduino/common/processing', 'Processing') +

Diff for: arduino-ide-extension/src/browser/contributions/burn-bootloader.ts

+29-36
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
1-
import { inject, injectable } from '@theia/core/shared/inversify';
1+
import { nls } from '@theia/core/lib/common';
2+
import { injectable } from '@theia/core/shared/inversify';
23
import { ArduinoMenus } from '../menu/arduino-menus';
3-
import { BoardsDataStore } from '../boards/boards-data-store';
4-
import { BoardsServiceProvider } from '../boards/boards-service-provider';
54
import {
6-
CoreServiceContribution,
75
Command,
86
CommandRegistry,
7+
CoreServiceContribution,
98
MenuModelRegistry,
109
} from './contribution';
11-
import { nls } from '@theia/core/lib/common';
1210

1311
@injectable()
1412
export class BurnBootloader extends CoreServiceContribution {
15-
@inject(BoardsDataStore)
16-
protected readonly boardsDataStore: BoardsDataStore;
17-
18-
@inject(BoardsServiceProvider)
19-
protected readonly boardsServiceClientImpl: BoardsServiceProvider;
20-
2113
override registerCommands(registry: CommandRegistry): void {
2214
registry.registerCommand(BurnBootloader.Commands.BURN_BOOTLOADER, {
2315
execute: () => this.burnBootloader(),
@@ -35,32 +27,33 @@ export class BurnBootloader extends CoreServiceContribution {
3527
});
3628
}
3729

38-
async burnBootloader(): Promise<void> {
30+
private async burnBootloader(): Promise<void> {
31+
const { boardsConfig } = this.boardsServiceProvider;
32+
const port = boardsConfig.selectedPort;
33+
const [fqbn, { selectedProgrammer: programmer }, verify, verbose] =
34+
await Promise.all([
35+
this.boardsDataStore.appendConfigToFqbn(
36+
boardsConfig.selectedBoard?.fqbn
37+
),
38+
this.boardsDataStore.getData(boardsConfig.selectedBoard?.fqbn),
39+
this.preferences.get('arduino.upload.verify'),
40+
this.preferences.get('arduino.upload.verbose'),
41+
]);
3942
try {
40-
const { boardsConfig } = this.boardsServiceClientImpl;
41-
const port = boardsConfig.selectedPort;
42-
const [fqbn, { selectedProgrammer: programmer }, verify, verbose] =
43-
await Promise.all([
44-
this.boardsDataStore.appendConfigToFqbn(
45-
boardsConfig.selectedBoard?.fqbn
46-
),
47-
this.boardsDataStore.getData(boardsConfig.selectedBoard?.fqbn),
48-
this.preferences.get('arduino.upload.verify'),
49-
this.preferences.get('arduino.upload.verbose'),
50-
]);
51-
52-
const board = {
53-
...boardsConfig.selectedBoard,
54-
name: boardsConfig.selectedBoard?.name || '',
55-
fqbn,
56-
};
57-
this.outputChannelManager.getChannel('Arduino').clear();
58-
await this.coreService.burnBootloader({
59-
board,
60-
programmer,
61-
port,
62-
verify,
63-
verbose,
43+
await this.doWithProgress({
44+
progressText: nls.localize(
45+
'arduino/bootloader/burningBootloader',
46+
'Burning bootloader...'
47+
),
48+
task: (progressId, coreService) =>
49+
coreService.burnBootloader({
50+
fqbn,
51+
programmer,
52+
port,
53+
verify,
54+
verbose,
55+
progressId,
56+
}),
6457
});
6558
this.messageService.info(
6659
nls.localize(

Diff for: arduino-ide-extension/src/browser/contributions/contribution.ts

+34-7
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,16 @@ import {
4949
Sketch,
5050
CoreService,
5151
CoreError,
52+
ResponseServiceClient,
5253
} from '../../common/protocol';
5354
import { ArduinoPreferences } from '../arduino-preferences';
5455
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
55-
import { CoreErrorHandler } from './core-error-handler';
5656
import { nls } from '@theia/core';
5757
import { OutputChannelManager } from '../theia/output/output-channel';
5858
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
59+
import { ExecuteWithProgress } from '../../common/protocol/progressible';
60+
import { BoardsServiceProvider } from '../boards/boards-service-provider';
61+
import { BoardsDataStore } from '../boards/boards-data-store';
5962

6063
export {
6164
Command,
@@ -167,18 +170,23 @@ export abstract class SketchContribution extends Contribution {
167170
}
168171

169172
@injectable()
170-
export class CoreServiceContribution extends SketchContribution {
171-
@inject(CoreService)
172-
protected readonly coreService: CoreService;
173+
export abstract class CoreServiceContribution extends SketchContribution {
174+
@inject(BoardsDataStore)
175+
protected readonly boardsDataStore: BoardsDataStore;
176+
177+
@inject(BoardsServiceProvider)
178+
protected readonly boardsServiceProvider: BoardsServiceProvider;
173179

174-
@inject(CoreErrorHandler)
175-
protected readonly coreErrorHandler: CoreErrorHandler;
180+
@inject(CoreService)
181+
private readonly coreService: CoreService;
176182

177183
@inject(ClipboardService)
178184
private readonly clipboardService: ClipboardService;
179185

186+
@inject(ResponseServiceClient)
187+
private readonly responseService: ResponseServiceClient;
188+
180189
protected handleError(error: unknown): void {
181-
this.coreErrorHandler.tryHandle(error);
182190
this.tryToastErrorMessage(error);
183191
}
184192

@@ -214,6 +222,25 @@ export class CoreServiceContribution extends SketchContribution {
214222
throw error;
215223
}
216224
}
225+
226+
protected async doWithProgress<T>(options: {
227+
progressText: string;
228+
keepOutput?: boolean;
229+
task: (progressId: string, coreService: CoreService) => Promise<T>;
230+
}): Promise<T> {
231+
const { progressText, keepOutput, task } = options;
232+
this.outputChannelManager
233+
.getChannel('Arduino')
234+
.show({ preserveFocus: true });
235+
const result = await ExecuteWithProgress.doWithProgress({
236+
messageService: this.messageService,
237+
responseService: this.responseService,
238+
progressText,
239+
run: ({ progressId }) => task(progressId, this.coreService),
240+
keepOutput,
241+
});
242+
return result;
243+
}
217244
}
218245

219246
export namespace Contribution {

0 commit comments

Comments
 (0)