feat(firmware): list all announced versions with usable/unavailable status, support rollback

Firmware update modal now shows every version from Bambu's wiki release
  history, each badged Usable/Unavailable/Installed. Selecting a usable row
  — newer or older than current — swaps the release notes and enables
  install for that version, so rollback no longer requires hand-flashing.

  Wiki scraper tightened to only read heading-anchor ids (h-XXXXXXXX-YYYYMMDD)
  instead of any XX.XX.XX.XX substring, eliminating false positives like an
  AMS firmware version mentioned in an H2D changelog being listed as H2D
  firmware.

  Refs #568
This commit is contained in:
maziggy
2026-04-14 11:10:24 +02:00
parent 2fa3998508
commit d74ab06072
16 changed files with 620 additions and 183 deletions
+19 -6
View File
@@ -5327,6 +5327,14 @@ export const pendingUploadsApi = {
};
// Firmware API Types
export interface AvailableFirmwareVersion {
version: string;
file_available: boolean;
download_url: string | null;
release_notes: string | null;
release_time: string | null;
}
export interface FirmwareUpdateInfo {
printer_id: number;
printer_name: string;
@@ -5336,6 +5344,7 @@ export interface FirmwareUpdateInfo {
update_available: boolean;
download_url: string | null;
release_notes: string | null;
available_versions: AvailableFirmwareVersion[];
}
export interface FirmwareUploadPrepare {
@@ -5347,6 +5356,7 @@ export interface FirmwareUploadPrepare {
update_available: boolean;
current_version: string | null;
latest_version: string | null;
target_version: string | null;
firmware_filename: string | null;
errors: string[];
}
@@ -5368,13 +5378,16 @@ export const firmwareApi = {
checkPrinterUpdate: (printerId: number) =>
request<FirmwareUpdateInfo>(`/firmware/updates/${printerId}`),
prepareUpload: (printerId: number) =>
request<FirmwareUploadPrepare>(`/firmware/updates/${printerId}/prepare`),
prepareUpload: (printerId: number, version?: string) =>
request<FirmwareUploadPrepare>(
`/firmware/updates/${printerId}/prepare${version ? `?version=${encodeURIComponent(version)}` : ''}`,
),
startUpload: (printerId: number) =>
request<{ started: boolean; message: string }>(`/firmware/updates/${printerId}/upload`, {
method: 'POST',
}),
startUpload: (printerId: number, version?: string) =>
request<{ started: boolean; message: string }>(
`/firmware/updates/${printerId}/upload${version ? `?version=${encodeURIComponent(version)}` : ''}`,
{ method: 'POST' },
),
getUploadStatus: (printerId: number) =>
request<FirmwareUploadStatus>(`/firmware/updates/${printerId}/upload/status`),