Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2a325a5

Browse filesBrowse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
feat: cancelable verify+upload
Closes #1199 Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
1 parent 347e3d8 commit 2a325a5
Copy full SHA for 2a325a5

File tree

13 files changed

+307
-180
lines changed
Filter options

13 files changed

+307
-180
lines changed

‎arduino-ide-extension/src/browser/contributions/burn-bootloader.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/contributions/burn-bootloader.ts
+9-5Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ export class BurnBootloader extends CoreServiceContribution {
3737
'arduino/bootloader/burningBootloader',
3838
'Burning bootloader...'
3939
),
40-
task: (progressId, coreService) =>
41-
coreService.burnBootloader({
42-
...options,
43-
progressId,
44-
}),
40+
task: (progressId, coreService, token) =>
41+
coreService.burnBootloader(
42+
{
43+
...options,
44+
progressId,
45+
},
46+
token
47+
),
48+
cancelable: true,
4549
});
4650
this.messageService.info(
4751
nls.localize(

‎arduino-ide-extension/src/browser/contributions/contribution.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/contributions/contribution.ts
+72-52Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,89 @@
1+
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
12
import {
2-
inject,
3-
injectable,
4-
interfaces,
5-
postConstruct,
6-
} from '@theia/core/shared/inversify';
7-
import URI from '@theia/core/lib/common/uri';
8-
import { ILogger } from '@theia/core/lib/common/logger';
9-
import {
10-
Disposable,
11-
DisposableCollection,
12-
} from '@theia/core/lib/common/disposable';
13-
import { Saveable } from '@theia/core/lib/browser/saveable';
14-
import { FileService } from '@theia/filesystem/lib/browser/file-service';
15-
import { MaybePromise } from '@theia/core/lib/common/types';
16-
import { LabelProvider } from '@theia/core/lib/browser/label-provider';
17-
import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
18-
import { MessageService } from '@theia/core/lib/common/message-service';
19-
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
20-
import { open, OpenerService } from '@theia/core/lib/browser/opener-service';
21-
import {
22-
MenuModelRegistry,
23-
MenuContribution,
24-
} from '@theia/core/lib/common/menu';
3+
FrontendApplication,
4+
FrontendApplicationContribution,
5+
} from '@theia/core/lib/browser/frontend-application';
6+
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
257
import {
26-
KeybindingRegistry,
278
KeybindingContribution,
9+
KeybindingRegistry,
2810
} from '@theia/core/lib/browser/keybinding';
11+
import { LabelProvider } from '@theia/core/lib/browser/label-provider';
12+
import { OpenerService, open } from '@theia/core/lib/browser/opener-service';
13+
import { Saveable } from '@theia/core/lib/browser/saveable';
14+
import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell';
2915
import {
3016
TabBarToolbarContribution,
3117
TabBarToolbarRegistry,
3218
} from '@theia/core/lib/browser/shell/tab-bar-toolbar';
33-
import {
34-
FrontendApplicationContribution,
35-
FrontendApplication,
36-
} from '@theia/core/lib/browser/frontend-application';
19+
import { CancellationToken } from '@theia/core/lib/common/cancellation';
3720
import {
3821
Command,
39-
CommandRegistry,
4022
CommandContribution,
23+
CommandRegistry,
4124
CommandService,
4225
} from '@theia/core/lib/common/command';
43-
import { SettingsService } from '../dialogs/settings/settings';
4426
import {
45-
CurrentSketch,
46-
SketchesServiceClientImpl,
47-
} from '../sketches-service-client-impl';
27+
Disposable,
28+
DisposableCollection,
29+
} from '@theia/core/lib/common/disposable';
30+
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
31+
import { ILogger } from '@theia/core/lib/common/logger';
32+
import {
33+
MenuContribution,
34+
MenuModelRegistry,
35+
} from '@theia/core/lib/common/menu';
36+
import { MessageService } from '@theia/core/lib/common/message-service';
37+
import { MessageType } from '@theia/core/lib/common/message-service-protocol';
38+
import { nls } from '@theia/core/lib/common/nls';
39+
import { MaybePromise, isObject } from '@theia/core/lib/common/types';
40+
import URI from '@theia/core/lib/common/uri';
41+
import {
42+
inject,
43+
injectable,
44+
interfaces,
45+
postConstruct,
46+
} from '@theia/core/shared/inversify';
47+
import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
48+
import { FileService } from '@theia/filesystem/lib/browser/file-service';
49+
import { NotificationManager } from '@theia/messages/lib/browser/notifications-manager';
50+
import { OutputChannelSeverity } from '@theia/output/lib/browser/output-channel';
51+
import { MainMenuManager } from '../../common/main-menu-manager';
52+
import { userAbort } from '../../common/nls';
4853
import {
49-
SketchesService,
50-
FileSystemExt,
51-
Sketch,
52-
CoreService,
5354
CoreError,
55+
CoreService,
56+
FileSystemExt,
5457
ResponseServiceClient,
58+
Sketch,
59+
SketchesService,
5560
} from '../../common/protocol';
61+
import {
62+
ExecuteWithProgress,
63+
UserAbortApplicationError,
64+
} from '../../common/protocol/progressible';
5665
import { ArduinoPreferences } from '../arduino-preferences';
57-
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
58-
import { nls } from '@theia/core';
59-
import { OutputChannelManager } from '../theia/output/output-channel';
60-
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
61-
import { ExecuteWithProgress } from '../../common/protocol/progressible';
62-
import { BoardsServiceProvider } from '../boards/boards-service-provider';
6366
import { BoardsDataStore } from '../boards/boards-data-store';
64-
import { NotificationManager } from '@theia/messages/lib/browser/notifications-manager';
65-
import { MessageType } from '@theia/core/lib/common/message-service-protocol';
66-
import { WorkspaceService } from '../theia/workspace/workspace-service';
67-
import { MainMenuManager } from '../../common/main-menu-manager';
67+
import { BoardsServiceProvider } from '../boards/boards-service-provider';
6868
import { ConfigServiceClient } from '../config/config-service-client';
69-
import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell';
7069
import { DialogService } from '../dialog-service';
70+
import { SettingsService } from '../dialogs/settings/settings';
71+
import {
72+
CurrentSketch,
73+
SketchesServiceClientImpl,
74+
} from '../sketches-service-client-impl';
7175
import { ApplicationConnectionStatusContribution } from '../theia/core/connection-status-service';
76+
import { OutputChannelManager } from '../theia/output/output-channel';
77+
import { WorkspaceService } from '../theia/workspace/workspace-service';
7278

