From 9c10be01c8bc846b23ba1bff1d12fc8e7bfa7465 Mon Sep 17 00:00:00 2001 From: Yoichiro Date: Sun, 12 Nov 2023 13:44:19 +0900 Subject: [PATCH] Add a new property to set a default bootloader type for each buildable firmware. --- src/actions/storage.action.ts | 12 ++++-- .../keyboard/build/CatalogBuild.container.ts | 10 ++++- .../catalog/keyboard/build/CatalogBuild.tsx | 6 ++- .../buildform/BuildForm.container.ts | 18 ++++++-- .../editdefinition/buildform/BuildForm.tsx | 41 +++++++++++++++++++ src/services/provider/Firebase.ts | 14 +++++-- src/services/storage/Storage.ts | 5 ++- 7 files changed, 90 insertions(+), 16 deletions(-) diff --git a/src/actions/storage.action.ts b/src/actions/storage.action.ts index cf22acc1..846ae121 100644 --- a/src/actions/storage.action.ts +++ b/src/actions/storage.action.ts @@ -1685,16 +1685,19 @@ export const storageActionsThunk = { } }, - updateBuildableFirmwareEnabled: - (definitionId: string, enabled: boolean): ThunkPromiseAction => + updateBuildableFirmware: + ( + definitionId: string, + options: { enabled?: boolean; defaultBootloaderType?: IBootloaderType } + ): ThunkPromiseAction => async ( dispatch: ThunkDispatch, getState: () => RootState ) => { const { storage } = getState(); - const result = await storage.instance!.updateBuildableFirmwareEnabled( + const result = await storage.instance!.updateBuildableFirmware( definitionId, - enabled + options ); if (isError(result)) { console.error(result.cause); @@ -1705,6 +1708,7 @@ export const storageActionsThunk = { dispatch( KeyboardsEditDefinitionActions.updateBuildableFirmwareFile(null, null) ); + dispatch(NotificationActions.addSuccess('Updated successfully.')); }, updateBuildableFirmwareFile: diff --git a/src/components/catalog/keyboard/build/CatalogBuild.container.ts b/src/components/catalog/keyboard/build/CatalogBuild.container.ts index f68ee9a6..cdf9d532 100644 --- a/src/components/catalog/keyboard/build/CatalogBuild.container.ts +++ b/src/components/catalog/keyboard/build/CatalogBuild.container.ts @@ -10,6 +10,7 @@ import { } from '../../../../actions/catalog.action'; import { storageActionsThunk } from '../../../../actions/storage.action'; import { + IBuildableFirmware, IFirmwareBuildingTask, IKeyboardDefinitionDocument, } from '../../../../services/storage/Storage'; @@ -66,10 +67,15 @@ const mapDispatchToProps = (dispatch: any) => { }, flashFirmware: ( keyboardDefinitionDocument: IKeyboardDefinitionDocument, + buildableFirmware: IBuildableFirmware, task: IFirmwareBuildingTask ) => { dispatch(FlashFirmwareDialogActions.clear()); - dispatch(FlashFirmwareDialogActions.updateBootloaderType('caterina')); + dispatch( + FlashFirmwareDialogActions.updateBootloaderType( + buildableFirmware.defaultBootloaderType + ) + ); const firmwareName = `Built for ${keyboardDefinitionDocument.name}`; dispatch(FlashFirmwareDialogActions.updateKeyboardName('')); dispatch(FlashFirmwareDialogActions.updateFlashMode('build_and_flash')); @@ -77,7 +83,7 @@ const mapDispatchToProps = (dispatch: any) => { dispatch( FlashFirmwareDialogActions.updateFirmware({ name: firmwareName, - default_bootloader_type: 'caterina', + default_bootloader_type: buildableFirmware.defaultBootloaderType, flash_support: true, filename: firmwareName, description: '', diff --git a/src/components/catalog/keyboard/build/CatalogBuild.tsx b/src/components/catalog/keyboard/build/CatalogBuild.tsx index 7d87f675..6af14b5f 100644 --- a/src/components/catalog/keyboard/build/CatalogBuild.tsx +++ b/src/components/catalog/keyboard/build/CatalogBuild.tsx @@ -108,7 +108,11 @@ export default function CatalogBuild(props: CatalogBuildProps) { }; const onClickFlash = (task: IFirmwareBuildingTask) => { - props.flashFirmware!(props.definitionDocument!, task); + props.flashFirmware!( + props.definitionDocument!, + props.buildableFirmware!, + task + ); }; const onClickDelete = (task: IFirmwareBuildingTask) => { diff --git a/src/components/keyboards/editdefinition/buildform/BuildForm.container.ts b/src/components/keyboards/editdefinition/buildform/BuildForm.container.ts index 0593c07b..381c3575 100644 --- a/src/components/keyboards/editdefinition/buildform/BuildForm.container.ts +++ b/src/components/keyboards/editdefinition/buildform/BuildForm.container.ts @@ -10,6 +10,7 @@ import { IBuildableFirmwareFileType, } from '../../../../services/storage/Storage'; import { KeyboardsEditDefinitionActions } from '../../../../actions/keyboards.actions'; +import { IBootloaderType } from '../../../../services/firmware/Types'; const mapStateToProps = (state: RootState) => { return { @@ -35,10 +36,19 @@ const mapDispatchToProps = (dispatch: any) => { enabled: boolean ) => { dispatch( - storageActionsThunk.updateBuildableFirmwareEnabled( - keyboardDefinitionId, - enabled - ) + storageActionsThunk.updateBuildableFirmware(keyboardDefinitionId, { + enabled, + }) + ); + }, + updateBuildableFirmwareDefaultBootloaderType: ( + keyboardDefinitionId: string, + defaultBootloaderType: IBootloaderType + ) => { + dispatch( + storageActionsThunk.updateBuildableFirmware(keyboardDefinitionId, { + defaultBootloaderType, + }) ); }, createNewFirmwareKeyboardFile: ( diff --git a/src/components/keyboards/editdefinition/buildform/BuildForm.tsx b/src/components/keyboards/editdefinition/buildform/BuildForm.tsx index cfe155eb..d3f5f634 100644 --- a/src/components/keyboards/editdefinition/buildform/BuildForm.tsx +++ b/src/components/keyboards/editdefinition/buildform/BuildForm.tsx @@ -8,17 +8,22 @@ import { Breadcrumbs, Button, Container, + FormControl, FormControlLabel, FormGroup, Grid, IconButton, + InputLabel, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, + MenuItem, Paper, + Select, + SelectChangeEvent, Stack, Switch, Table, @@ -40,6 +45,10 @@ import { import ConfirmDialog from '../../../common/confirm/ConfirmDialog'; import { extractBuildableFirmwareCodeParameters } from '../../../../services/build/FirmwareCodeParser'; import { IBuildableFirmwareCodeParameter } from '../../../../store/state'; +import { + ALL_BOOTLOADER_TYPE, + IBootloaderType, +} from '../../../../services/firmware/Types'; type OwnProps = {}; type BuildFormProps = OwnProps & @@ -145,6 +154,15 @@ export default function BuildForm(props: BuildFormProps) { setOpenConfirmDialog(false); }; + const onChangeDefaultBootloaderType = ( + event: SelectChangeEvent + ) => { + props.updateBuildableFirmwareDefaultBootloaderType!( + props.keyboardDefinition!.id, + event.target.value as IBootloaderType + ); + }; + return (
@@ -155,6 +173,29 @@ export default function BuildForm(props: BuildFormProps) { onChange={onClickSupportBuildingFirmware} label="Support building QMK Firmware" /> + + + Default Bootloader Type + + +
diff --git a/src/services/provider/Firebase.ts b/src/services/provider/Firebase.ts index 02e449a2..cea3e695 100644 --- a/src/services/provider/Firebase.ts +++ b/src/services/provider/Firebase.ts @@ -1579,6 +1579,7 @@ export class FirebaseProvider implements IStorage, IAuth { keyboardDefinitionId: doc.data()!.keyboardDefinitionId, uid: doc.data()!.uid, enabled: doc.data()!.enabled, + defaultBootloaderType: doc.data()!.defaultBootloaderType, createdAt: doc.data()!.createdAt.toDate(), updatedAt: doc.data()!.updatedAt.toDate(), }); @@ -1589,6 +1590,7 @@ export class FirebaseProvider implements IStorage, IAuth { keyboardDefinitionId, uid: this.getCurrentAuthenticatedUser()!.uid, enabled: false, + defaultBootloaderType: 'caterina', createdAt: now, updatedAt: now, }; @@ -1623,6 +1625,7 @@ export class FirebaseProvider implements IStorage, IAuth { keyboardDefinitionId: doc.data()!.keyboardDefinitionId, uid: doc.data()!.uid, enabled: doc.data()!.enabled, + defaultBootloaderType: doc.data()!.defaultBootloaderType, createdAt: doc.data()!.createdAt.toDate(), updatedAt: doc.data()!.updatedAt.toDate(), }); @@ -1727,9 +1730,9 @@ export class FirebaseProvider implements IStorage, IAuth { } } - async updateBuildableFirmwareEnabled( + async updateBuildableFirmware( keyboardDefinitionId: string, - enabled: boolean + options: { enabled?: boolean; defaultBootloaderType?: IBootloaderType } ): Promise> { try { const fetchBuildableFirmwareResult = @@ -1741,7 +1744,12 @@ export class FirebaseProvider implements IStorage, IAuth { ); } const buildableFirmware = fetchBuildableFirmwareResult.value; - buildableFirmware.enabled = enabled; + if (options.enabled !== undefined) { + buildableFirmware.enabled = options.enabled; + } + if (options.defaultBootloaderType !== undefined) { + buildableFirmware.defaultBootloaderType = options.defaultBootloaderType; + } buildableFirmware.updatedAt = new Date(); await this.db .collection('build') diff --git a/src/services/storage/Storage.ts b/src/services/storage/Storage.ts index 38d29959..cae23de8 100644 --- a/src/services/storage/Storage.ts +++ b/src/services/storage/Storage.ts @@ -274,6 +274,7 @@ export type IBuildableFirmware = { keyboardDefinitionId: string; uid: string; enabled: boolean; + defaultBootloaderType: IBootloaderType; createdAt: Date; updatedAt: Date; }; @@ -474,9 +475,9 @@ export interface IStorage { keyboardDefinitionId: string, fileType: IBuildableFirmwareFileType ): Promise>; - updateBuildableFirmwareEnabled( + updateBuildableFirmware( keyboardDefinitionId: string, - enabled: boolean + options: { enabled?: boolean; defaultBootloaderType?: IBootloaderType } ): Promise>; createBuildableFirmwareFile( keyboardDefinitionId: string,