Skip to content

Commit eadc993

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
ATL-653: Added error handling for core/lib install
Signed-off-by: Akos Kitta <[email protected]>
1 parent c64ac48 commit eadc993

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

Diff for: arduino-ide-extension/src/browser/widgets/component-list/filterable-list-container.tsx

+14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as React from 'react';
22
import debounce = require('lodash.debounce');
33
import { Event } from '@theia/core/lib/common/event';
4+
import { CommandService } from '@theia/core/lib/common/command';
5+
import { MessageService } from '@theia/core/lib/common/message-service';
6+
import { OutputCommands } from '@theia/output/lib/browser/output-commands';
47
import { ConfirmDialog } from '@theia/core/lib/browser/dialogs';
58
import { Searchable } from '../../../common/protocol/searchable';
69
import { Installable } from '../../../common/protocol/installable';
@@ -85,9 +88,13 @@ export class FilterableListContainer<T extends ArduinoComponent> extends React.C
8588
const dialog = new InstallationProgressDialog(itemLabel(item), version);
8689
try {
8790
dialog.open();
91+
await this.clearArduinoChannel();
8892
await install({ item, version });
8993
const items = await searchable.search({ query: this.state.filterText });
9094
this.setState({ items: this.sort(items) });
95+
} catch (error) {
96+
this.props.messageService.error(error instanceof Error ? error.message : String(error));
97+
throw error;
9198
} finally {
9299
dialog.close();
93100
}
@@ -106,6 +113,7 @@ export class FilterableListContainer<T extends ArduinoComponent> extends React.C
106113
const { uninstall, searchable, itemLabel } = this.props;
107114
const dialog = new UninstallationProgressDialog(itemLabel(item));
108115
try {
116+
await this.clearArduinoChannel();
109117
dialog.open();
110118
await uninstall({ item });
111119
const items = await searchable.search({ query: this.state.filterText });
@@ -115,6 +123,10 @@ export class FilterableListContainer<T extends ArduinoComponent> extends React.C
115123
}
116124
}
117125

126+
private async clearArduinoChannel(): Promise<void> {
127+
return this.props.commandService.executeCommand(OutputCommands.CLEAR.id, { name: 'Arduino' });
128+
}
129+
118130
}
119131

120132
export namespace FilterableListContainer {
@@ -129,6 +141,8 @@ export namespace FilterableListContainer {
129141
readonly filterTextChangeEvent: Event<string | undefined>;
130142
readonly install: ({ item, version }: { item: T, version: Installable.Version }) => Promise<void>;
131143
readonly uninstall: ({ item }: { item: T }) => Promise<void>;
144+
readonly messageService: MessageService;
145+
readonly commandService: CommandService;
132146
}
133147

134148
export interface State<T> {

Diff for: arduino-ide-extension/src/browser/widgets/component-list/list-widget.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { Deferred } from '@theia/core/lib/common/promise-util';
55
import { Emitter } from '@theia/core/lib/common/event';
66
import { MaybePromise } from '@theia/core/lib/common/types';
77
import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget';
8+
import { CommandService } from '@theia/core/lib/common/command';
9+
import { MessageService } from '@theia/core/lib/common/message-service';
810
import { Installable } from '../../../common/protocol/installable';
911
import { Searchable } from '../../../common/protocol/searchable';
1012
import { ArduinoComponent } from '../../../common/protocol/arduino-component';
@@ -15,6 +17,12 @@ import { NotificationCenter } from '../../notification-center';
1517
@injectable()
1618
export abstract class ListWidget<T extends ArduinoComponent> extends ReactWidget {
1719

20+
@inject(MessageService)
21+
protected readonly messageService: MessageService;
22+
23+
@inject(CommandService)
24+
protected readonly commandService: CommandService;
25+
1826
@inject(NotificationCenter)
1927
protected readonly notificationCenter: NotificationCenter;
2028

@@ -87,7 +95,9 @@ export abstract class ListWidget<T extends ArduinoComponent> extends ReactWidget
8795
uninstall={this.uninstall.bind(this)}
8896
itemLabel={this.options.itemLabel}
8997
itemRenderer={this.options.itemRenderer}
90-
filterTextChangeEvent={this.filterTextChangeEmitter.event} />;
98+
filterTextChangeEvent={this.filterTextChangeEmitter.event}
99+
messageService={this.messageService}
100+
commandService={this.commandService} />;
91101
}
92102

93103
/**

Diff for: arduino-ide-extension/src/node/boards-service-impl.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,11 @@ export class BoardsServiceImpl extends CoreClientAware implements BoardsService
254254
});
255255
await new Promise<void>((resolve, reject) => {
256256
resp.on('end', resolve);
257-
resp.on('error', reject);
257+
resp.on('error', error => {
258+
this.outputService.append({ chunk: `Failed to install platform: ${item.id}.\n` });
259+
this.outputService.append({ chunk: error.toString() });
260+
reject(error);
261+
});
258262
});
259263

260264
const items = await this.search({});

Diff for: arduino-ide-extension/src/node/library-service-server-impl.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,11 @@ export class LibraryServiceImpl extends CoreClientAware implements LibraryServic
183183
});
184184
await new Promise<void>((resolve, reject) => {
185185
resp.on('end', resolve);
186-
resp.on('error', reject);
186+
resp.on('error', error => {
187+
this.outputService.append({ chunk: `Failed to install library: ${item.name}${version ? `:${version}` : ''}.\n` });
188+
this.outputService.append({ chunk: error.toString() });
189+
reject(error);
190+
});
187191
});
188192

189193
const items = await this.search({});

0 commit comments

Comments
 (0)