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

Sign up
Appearance settings

Commit eadc993

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
ATL-653: Added error handling for core/lib install
Signed-off-by: Akos Kitta <kittaakos@typefox.io>
1 parent c64ac48 commit eadc993

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

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

Lines changed: 14 additions & 0 deletions
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> {

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

Lines changed: 11 additions & 1 deletion
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
/**

‎arduino-ide-extension/src/node/boards-service-impl.ts‎

Lines changed: 5 additions & 1 deletion
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({});

‎arduino-ide-extension/src/node/library-service-server-impl.ts‎

Lines changed: 5 additions & 1 deletion
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)

AltStyle によって変換されたページ (->オリジナル) /