feat(ota): support JSON progress updates
This commit is contained in:
@@ -1,17 +1,20 @@
|
||||
import type { DeviceFirmwareStatus } from '@/services/device'
|
||||
import { isFirmwareCurrent, isFirmwareTargetReached, isFirmwareUpdateInProgress } from '../../utils/firmware-status'
|
||||
import { isFirmwareCurrent, isFirmwareTargetReached, isFirmwareUpdateInProgress, normalizeFirmwareStatus } from '../../utils/firmware-status'
|
||||
|
||||
export function firmwareProgressView(status: DeviceFirmwareStatus | null, refreshError = false) {
|
||||
const state = String(status?.update_status || '').trim().toLowerCase()
|
||||
const normalizedStatus = normalizeFirmwareStatus(status)
|
||||
const state = String(normalizedStatus?.update_status || '').trim().toLowerCase()
|
||||
const complete = state === 'success' || state === 'completed'
|
||||
|| (isFirmwareUpdateInProgress(state) && isFirmwareTargetReached(status))
|
||||
const current = !complete && !isFirmwareUpdateInProgress(state) && isFirmwareCurrent(status)
|
||||
|| (isFirmwareUpdateInProgress(state) && isFirmwareTargetReached(normalizedStatus))
|
||||
const current = !complete && !isFirmwareUpdateInProgress(state) && isFirmwareCurrent(normalizedStatus)
|
||||
const failed = state === 'failed' && !current
|
||||
const value = Number(status?.progress)
|
||||
const value = Number(normalizedStatus?.progress)
|
||||
const progress = complete ? 100 : Number.isFinite(value) ? Math.max(0, Math.min(100, value)) : 0
|
||||
const hasProgress = complete || progress > 0
|
||||
const target = status?.target_version
|
||||
const version = current ? status?.current_version : target && !['unknown', 'updating'].includes(target) ? target : status?.latest_version
|
||||
// MQTT 003 carries target_version; latest_version is display-only fallback
|
||||
// for older status rows and must not be used for completion detection.
|
||||
const target = normalizedStatus?.target_version
|
||||
const version = current ? normalizedStatus?.current_version : target && !['unknown', 'updating'].includes(target) ? target : normalizedStatus?.latest_version
|
||||
const title = complete ? '固件更新完成' : current ? '当前已是最新版本' : failed ? '固件更新失败' : '固件更新中'
|
||||
const message = complete ? '设备已完成更新,可以继续使用。'
|
||||
: current ? '当前设备已运行最新版本,无需更新。'
|
||||
|
||||
Reference in New Issue
Block a user