7379
export {
7480
Command,
7581
CommandRegistry,
76-
MenuModelRegistry,
7782
KeybindingRegistry,
83+
MenuModelRegistry,
84+
Sketch,
7885
TabBarToolbarRegistry,
7986
URI,
80-
Sketch,
8187
open,
8288
};
8389

@@ -247,6 +253,12 @@ export abstract class CoreServiceContribution extends SketchContribution {
247253
}
248254

249255
protected handleError(error: unknown): void {
256+
if (isObject(error) && UserAbortApplicationError.is(error)) {
257+
this.outputChannelManager
258+
.getChannel('Arduino')
259+
.appendLine(userAbort, OutputChannelSeverity.Warning);
260+
return;
261+
}
250262
this.tryToastErrorMessage(error);
251263
}
252264

@@ -293,7 +305,13 @@ export abstract class CoreServiceContribution extends SketchContribution {
293305
protected async doWithProgress<T>(options: {
294306
progressText: string;
295307
keepOutput?: boolean;
296-
task: (progressId: string, coreService: CoreService) => Promise<T>;
308+
task: (
309+
progressId: string,
310+
coreService: CoreService,
311+
cancellationToken?: CancellationToken
312+
) => Promise<T>;
313+
// false by default
314+
cancelable?: boolean;
297315
}): Promise<T> {
298316
const toDisposeOnComplete = new DisposableCollection(
299317
this.maybeActivateMonitorWidget()
@@ -306,8 +324,10 @@ export abstract class CoreServiceContribution extends SketchContribution {
306324
messageService: this.messageService,
307325
responseService: this.responseService,
308326
progressText,
309-
run: ({ progressId }) => task(progressId, this.coreService),
327+
run: ({ progressId, cancellationToken }) =>
328+
task(progressId, this.coreService, cancellationToken),
310329
keepOutput,
330+
cancelable: options.cancelable,
311331
});
312332
toDisposeOnComplete.dispose();
313333
return result;

‎arduino-ide-extension/src/browser/contributions/upload-sketch.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/contributions/upload-sketch.ts
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,10 @@ export class UploadSketch extends CoreServiceContribution {
136136

137137
const uploadResponse = await this.doWithProgress({
138138
progressText: nls.localize('arduino/sketch/uploading', 'Uploading...'),
139-
task: (progressId, coreService) =>
140-
coreService.upload({ ...uploadOptions, progressId }),
139+
task: (progressId, coreService, token) =>
140+
coreService.upload({ ...uploadOptions, progressId }, token),
141141
keepOutput: true,
142+
cancelable: true,
142143
});
143144
// the port update is NOOP if nothing has changed
144145
this.boardsServiceProvider.updateConfig(uploadResponse.portAfterUpload);

‎arduino-ide-extension/src/browser/contributions/verify-sketch.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/contributions/verify-sketch.ts
+15-11Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
import { inject, injectable } from '@theia/core/shared/inversify';
21
import { Emitter } from '@theia/core/lib/common/event';
2+
import { nls } from '@theia/core/lib/common/nls';
3+
import { inject, injectable } from '@theia/core/shared/inversify';
4+
import type { CoreService } from '../../common/protocol';
35
import { ArduinoMenus } from '../menu/arduino-menus';
6+
import { CurrentSketch } from '../sketches-service-client-impl';
47
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
58
import {
6-
CoreServiceContribution,
79
Command,
810
CommandRegistry,
9-
MenuModelRegistry,
11+
CoreServiceContribution,
1012
KeybindingRegistry,
13+
MenuModelRegistry,
1114
TabBarToolbarRegistry,
1215
} from './contribution';
13-
import { nls } from '@theia/core/lib/common';
14-
import { CurrentSketch } from '../sketches-service-client-impl';
15-
import { CoreService } from '../../common/protocol';
1616
import { CoreErrorHandler } from './core-error-handler';
1717

1818
export interface VerifySketchParams {
@@ -131,11 +131,15 @@ export class VerifySketch extends CoreServiceContribution {
131131
'arduino/sketch/compile',
132132
'Compiling sketch...'
133133
),
134-
task: (progressId, coreService) =>
135-
coreService.compile({
136-
...options,
137-
progressId,
138-
}),
134+
task: (progressId, coreService, token) =>
135+
coreService.compile(
136+
{
137+
...options,
138+
progressId,
139+
},
140+
token
141+
),
142+
cancelable: true,
139143
});
140144
this.messageService.info(
141145
nls.localize('arduino/sketch/doneCompiling', 'Done compiling.'),

‎arduino-ide-extension/src/browser/library/library-list-widget.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/library/library-list-widget.ts
+2-4Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@ import {
1212
LibrarySearch,
1313
LibraryService,
1414
} from '../../common/protocol/library-service';
15-
import {
16-
ListWidget,
17-
UserAbortError,
18-
} from '../widgets/component-list/list-widget';
15+
import { ListWidget } from '../widgets/component-list/list-widget';
1916
import { Installable } from '../../common/protocol';
2017
import { ListItemRenderer } from '../widgets/component-list/list-item-renderer';
2118
import { nls } from '@theia/core/lib/common';
2219
import { LibraryFilterRenderer } from '../widgets/component-list/filter-renderer';
2320
import { findChildTheiaButton, splitByBoldTag } from '../utils/dom';
21+
import { UserAbortError } from '../../common/protocol/progressible';
2422

2523
@injectable()
2624
export class LibraryListWidget extends ListWidget<

‎arduino-ide-extension/src/browser/widgets/component-list/component-list-item.tsx

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/widgets/component-list/component-list-item.tsx
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from '@theia/core/shared/react';
22
import type { ArduinoComponent } from '../../../common/protocol/arduino-component';
33
import { Installable } from '../../../common/protocol/installable';
44
import type { ListItemRenderer } from './list-item-renderer';
5-
import { UserAbortError } from './list-widget';
5+
import { UserAbortError } from '../../../common/protocol/progressible';
66

77
export class ComponentListItem<
88
T extends ArduinoComponent

‎arduino-ide-extension/src/browser/widgets/component-list/filterable-list-container.tsx

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/widgets/component-list/filterable-list-container.tsx
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@ import { CommandService } from '@theia/core/lib/common/command';
55
import { MessageService } from '@theia/core/lib/common/message-service';
66
import { ConfirmDialog } from '@theia/core/lib/browser/dialogs';
77
import { Searchable } from '../../../common/protocol/searchable';
8-
import { ExecuteWithProgress } from '../../../common/protocol/progressible';
8+
import {
9+
ExecuteWithProgress,
10+
UserAbortError,
11+
} from '../../../common/protocol/progressible';
912
import {
1013
Installable,
1114
libraryInstallFailed,
1215
platformInstallFailed,
1316
} from '../../../common/protocol/installable';
1417
import { ArduinoComponent } from '../../../common/protocol/arduino-component';
1518
import { SearchBar } from './search-bar';
16-
import { ListWidget, UserAbortError } from './list-widget';
19+
import { ListWidget } from './list-widget';
1720
import { ComponentList } from './component-list';
1821
import { ListItemRenderer } from './list-item-renderer';
1922
import {

‎arduino-ide-extension/src/browser/widgets/component-list/list-widget.tsx

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/browser/widgets/component-list/list-widget.tsx
-7Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,3 @@ export namespace ListWidget {
192192
readonly defaultSearchOptions: S;
193193
}
194194
}
195-
196-
export class UserAbortError extends Error {
197-
constructor(message = 'User abort') {
198-
super(message);
199-
Object.setPrototypeOf(this, UserAbortError.prototype);
200-
}
201-
}

‎arduino-ide-extension/src/common/nls.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/common/nls.ts
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ export const noSketchOpened = nls.localize(
3939
'arduino/common/noSketchOpened',
4040
'No sketch opened'
4141
);
42+
43+
export const userAbort = nls.localize('arduino/common/userAbort', 'User abort');

‎arduino-ide-extension/src/common/protocol/core-service.ts

Copy file name to clipboardExpand all lines: arduino-ide-extension/src/common/protocol/core-service.ts
+14-4Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ApplicationError } from '@theia/core/lib/common/application-error';
2+
import type { CancellationToken } from '@theia/core/lib/common/cancellation';
23
import { nls } from '@theia/core/lib/common/nls';
34
import type {
45
Location,
@@ -7,7 +8,7 @@ import type {
78
} from '@theia/core/shared/vscode-languageserver-protocol';
89
import type { CompileSummary as ApiCompileSummary } from 'vscode-arduino-api';
910
import type { BoardUserField, Installable } from '../../common/protocol/';
10-
import { isPortIdentifier, PortIdentifier, Programmer } from './boards-service';
11+
import { PortIdentifier, Programmer, isPortIdentifier } from './boards-service';
1112
import type { IndexUpdateSummary } from './notification-service';
1213
import type { Sketch } from './sketches-service';
1314

@@ -162,9 +163,18 @@ export function isUploadResponse(arg: unknown): arg is UploadResponse {
162163
export const CoreServicePath = '/services/core-service';
163164
export const CoreService = Symbol('CoreService');
164165
export interface CoreService {
165-
compile(options: CoreService.Options.Compile): Promise<void>;
166-
upload(options: CoreService.Options.Upload): Promise<UploadResponse>;
167-
burnBootloader(options: CoreService.Options.Bootloader): Promise<void>;
166+
compile(
167+
options: CoreService.Options.Compile,
168+
cancellationToken?: CancellationToken
169+
): Promise<void>;
170+
upload(
171+
options: CoreService.Options.Upload,
172+
cancellationToken?: CancellationToken
173+
): Promise<UploadResponse>;
174+
burnBootloader(
175+
options: CoreService.Options.Bootloader,
176+
cancellationToken?: CancellationToken
177+
): Promise<void>;
168178
/**
169179
* Refreshes the underling core gRPC client for the Arduino CLI.
170180
*/

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.