diff --git a/package.json b/package.json index 1132c2df..c33c617c 100644 --- a/package.json +++ b/package.json @@ -440,6 +440,10 @@ "arduino.disableTestingOpen": { "type": "boolean", "default": false + }, + "arduino.ignoreBoards": { + "type": "array", + "default": [] } } }, diff --git a/src/arduino/vscodeSettings.ts b/src/arduino/vscodeSettings.ts index bc9f43ce..4356b25c 100644 --- a/src/arduino/vscodeSettings.ts +++ b/src/arduino/vscodeSettings.ts @@ -11,6 +11,7 @@ const configKeys = { AUTO_UPDATE_INDEX_FILES: "arduino.autoUpdateIndexFiles", ENABLE_USB_DETECTOIN: "arduino.enableUSBDetection", DISABLE_TESTING_OPEN: "arduino.disableTestingOpen", + IGNORE_BOARDS: "arduino.ignoreBoards", }; export interface IVscodeSettings { @@ -20,6 +21,7 @@ export interface IVscodeSettings { logLevel: string; enableUSBDetection: boolean; disableTestingOpen: boolean; + ignoreBoards: string[]; updateAdditionalUrls(urls: string | string[]): void; } @@ -59,6 +61,14 @@ export class VscodeSettings implements IVscodeSettings { return this.getConfigValue(configKeys.DISABLE_TESTING_OPEN); } + public get ignoreBoards(): string[] { + return this.getConfigValue(configKeys.IGNORE_BOARDS); + } + + public set ignoreBoards(value: string[]) { + this.setConfigValue(configKeys.IGNORE_BOARDS, value, true); + } + public async updateAdditionalUrls(value) { await this.setConfigValue(configKeys.ADDITIONAL_URLS, value, true); } diff --git a/src/serialmonitor/usbDetector.ts b/src/serialmonitor/usbDetector.ts index d60044d8..b70b24aa 100644 --- a/src/serialmonitor/usbDetector.ts +++ b/src/serialmonitor/usbDetector.ts @@ -77,7 +77,12 @@ export class UsbDetector { let bd = ArduinoContext.boardManager.installedBoards.get(boardKey); if (!bd) { ArduinoContext.boardManager.updatePackageIndex(deviceDescriptor.indexFile).then((shouldLoadPackageContent) => { - vscode.window.showInformationMessage(`Install board package for ${deviceDescriptor.name}`, "Yes", "No").then((ans) => { + const ignoreBoards = VscodeSettings.getInstance().ignoreBoards || []; + if (ignoreBoards.indexOf(deviceDescriptor.name) >= 0) { + return; + } + vscode.window.showInformationMessage(`Install board package for ${ + deviceDescriptor.name}`, "Yes", "No", "Don't ask again").then((ans) => { if (ans === "Yes") { ArduinoContext.arduinoApp.installBoard(deviceDescriptor.package, deviceDescriptor.architecture) .then(() => { @@ -88,6 +93,9 @@ export class UsbDetector { bd = ArduinoContext.boardManager.installedBoards.get(boardKey); this.switchBoard(bd, deviceDescriptor); }); + } else if (ans === "Don't ask again") { + ignoreBoards.push(deviceDescriptor.name); + VscodeSettings.getInstance().ignoreBoards = ignoreBoards; } }); }); @@ -96,11 +104,18 @@ export class UsbDetector { if (currBoard.board !== deviceDescriptor.id || currBoard.platform.architecture !== deviceDescriptor.architecture || currBoard.getPackageName() !== deviceDescriptor.package) { + const ignoreBoards = VscodeSettings.getInstance().ignoreBoards || []; + if (ignoreBoards.indexOf(deviceDescriptor.name) >= 0) { + return; + } vscode.window.showInformationMessage(`Detected board ${deviceDescriptor.name}. Would you like to switch to this board type?`, - "Yes", "No") + "Yes", "No", "Don't ask again") .then((ans) => { if (ans === "Yes") { return this.switchBoard(bd, deviceDescriptor); + } else if (ans === "Don't ask again") { + ignoreBoards.push(deviceDescriptor.name); + VscodeSettings.getInstance().ignoreBoards = ignoreBoards; } }); } else {