fix: do not set zero values in RPCState

This commit is contained in:
Siyuan 2025-11-17 13:16:54 +00:00
parent c19bd0d46b
commit e1943c89e8
1 changed files with 18 additions and 6 deletions

View File

@ -36,6 +36,18 @@ type RPCState struct {
SystemUpdatedAt *time.Time `json:"systemUpdatedAt,omitempty"` SystemUpdatedAt *time.Time `json:"systemUpdatedAt,omitempty"`
} }
func setTimeIfNotZero(rpcVal reflect.Value, i int, status time.Time) {
if !status.IsZero() {
rpcVal.Field(i).Set(reflect.ValueOf(&status))
}
}
func setFloat32IfNotZero(rpcVal reflect.Value, i int, status float32) {
if status != 0 {
rpcVal.Field(i).Set(reflect.ValueOf(&status))
}
}
// applyComponentStatusToRPCState uses reflection to map componentUpdateStatus fields to RPCState // applyComponentStatusToRPCState uses reflection to map componentUpdateStatus fields to RPCState
func applyComponentStatusToRPCState(component string, status componentUpdateStatus, rpcState *RPCState) { func applyComponentStatusToRPCState(component string, status componentUpdateStatus, rpcState *RPCState) {
prefix := componentFieldMap[component] prefix := componentFieldMap[component]
@ -55,17 +67,17 @@ func applyComponentStatusToRPCState(component string, status componentUpdateStat
switch rpcFieldName { switch rpcFieldName {
case "DownloadProgress": case "DownloadProgress":
rpcVal.Field(i).Set(reflect.ValueOf(&status.downloadProgress)) setFloat32IfNotZero(rpcVal, i, status.downloadProgress)
case "DownloadFinishedAt": case "DownloadFinishedAt":
rpcVal.Field(i).Set(reflect.ValueOf(&status.downloadFinishedAt)) setTimeIfNotZero(rpcVal, i, status.downloadFinishedAt)
case "VerificationProgress": case "VerificationProgress":
rpcVal.Field(i).Set(reflect.ValueOf(&status.verificationProgress)) setFloat32IfNotZero(rpcVal, i, status.verificationProgress)
case "VerifiedAt": case "VerifiedAt":
rpcVal.Field(i).Set(reflect.ValueOf(&status.verifiedAt)) setTimeIfNotZero(rpcVal, i, status.verifiedAt)
case "UpdateProgress": case "UpdateProgress":
rpcVal.Field(i).Set(reflect.ValueOf(&status.updateProgress)) setFloat32IfNotZero(rpcVal, i, status.updateProgress)
case "UpdatedAt": case "UpdatedAt":
rpcVal.Field(i).Set(reflect.ValueOf(&status.updatedAt)) setTimeIfNotZero(rpcVal, i, status.updatedAt)
case "UpdatePending": case "UpdatePending":
rpcVal.Field(i).SetBool(status.pending) rpcVal.Field(i).SetBool(status.pending)
default: default: