修复: 版本更新与设置面板走查问题
- 更新链路: 检查记录远端SHA256,下载完成事件回传,安装时带哈希校验 - 续传: 服务器忽略Range返回200时截断重下防追加损坏,文件名去query - 定时器: 自动检查可重入,配置变更免重启生效,关闭即停,下载加互斥 - 前端: 支持跳过此版本并按版本去重,手动检查不受门禁限制,启动未就绪延时重试 - 更新面板: 新增自动检查开关/间隔/地址配置与进度条状态映射 - 版本历史: cache参数强制刷新与加载超时重试兜底 - 配置: 侧边栏分区全链路持久化,保存请求复用api类型防字段丢失 - 侧边栏: 区块定位改显式类名,不再依赖排序位置 - 绑定: 重新生成并与镜像目录同步
This commit is contained in:
+43
-4
@@ -92,7 +92,7 @@ func (a *App) VerifyUpdateFile(filePath string, expectedHash string, hashType st
|
||||
return api.VerifyUpdateFile(filePath, expectedHash, hashType)
|
||||
}
|
||||
|
||||
// startAutoUpdateCheck 启动自动更新检查
|
||||
// startAutoUpdateCheck 启动自动更新检查(可重入:先停止旧定时器再按当前配置新建)
|
||||
func (a *App) startAutoUpdateCheck() {
|
||||
updateAPI, err := a.requireUpdateAPI()
|
||||
if err != nil {
|
||||
@@ -116,6 +116,8 @@ func (a *App) startAutoUpdateCheck() {
|
||||
|
||||
autoCheckEnabled, ok := configData["auto_check_enabled"].(bool)
|
||||
if !ok || !autoCheckEnabled {
|
||||
// 关闭自动检查时停止存量定时器
|
||||
a.stopUpdateTicker()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -124,16 +126,53 @@ func (a *App) startAutoUpdateCheck() {
|
||||
interval = 5
|
||||
}
|
||||
|
||||
a.mu.Lock()
|
||||
if a.updateCheckStop != nil {
|
||||
close(a.updateCheckStop)
|
||||
}
|
||||
if a.updateTicker != nil {
|
||||
a.updateTicker.Stop()
|
||||
}
|
||||
stop := make(chan struct{})
|
||||
a.updateCheckStop = stop
|
||||
a.updateTicker = time.NewTicker(time.Duration(interval) * time.Minute)
|
||||
ticker := a.updateTicker
|
||||
a.mu.Unlock()
|
||||
|
||||
go a.checkUpdate()
|
||||
|
||||
a.updateTicker = time.NewTicker(time.Duration(interval) * time.Minute)
|
||||
go func() {
|
||||
for range a.updateTicker.C {
|
||||
a.checkUpdate()
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
a.checkUpdate()
|
||||
case <-stop:
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// stopUpdateTicker 停止自动更新检查定时器及其 goroutine
|
||||
func (a *App) stopUpdateTicker() {
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
if a.updateCheckStop != nil {
|
||||
close(a.updateCheckStop)
|
||||
a.updateCheckStop = nil
|
||||
}
|
||||
if a.updateTicker != nil {
|
||||
a.updateTicker.Stop()
|
||||
a.updateTicker = nil
|
||||
}
|
||||
}
|
||||
|
||||
// resetAutoUpdateCheck 重置自动更新检查(更新配置变更后调用,免重启生效)
|
||||
func (a *App) resetAutoUpdateCheck() {
|
||||
a.stopUpdateTicker()
|
||||
a.startAutoUpdateCheck()
|
||||
}
|
||||
|
||||
// checkUpdate 执行更新检查
|
||||
func (a *App) checkUpdate() {
|
||||
defer func() {
|
||||
|
||||
Reference in New Issue
Block a user