This repository was archived by the owner on Oct 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 236
/
Copy pathprogrammerManager.ts
89 lines (76 loc) · 3.48 KB
/
programmerManager.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import * as vscode from "vscode";
import * as constants from "../common/constants";
import { DeviceContext } from "../deviceContext";
import { ArduinoApp } from "./arduino";
import { IArduinoSettings } from "./arduinoSettings";
import { IBoard, IProgrammer } from "./package";
export class ProgrammerManager {
public static notFoundDisplayValue: string = "<Select Programmer>";
private _programmerValue: string;
private _programmerDisplayName: string;
private _programmerStatusBar: vscode.StatusBarItem;
constructor(private _settings: IArduinoSettings, private _arduinoApp: ArduinoApp) {
this._programmerStatusBar = vscode.window.createStatusBarItem(
vscode.StatusBarAlignment.Right,
constants.statusBarPriority.PROGRAMMER,
);
this._programmerStatusBar.command = "arduino.selectProgrammer";
this._programmerStatusBar.tooltip = "Select Programmer";
this.setProgrammerValue(DeviceContext.getInstance().programmer);
this._programmerStatusBar.show();
DeviceContext.getInstance().onChangeProgrammer(() => {
this.setProgrammerValue(DeviceContext.getInstance().programmer);
});
}
public get currentProgrammer(): string {
return this._programmerValue;
}
public get currentDisplayName(): string {
return this._programmerDisplayName;
}
/**
* Select a programmer from the list of available programmers
* Set the programmer value in device context
* List format: programmer_name:friendly_name
*/
public async selectProgrammer() {
const selectionItems = this.getAvailableProgrammers(this._arduinoApp.boardManager.currentBoard).map(
(programmer) => ({
label: programmer.displayName,
description: programmer.name,
programmer }));
const chosen = await vscode.window.showQuickPick(selectionItems, {
placeHolder: "Select programmer",
});
if (!chosen) {
return;
}
this.setProgrammerValue(chosen.programmer.name);
DeviceContext.getInstance().programmer = this._programmerValue;
}
public setProgrammerValue(programmerName: string | null) {
const programmer = this._arduinoApp.boardManager.installedProgrammers.get(programmerName);
this._programmerValue = this._settings.useArduinoCli ? programmerName : programmer ? programmer.key : programmerName;
this._programmerDisplayName = this._programmerValue
? this.getDisplayName(programmerName)
: ProgrammerManager.notFoundDisplayValue;
this._programmerStatusBar.text = this._programmerDisplayName;
}
private getDisplayName(programmerName: string): string {
const programmer = this._arduinoApp.boardManager.installedProgrammers.get(programmerName);
return programmer ? programmer.displayName : programmerName;
}
public getAvailableProgrammers(currentBoard: IBoard): IProgrammer[] {
if (!currentBoard || !currentBoard.platform) {
return [];
}
// Filter the list of all programmers to those that share the same platform as the board
const availableProgrammers: IProgrammer[] = [];
for (const programmer of this._arduinoApp.boardManager.installedProgrammers.values()) {
if (programmer.platform === currentBoard.platform) {
availableProgrammers.push(programmer);
}
}
return availableProgrammers;
}
}