Skip to content

Commit 1f08de0

Browse files
[WIP]: leverage upload event to derived new port
1 parent b15603c commit 1f08de0

File tree

2 files changed

+33
-50
lines changed

2 files changed

+33
-50
lines changed

arduino-ide-extension/src/browser/boards/boards-service-provider.ts

+30-50
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
6565
protected _availablePorts: Port[] = [];
6666
protected _availableBoards: AvailableBoard[] = [];
6767

68-
private lastItemRemovedForUpload: { board: Board; port: Port } | undefined;
6968
// "lastPersistingUploadPort", is a port created during an upload, that persisted after
7069
// the upload finished, it's "substituting" the port selected when the user invoked the upload
7170
private lastPersistingUploadPort: Port | undefined;
7271

72+
private lastSelectionOnUpload: BoardsConfig.Config | undefined;
73+
7374
/**
7475
* Unlike `onAttachedBoardsChanged` this even fires when the user modifies the selected board in the IDE.\
7576
* This even also fires, when the boards package was not available for the currently selected board,
@@ -116,62 +117,43 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
116117
return this._reconciled.promise;
117118
}
118119

119-
private checkForItemRemoved(event: AttachedBoardsChangeEvent): void {
120-
if (!this.lastItemRemovedForUpload) {
121-
const {
122-
oldState: { ports: oldPorts, boards: oldBoards },
123-
newState: { ports: newPorts },
124-
} = event;
125-
126-
const disappearedPorts = oldPorts.filter((oldPort: Port) =>
127-
newPorts.every((newPort: Port) => !Port.sameAs(oldPort, newPort))
128-
);
129-
130-
if (disappearedPorts.length > 0) {
131-
this.lastItemRemovedForUpload = {
132-
board: oldBoards.find((board: Board) =>
133-
Port.sameAs(board.port, disappearedPorts[0])
134-
) as Board,
135-
port: disappearedPorts[0],
136-
};
137-
}
120+
public setLastSelectionOnUpload(
121+
config: BoardsConfig.Config | undefined
122+
): void {
123+
this.lastSelectionOnUpload = config;
124+
}
138125

126+
private checkForPersistingPort(event: AttachedBoardsChangeEvent): void {
127+
if (!this.lastSelectionOnUpload) {
139128
return;
140129
}
141-
}
142130

143-
private checkForPersistingPort(event: AttachedBoardsChangeEvent): void {
144-
if (this.lastItemRemovedForUpload) {
145-
const {
146-
oldState: { ports: oldPorts },
147-
newState: { ports: newPorts, boards: newBoards },
148-
} = event;
131+
const lastSelectionOnUpload = this.lastSelectionOnUpload;
132+
this.lastSelectionOnUpload = undefined;
149133

150-
const disappearedItem = this.lastItemRemovedForUpload;
151-
this.lastItemRemovedForUpload = undefined;
134+
const {
135+
oldState: { ports: oldPorts },
136+
newState: { ports: newPorts, boards: newBoards },
137+
} = event;
152138

153-
const appearedPorts = newPorts.filter((newPort: Port) =>
154-
oldPorts.every((oldPort: Port) => !Port.sameAs(newPort, oldPort))
155-
);
139+
const appearedPorts = newPorts.filter((newPort: Port) =>
140+
oldPorts.every((oldPort: Port) => !Port.sameAs(newPort, oldPort))
141+
);
156142

157-
if (appearedPorts.length > 0) {
158-
const boardOnAppearedPort = newBoards.find((board: Board) =>
159-
Port.sameAs(board.port, appearedPorts[0])
160-
);
143+
if (appearedPorts.length > 0) {
144+
const boardOnAppearedPort = newBoards.find((board: Board) =>
145+
Port.sameAs(board.port, appearedPorts[0])
146+
);
161147

162-
if (
163-
boardOnAppearedPort &&
164-
Board.sameAs(boardOnAppearedPort, disappearedItem.board)
165-
) {
166-
this.lastPersistingUploadPort = appearedPorts[0];
167-
return;
168-
}
148+
if (
149+
boardOnAppearedPort &&
150+
lastSelectionOnUpload.selectedBoard &&
151+
Board.sameAs(boardOnAppearedPort, lastSelectionOnUpload.selectedBoard)
152+
) {
153+
this.lastPersistingUploadPort = appearedPorts[0];
154+
return;
169155
}
170-
171-
return;
172156
}
173-
174-
this.lastPersistingUploadPort = undefined;
175157
}
176158

177159
protected notifyAttachedBoardsChanged(
@@ -185,9 +167,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
185167

186168
const { uploadInProgress } = event;
187169

188-
if (uploadInProgress) {
189-
this.checkForItemRemoved(event);
190-
} else {
170+
if (!uploadInProgress) {
191171
this.checkForPersistingPort(event);
192172
}
193173

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

+3
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ export class UploadSketch extends CoreServiceContribution {
190190
// toggle the toolbar button and menu item state.
191191
// uploadInProgress will be set to false whether the upload fails or not
192192
this.uploadInProgress = true;
193+
this.boardsServiceProvider.setLastSelectionOnUpload(
194+
this.boardsServiceProvider.boardsConfig
195+
);
193196
this.onDidChangeEmitter.fire();
194197
this.clearVisibleNotification();
195198

0 commit comments

Comments
 (0)