fix(ota): settle stale firmware update states

This commit is contained in:
stu2not
2026-09-22 10:35:37 +08:00
parent 5e163c4bb7
commit 2467656806
6 changed files with 240 additions and 10 deletions
+8 -5
View File
@@ -1,7 +1,7 @@
import FirmwareProgress from '@/components/firmware-progress'
import PageTitle from '@/components/page-title'
import { getParticipantArtwork, getRoleArtwork } from '@/utils/artwork'
import { firmwareSummaryView, isFirmwareCurrent, isFirmwareUpdateInProgress, normalizeFirmwareUpdateStatus } from '@/utils/firmware-status'
import { firmwareSummaryView, isFirmwareCurrent, isFirmwareTargetReached, isFirmwareUpdateInProgress, normalizeFirmwareUpdateStatus } from '@/utils/firmware-status'
import { getPageStyle } from '@/utils/page-style'
import { setActiveTabRoute } from '@/utils/tab-bar'
import { View, Text, Image, Input, Button } from '@tarojs/components'
@@ -248,7 +248,7 @@ export default function Sleep() {
return
}
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status)) {
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status) && !isFirmwareTargetReached(nextFirmwareStatus)) {
startFirmwareStatusPolling(normalizedDeviceId)
} else {
stopFirmwareStatusPolling()
@@ -272,14 +272,14 @@ export default function Sleep() {
setFirmwareStatus(nextFirmwareStatus)
setFirmwareRefreshError(false)
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status)) {
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status) && !isFirmwareTargetReached(nextFirmwareStatus)) {
scheduleFirmwareStatusPoll(normalizedDeviceId)
return
}
stopFirmwareStatusPolling()
const nextStatus = normalizeFirmwareUpdateStatus(nextFirmwareStatus?.update_status)
if (isFirmwareUpdateSuccessful(nextStatus)) {
if (isFirmwareUpdateSuccessful(nextStatus) || isFirmwareTargetReached(nextFirmwareStatus)) {
Taro.showToast({ title: '系统更新完成', icon: 'success' })
} else if (isFirmwareCurrent(nextFirmwareStatus)) {
Taro.showToast({ title: '当前已是最新版本', icon: 'none' })
@@ -319,7 +319,9 @@ export default function Sleep() {
if (generation !== firmwareLoadGenerationRef.current) return
setFirmwareStatus(nextFirmwareStatus)
setFirmwareRefreshError(false)
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status)) setShowFirmwareProgress(true)
if (isFirmwareUpdateInProgress(nextFirmwareStatus?.update_status) && !isFirmwareTargetReached(nextFirmwareStatus)) {
setShowFirmwareProgress(true)
}
syncFirmwareStatusPolling(normalizedDeviceId, nextFirmwareStatus)
} catch (error: any) {
if (generation !== firmwareLoadGenerationRef.current) return
@@ -1060,6 +1062,7 @@ export default function Sleep() {
isFamilyOwner
)
const isFirmwareUpdatingByStatus = isFirmwareUpdateInProgress(firmwareStatus?.update_status)
&& !isFirmwareTargetReached(firmwareStatus)
const firmwareSummary = firmwareSummaryView(firmwareStatus)
const canUpdateFirmware = Boolean(
binding?.device_id &&