feat: implement menu action to reload current board data (#2553)

This commit is contained in:
Giacomo Cusinato 2024-11-21 08:41:26 +01:00 committed by GitHub
parent 7c231fff76
commit 41844c9470
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 77 additions and 3 deletions

View File

@ -222,6 +222,20 @@ export class BoardsDataStore
return data; return data;
} }
async reloadBoardData(fqbn: string | undefined): Promise<void> {
if (!fqbn) {
return;
}
const key = this.getStorageKey(fqbn);
const details = await this.loadBoardDetails(fqbn, true);
if (!details) {
return;
}
const data = createDataStoreEntry(details);
await this.storageService.setData(key, data);
this.fireChanged({ fqbn, data });
}
async selectProgrammer({ async selectProgrammer({
fqbn, fqbn,
selectedProgrammer, selectedProgrammer,
@ -299,9 +313,15 @@ export class BoardsDataStore
return `.arduinoIDE-configOptions-${fqbn}`; return `.arduinoIDE-configOptions-${fqbn}`;
} }
async loadBoardDetails(fqbn: string): Promise<BoardDetails | undefined> { async loadBoardDetails(
fqbn: string,
forceRefresh = false
): Promise<BoardDetails | undefined> {
try { try {
const details = await this.boardsService.getBoardDetails({ fqbn }); const details = await this.boardsService.getBoardDetails({
fqbn,
forceRefresh,
});
return details; return details;
} catch (err) { } catch (err) {
if ( if (

View File

@ -20,6 +20,7 @@ import {
} from '../../common/protocol'; } from '../../common/protocol';
import type { BoardList } from '../../common/protocol/board-list'; import type { BoardList } from '../../common/protocol/board-list';
import { BoardsListWidget } from '../boards/boards-list-widget'; import { BoardsListWidget } from '../boards/boards-list-widget';
import { BoardsDataStore } from '../boards/boards-data-store';
import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { BoardsServiceProvider } from '../boards/boards-service-provider';
import { import {
ArduinoMenus, ArduinoMenus,
@ -39,6 +40,8 @@ export class BoardSelection extends SketchContribution {
private readonly menuModelRegistry: MenuModelRegistry; private readonly menuModelRegistry: MenuModelRegistry;
@inject(NotificationCenter) @inject(NotificationCenter)
private readonly notificationCenter: NotificationCenter; private readonly notificationCenter: NotificationCenter;
@inject(BoardsDataStore)
private readonly boardsDataStore: BoardsDataStore;
@inject(BoardsService) @inject(BoardsService)
private readonly boardsService: BoardsService; private readonly boardsService: BoardsService;
@inject(BoardsServiceProvider) @inject(BoardsServiceProvider)
@ -74,6 +77,29 @@ SN: ${SN}
}); });
}, },
}); });
registry.registerCommand(BoardSelection.Commands.RELOAD_BOARD_DATA, {
execute: async () => {
const selectedFqbn =
this.boardsServiceProvider.boardList.boardsConfig.selectedBoard?.fqbn;
let message: string;
if (selectedFqbn) {
await this.boardsDataStore.reloadBoardData(selectedFqbn);
message = nls.localize(
'arduino/board/boardDataReloaded',
'Board data reloaded.'
);
} else {
message = nls.localize(
'arduino/board/selectBoardToReload',
'Please select a board first.'
);
}
this.messageService.info(message, { timeout: 2000 });
},
});
} }
override onStart(): void { override onStart(): void {
@ -151,6 +177,21 @@ SN: ${SN}
) )
); );
const reloadBoardData = {
commandId: BoardSelection.Commands.RELOAD_BOARD_DATA.id,
label: nls.localize('arduino/board/reloadBoardData', 'Reload Board Data'),
order: '102',
};
this.menuModelRegistry.registerMenuAction(
ArduinoMenus.TOOLS__BOARD_SELECTION_GROUP,
reloadBoardData
);
this.toDisposeBeforeMenuRebuild.push(
Disposable.create(() =>
this.menuModelRegistry.unregisterMenuAction(reloadBoardData)
)
);
const getBoardInfo = { const getBoardInfo = {
commandId: BoardSelection.Commands.GET_BOARD_INFO.id, commandId: BoardSelection.Commands.GET_BOARD_INFO.id,
label: nls.localize('arduino/board/getBoardInfo', 'Get Board Info'), label: nls.localize('arduino/board/getBoardInfo', 'Get Board Info'),
@ -361,5 +402,8 @@ SN: ${SN}
export namespace BoardSelection { export namespace BoardSelection {
export namespace Commands { export namespace Commands {
export const GET_BOARD_INFO: Command = { id: 'arduino-get-board-info' }; export const GET_BOARD_INFO: Command = { id: 'arduino-get-board-info' };
export const RELOAD_BOARD_DATA: Command = {
id: 'arduino-reload-board-data',
};
} }
} }

View File

@ -67,7 +67,10 @@ export interface BoardsService
skipPostInstall?: boolean; skipPostInstall?: boolean;
}): Promise<void>; }): Promise<void>;
getDetectedPorts(): Promise<DetectedPorts>; getDetectedPorts(): Promise<DetectedPorts>;
getBoardDetails(options: { fqbn: string }): Promise<BoardDetails | undefined>; getBoardDetails(options: {
fqbn: string;
forceRefresh?: boolean;
}): Promise<BoardDetails | undefined>;
getBoardPackage(options: { getBoardPackage(options: {
id: string /* TODO: change to PlatformIdentifier type? */; id: string /* TODO: change to PlatformIdentifier type? */;
}): Promise<BoardsPackage | undefined>; }): Promise<BoardsPackage | undefined>;

View File

@ -73,7 +73,11 @@ export class BoardsServiceImpl
async getBoardDetails(options: { async getBoardDetails(options: {
fqbn: string; fqbn: string;
forceRefresh?: boolean;
}): Promise<BoardDetails | undefined> { }): Promise<BoardDetails | undefined> {
if (options.forceRefresh) {
await this.refresh();
}
const coreClient = await this.coreClient; const coreClient = await this.coreClient;
const { client, instance } = coreClient; const { client, instance } = coreClient;
const { fqbn } = options; const { fqbn } = options;

View File

@ -13,6 +13,7 @@
"board": { "board": {
"board": "Board{0}", "board": "Board{0}",
"boardConfigDialogTitle": "Select Other Board and Port", "boardConfigDialogTitle": "Select Other Board and Port",
"boardDataReloaded": "Board data reloaded.",
"boardInfo": "Board Info", "boardInfo": "Board Info",
"boards": "boards", "boards": "boards",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.", "configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
@ -31,10 +32,12 @@
"port": "Port{0}", "port": "Port{0}",
"ports": "ports", "ports": "ports",
"programmer": "Programmer", "programmer": "Programmer",
"reloadBoardData": "Reload Board Data",
"reselectLater": "Reselect later", "reselectLater": "Reselect later",
"revertBoardsConfig": "Use '{0}' discovered on '{1}'", "revertBoardsConfig": "Use '{0}' discovered on '{1}'",
"searchBoard": "Search board", "searchBoard": "Search board",
"selectBoard": "Select Board", "selectBoard": "Select Board",
"selectBoardToReload": "Please select a board first.",
"selectPortForInfo": "Please select a port to obtain board info.", "selectPortForInfo": "Please select a port to obtain board info.",
"showAllAvailablePorts": "Shows all available ports when enabled", "showAllAvailablePorts": "Shows all available ports when enabled",
"showAllPorts": "Show all ports", "showAllPorts": "Show all ports",